view src/main/kotlin/name/blackcap/passman/Entry.kt @ 6:711cc42e96d7

Got the list subcommand working, but needs efficiency improvements.
author David Barts <n5jrn@me.com>
date Tue, 20 Sep 2022 20:52:21 -0700
parents ad997df1f560
children f245b9a53495
line wrap: on
line source

package name.blackcap.passman

import java.util.*

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 {
        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)
    }

    private fun printDate(tag: String, date: Date?) {
        kotlin.io.print("${tag}: ")
        if (date == null) {
            println("never")
        } else {
            println(ISO8601.format(date))
        }
    }

}