diff options
| author | Harsh Shandilya <me@msfjarvis.dev> | 2021-03-09 14:53:11 +0530 |
|---|---|---|
| committer | Harsh Shandilya <me@msfjarvis.dev> | 2021-03-18 11:40:30 +0530 |
| commit | 774fda83ac276a635e3402034b1eedbd10be916f (patch) | |
| tree | 57783a953fcd193d32f1e3dc8df26e07f03df328 /app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd | |
| parent | be31ae37f443982b377d027cd613f04d0926568d (diff) | |
| download | HardenedPass-774fda83ac276a635e3402034b1eedbd10be916f.tar.gz HardenedPass-774fda83ac276a635e3402034b1eedbd10be916f.zip | |
all: reformat with ktfmt
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd')
3 files changed, 135 insertions, 138 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt index 4b398f06..69a4692d 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt @@ -5,5 +5,9 @@ package dev.msfjarvis.aps.util.pwgenxkpwd enum class CapsType { - lowercase, UPPERCASE, TitleCase, Sentence, As_iS + lowercase, + UPPERCASE, + TitleCase, + Sentence, + As_iS } diff --git a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt index 41860293..cc8257b4 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt @@ -16,127 +16,120 @@ import java.util.Locale class PasswordBuilder(ctx: Context) { - private var numSymbols = 0 - private var isAppendSymbolsSeparator = false - private var context = ctx - private var numWords = 3 - private var maxWordLength = 9 - private var minWordLength = 5 - private var separator = "." - private var capsType = CapsType.Sentence - private var prependDigits = 0 - private var numDigits = 0 - private var isPrependWithSeparator = false - private var isAppendNumberSeparator = false - - fun setNumberOfWords(amount: Int) = apply { - numWords = amount + private var numSymbols = 0 + private var isAppendSymbolsSeparator = false + private var context = ctx + private var numWords = 3 + private var maxWordLength = 9 + private var minWordLength = 5 + private var separator = "." + private var capsType = CapsType.Sentence + private var prependDigits = 0 + private var numDigits = 0 + private var isPrependWithSeparator = false + private var isAppendNumberSeparator = false + + fun setNumberOfWords(amount: Int) = apply { numWords = amount } + + fun setMinimumWordLength(min: Int) = apply { minWordLength = min } + + fun setMaximumWordLength(max: Int) = apply { maxWordLength = max } + + fun setSeparator(separator: String) = apply { this.separator = separator } + + fun setCapitalization(capitalizationScheme: CapsType) = apply { capsType = capitalizationScheme } + + @JvmOverloads + fun prependNumbers(numDigits: Int, addSeparator: Boolean = true) = apply { + prependDigits = numDigits + isPrependWithSeparator = addSeparator + } + + @JvmOverloads + fun appendNumbers(numDigits: Int, addSeparator: Boolean = false) = apply { + this.numDigits = numDigits + isAppendNumberSeparator = addSeparator + } + + @JvmOverloads + fun appendSymbols(numSymbols: Int, addSeparator: Boolean = false) = apply { + this.numSymbols = numSymbols + isAppendSymbolsSeparator = addSeparator + } + + private fun generateRandomNumberSequence(totalNumbers: Int): String { + val numbers = StringBuilder(totalNumbers) + for (i in 0 until totalNumbers) { + numbers.append(secureRandomNumber(10)) } + return numbers.toString() + } - fun setMinimumWordLength(min: Int) = apply { - minWordLength = min + private fun generateRandomSymbolSequence(numSymbols: Int): String { + val numbers = StringBuilder(numSymbols) + for (i in 0 until numSymbols) { + numbers.append(SYMBOLS.secureRandomCharacter()) } - - fun setMaximumWordLength(max: Int) = apply { - maxWordLength = max - } - - fun setSeparator(separator: String) = apply { - this.separator = separator - } - - fun setCapitalization(capitalizationScheme: CapsType) = apply { - capsType = capitalizationScheme + return numbers.toString() + } + + @OptIn(ExperimentalStdlibApi::class) + fun create(): Result<String, Throwable> { + val wordBank = mutableListOf<String>() + val password = StringBuilder() + + if (prependDigits != 0) { + password.append(generateRandomNumberSequence(prependDigits)) + if (isPrependWithSeparator) { + password.append(separator) + } } - - @JvmOverloads - fun prependNumbers(numDigits: Int, addSeparator: Boolean = true) = apply { - prependDigits = numDigits - isPrependWithSeparator = addSeparator - } - - @JvmOverloads - fun appendNumbers(numDigits: Int, addSeparator: Boolean = false) = apply { - this.numDigits = numDigits - isAppendNumberSeparator = addSeparator - } - - @JvmOverloads - fun appendSymbols(numSymbols: Int, addSeparator: Boolean = false) = apply { - this.numSymbols = numSymbols - isAppendSymbolsSeparator = addSeparator - } - - private fun generateRandomNumberSequence(totalNumbers: Int): String { - val numbers = StringBuilder(totalNumbers) - for (i in 0 until totalNumbers) { - numbers.append(secureRandomNumber(10)) + return runCatching { + val dictionary = XkpwdDictionary(context) + val words = dictionary.words + for (wordLength in minWordLength..maxWordLength) { + wordBank.addAll(words[wordLength] ?: emptyList()) + } + + if (wordBank.size == 0) { + throw PasswordGeneratorException( + context.getString(R.string.xkpwgen_builder_error, minWordLength, maxWordLength) + ) + } + + for (i in 0 until numWords) { + val candidate = wordBank.secureRandomElement() + val s = + when (capsType) { + CapsType.UPPERCASE -> candidate.toUpperCase(Locale.getDefault()) + CapsType.Sentence -> if (i == 0) candidate.capitalize(Locale.getDefault()) else candidate + CapsType.TitleCase -> candidate.capitalize(Locale.getDefault()) + CapsType.lowercase -> candidate.toLowerCase(Locale.getDefault()) + CapsType.As_iS -> candidate + } + password.append(s) + if (i + 1 < numWords) { + password.append(separator) } - return numbers.toString() - } - - private fun generateRandomSymbolSequence(numSymbols: Int): String { - val numbers = StringBuilder(numSymbols) - for (i in 0 until numSymbols) { - numbers.append(SYMBOLS.secureRandomCharacter()) + } + if (numDigits != 0) { + if (isAppendNumberSeparator) { + password.append(separator) } - return numbers.toString() - } - - @OptIn(ExperimentalStdlibApi::class) - fun create(): Result<String, Throwable> { - val wordBank = mutableListOf<String>() - val password = StringBuilder() - - if (prependDigits != 0) { - password.append(generateRandomNumberSequence(prependDigits)) - if (isPrependWithSeparator) { - password.append(separator) - } - } - return runCatching { - val dictionary = XkpwdDictionary(context) - val words = dictionary.words - for (wordLength in minWordLength..maxWordLength) { - wordBank.addAll(words[wordLength] ?: emptyList()) - } - - if (wordBank.size == 0) { - throw PasswordGeneratorException(context.getString(R.string.xkpwgen_builder_error, minWordLength, maxWordLength)) - } - - for (i in 0 until numWords) { - val candidate = wordBank.secureRandomElement() - val s = when (capsType) { - CapsType.UPPERCASE -> candidate.toUpperCase(Locale.getDefault()) - CapsType.Sentence -> if (i == 0) candidate.capitalize(Locale.getDefault()) else candidate - CapsType.TitleCase -> candidate.capitalize(Locale.getDefault()) - CapsType.lowercase -> candidate.toLowerCase(Locale.getDefault()) - CapsType.As_iS -> candidate - } - password.append(s) - if (i + 1 < numWords) { - password.append(separator) - } - } - if (numDigits != 0) { - if (isAppendNumberSeparator) { - password.append(separator) - } - password.append(generateRandomNumberSequence(numDigits)) - } - if (numSymbols != 0) { - if (isAppendSymbolsSeparator) { - password.append(separator) - } - password.append(generateRandomSymbolSequence(numSymbols)) - } - password.toString() + password.append(generateRandomNumberSequence(numDigits)) + } + if (numSymbols != 0) { + if (isAppendSymbolsSeparator) { + password.append(separator) } + password.append(generateRandomSymbolSequence(numSymbols)) + } + password.toString() } + } - companion object { + companion object { - private const val SYMBOLS = "!@\$%^&*-_+=:|~?/.;#" - } + private const val SYMBOLS = "!@\$%^&*-_+=:|~?/.;#" + } } diff --git a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt index 1e44ab20..ab31892f 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt @@ -13,28 +13,28 @@ import java.io.File class XkpwdDictionary(context: Context) { - val words: Map<Int, List<String>> - - init { - val prefs = context.sharedPrefs - val uri = prefs.getString(PreferenceKeys.PREF_KEY_CUSTOM_DICT) ?: "" - val customDictFile = File(context.filesDir, XKPWD_CUSTOM_DICT_FILE) - - val lines = if (prefs.getBoolean(PreferenceKeys.PREF_KEY_IS_CUSTOM_DICT, false) && - uri.isNotEmpty() && customDictFile.canRead()) { - customDictFile.readLines() - } else { - context.resources.openRawResource(R.raw.xkpwdict).bufferedReader().readLines() - } - - words = lines.asSequence() - .map { it.trim() } - .filter { it.isNotEmpty() && !it.contains(' ') } - .groupBy { it.length } - } - - companion object { - - const val XKPWD_CUSTOM_DICT_FILE = "custom_dict.txt" - } + val words: Map<Int, List<String>> + + init { + val prefs = context.sharedPrefs + val uri = prefs.getString(PreferenceKeys.PREF_KEY_CUSTOM_DICT) ?: "" + val customDictFile = File(context.filesDir, XKPWD_CUSTOM_DICT_FILE) + + val lines = + if (prefs.getBoolean(PreferenceKeys.PREF_KEY_IS_CUSTOM_DICT, false) && + uri.isNotEmpty() && + customDictFile.canRead() + ) { + customDictFile.readLines() + } else { + context.resources.openRawResource(R.raw.xkpwdict).bufferedReader().readLines() + } + + words = lines.asSequence().map { it.trim() }.filter { it.isNotEmpty() && !it.contains(' ') }.groupBy { it.length } + } + + companion object { + + const val XKPWD_CUSTOM_DICT_FILE = "custom_dict.txt" + } } |
