Mercurial > cgi-bin > hgweb.cgi > PassMan
view src/main/kotlin/name/blackcap/passman/Main.kt @ 2:3c792ad36b3d
Can now update a password and read it back.
author | David Barts <n5jrn@me.com> |
---|---|
date | Sun, 11 Sep 2022 18:24:55 -0700 |
parents | a6cfdffcaa94 |
children | eafa3779aef8 |
line wrap: on
line source
package name.blackcap.passman import java.io.BufferedReader import java.io.InputStreamReader import java.util.* import java.util.stream.Collectors import kotlin.reflect.jvm.javaMethod import kotlin.reflect.jvm.kotlinFunction import kotlin.system.exitProcess fun main(args: Array<String>) { if (args.isEmpty()) { error("expecting subcommand") exitProcess(2) } val subcommand = args[0]; val scArgs = args.sliceArray(1 until args.size) runSubcommand(subcommand, scArgs) } fun runSubcommand(name: String, args: Array<String>): Unit { val instance = getInstanceForClass(getClassForSubcommand(name)) if (instance == null) { die("$name - unknown subcommand", 2) } else { instance.run(args) } } fun getClassForSubcommand(name: String): Class<Subcommand>? = try { val shortName = name.replace('-', '_') .lowercase() .replaceFirstChar { it.titlecase(Locale.getDefault()) } Class.forName("$MAIN_PACKAGE.${shortName}Subcommand") as? Class<Subcommand> /* val ret = Class.forName("$MAIN_PACKAGE.$shortName") if (ret.isInstance(Subcommand::class.java)) { ret as Class<Subcommand> } else { null } */ } catch (e: ClassNotFoundException) { null } fun getInstanceForClass(klass: Class<Subcommand>?) = try { klass?.getDeclaredConstructor()?.newInstance() } catch (e: ReflectiveOperationException) { null }