Mercurial > cgi-bin > hgweb.cgi > PassMan
view src/main/kotlin/name/blackcap/passman/Entry.kt @ 7:f245b9a53495
Efficiency improvements.
author | David Barts <n5jrn@me.com> |
---|---|
date | Tue, 20 Sep 2022 21:54:32 -0700 |
parents | ad997df1f560 |
children | 698c4a3d758d |
line wrap: on
line source
package name.blackcap.passman import java.util.* import kotlin.reflect.KProperty import kotlin.reflect.full.declaredMemberProperties class Entry(val name: String, val username: String, val password: CharArray, val notes: String, val created: Date? = null, val modified: Date? = null, val accessed: Date? = null) { companion object { private val FIELD_MAP = mutableMapOf<String, KProperty.Getter<*>>().apply { Entry::class.declaredMemberProperties.forEach{ this[it.name] = it.getter } } fun withPromptedPassword() = Entry( name = _getName(), username = _getUsername(), password = _getPassword(), notes = _getNotes() ) fun withGeneratedPassword(length: Int, allowSymbols: Boolean, verbose: Boolean): Entry { return Entry( name = _getName(), username = _getUsername(), password = _genPassword(length, allowSymbols, verbose), notes = _getNotes() ) } private fun _genPassword(length: Int, allowSymbols: Boolean, verbose: Boolean): CharArray { val generated = generate(length, allowSymbols) if (verbose) { printPassword(generated) } return generated } private fun _getName() = mustReadLine("Name of site: ") private fun _getUsername() = mustReadLine("Username: ") private fun _getPassword() = mustGetPassword("Password: ", verify = true) private fun _getNotes() = readLine("Notes: ") } fun print(redactPassword: String? = null) { println("Name of site: $name") println("Username: $username") if (redactPassword == null) { printPassword(password) } else { println("Password: $redactPassword") } } fun printLong(redactPassword: String? = null) { print(redactPassword) println("Notes: $notes") printDate("Created", created) printDate("Modified", modified) printDate("Accessed", accessed) } fun getField(name: String): Any? { return FIELD_MAP[name]!!.call(this) } private fun printDate(tag: String, date: Date?) { kotlin.io.print("${tag}: ") if (date == null) { println("never") } else { println(ISO8601.format(date)) } } }