summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglowinthedark <48893368+glowinthedark@users.noreply.github.com>2020-08-17 12:40:03 +0200
committerGitHub <noreply@github.com>2020-08-17 16:10:03 +0530
commit82ae0a8629a42bc169b4b1993bc8257457703e3f (patch)
treebf70bdc580a44a3cdced36c4b0e0b4bd89895f1d
parente2a372bc63eac1a68427dfc55e32cd83f0440219 (diff)
Allow adding digits and symbols in XkPasswd generator using mask-like values (#1023)
* - XkPasswordGeneratorDialogFragment: add symbol/number mask to allow appending numbers+symbols via a mask such as `ddds` which would generate random.password123!; position of `d` and `s` is not currently considered; only the count is relevant * - update CHANGELOG.md * - update CHANGELOG.md * - rename constants * Update CHANGELOG.md Co-authored-by: Harsh Shandilya <me@msfjarvis.dev> * - add missing marginTop * - add missing marginTop Co-authored-by: null <null> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev> Co-authored-by: glowinthedark <glowinthedark> Co-authored-by: Harsh Shandilya <msfjarvis@gmail.com>
-rw-r--r--CHANGELOG.md1
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/CapsType.kt2
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt4
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt12
-rw-r--r--app/src/main/res/layout/fragment_xkpwgen.xml23
-rw-r--r--app/src/main/res/values/arrays.xml2
-rw-r--r--app/src/main/res/values/strings.xml2
7 files changed, 39 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e841d1a4..b8df8873 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
### Added
- Allow changing the branch used for Git operations
- Allow setting a subdirectory key when creating folders
+- Allow adding digits/symbols in XkPasswd generated passwords using a mask-like value (`dds` gives you two digits and a symbol, and so on)
### Changed
diff --git a/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/CapsType.kt b/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/CapsType.kt
index a0311b8d..f98a9f10 100644
--- a/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/CapsType.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/CapsType.kt
@@ -5,5 +5,5 @@
package com.zeapo.pwdstore.pwgenxkpwd
enum class CapsType {
- lowercase, UPPERCASE, TitleCase, Sentencecase, As_iS
+ lowercase, UPPERCASE, TitleCase, Sentence, As_iS
}
diff --git a/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt b/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt
index 04cd16f6..587a5350 100644
--- a/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/pwgenxkpwd/PasswordBuilder.kt
@@ -22,7 +22,7 @@ class PasswordBuilder(ctx: Context) {
private var maxWordLength = 9
private var minWordLength = 5
private var separator = "."
- private var capsType = CapsType.Sentencecase
+ private var capsType = CapsType.Sentence
private var prependDigits = 0
private var numDigits = 0
private var isPrependWithSeparator = false
@@ -109,7 +109,7 @@ class PasswordBuilder(ctx: Context) {
val candidate = wordBank.secureRandomElement()
val s = when (capsType) {
CapsType.UPPERCASE -> candidate.toUpperCase(Locale.getDefault())
- CapsType.Sentencecase -> if (i == 0) candidate.capitalize(Locale.getDefault()) else candidate
+ 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
diff --git a/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt b/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt
index ebd014c5..527e4c6c 100644
--- a/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/ui/dialogs/XkPasswordGeneratorDialogFragment.kt
@@ -58,6 +58,7 @@ class XkPasswordGeneratorDialogFragment : DialogFragment() {
binding.xkNumWords.setText(prefs.getString(PREF_KEY_NUM_WORDS, DEFAULT_NUMBER_OF_WORDS))
binding.xkSeparator.setText(prefs.getString(PREF_KEY_SEPARATOR, DEFAULT_WORD_SEPARATOR))
+ binding.xkNumberSymbolMask.setText(prefs.getString(PREF_KEY_EXTRA_SYMBOLS_MASK, DEFAULT_EXTRA_SYMBOLS_MASK))
binding.xkPasswordText.typeface = monoTypeface
@@ -92,6 +93,8 @@ class XkPasswordGeneratorDialogFragment : DialogFragment() {
.setMinimumWordLength(DEFAULT_MIN_WORD_LENGTH)
.setMaximumWordLength(DEFAULT_MAX_WORD_LENGTH)
.setSeparator(binding.xkSeparator.text.toString())
+ .appendNumbers(binding.xkNumberSymbolMask.text!!.count { c -> c == EXTRA_CHAR_PLACEHOLDER_DIGIT })
+ .appendSymbols(binding.xkNumberSymbolMask.text!!.count { c -> c == EXTRA_CHAR_PLACEHOLDER_SYMBOL })
.setCapitalization(CapsType.valueOf(binding.xkCapType.selectedItem.toString())).create()
} catch (e: PasswordGenerator.PasswordGeneratorException) {
Toast.makeText(requireActivity(), e.message, Toast.LENGTH_SHORT).show()
@@ -105,6 +108,7 @@ class XkPasswordGeneratorDialogFragment : DialogFragment() {
putString(PREF_KEY_CAPITALS_STYLE, binding.xkCapType.selectedItem.toString())
putString(PREF_KEY_NUM_WORDS, binding.xkNumWords.text.toString())
putString(PREF_KEY_SEPARATOR, binding.xkSeparator.text.toString())
+ putString(PREF_KEY_EXTRA_SYMBOLS_MASK, binding.xkNumberSymbolMask.text.toString())
}
}
@@ -113,12 +117,16 @@ class XkPasswordGeneratorDialogFragment : DialogFragment() {
const val PREF_KEY_CAPITALS_STYLE = "pref_key_capitals_style"
const val PREF_KEY_NUM_WORDS = "pref_key_num_words"
const val PREF_KEY_SEPARATOR = "pref_key_separator"
- val DEFAULT_CAPS_STYLE = CapsType.Sentencecase.name
- val DEFAULT_CAPS_INDEX = CapsType.Sentencecase.ordinal
+ const val PREF_KEY_EXTRA_SYMBOLS_MASK = "pref_key_xkpwgen_extra_symbols_mask"
+ val DEFAULT_CAPS_STYLE = CapsType.Sentence.name
+ val DEFAULT_CAPS_INDEX = CapsType.Sentence.ordinal
const val DEFAULT_NUMBER_OF_WORDS = "3"
const val DEFAULT_WORD_SEPARATOR = "."
+ const val DEFAULT_EXTRA_SYMBOLS_MASK = "ds"
const val DEFAULT_MIN_WORD_LENGTH = 3
const val DEFAULT_MAX_WORD_LENGTH = 9
const val FALLBACK_ERROR_PASS = "42"
+ const val EXTRA_CHAR_PLACEHOLDER_DIGIT = 'd'
+ const val EXTRA_CHAR_PLACEHOLDER_SYMBOL = 's'
}
}
diff --git a/app/src/main/res/layout/fragment_xkpwgen.xml b/app/src/main/res/layout/fragment_xkpwgen.xml
index 112c94d9..749fba47 100644
--- a/app/src/main/res/layout/fragment_xkpwgen.xml
+++ b/app/src/main/res/layout/fragment_xkpwgen.xml
@@ -75,7 +75,28 @@
android:entries="@array/capitalization_type_values"
android:entryValues="@array/capitalization_type_values"
android:spinnerMode="dropdown"
+ app:layout_constraintEnd_toEndOf="@id/total_words"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/separator" />
+ app:layout_constraintTop_toBottomOf="@id/total_words" />
+
+ <com.google.android.material.textfield.TextInputLayout
+ android:id="@+id/xk_numbers_symbols_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:hint="@string/xkpwgen_extrachars_label"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="@id/separator"
+ app:layout_constraintTop_toBottomOf="@id/separator"
+ app:layout_constraintTop_toTopOf="@id/xkCapType">
+
+ <com.google.android.material.textfield.TextInputEditText
+ android:id="@+id/xk_number_symbol_mask"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:autofillHints=""
+ android:inputType="text"
+ android:text="@string/xk_numbers_symbols_append_default" />
+ </com.google.android.material.textfield.TextInputLayout>
+
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 1ccdd5eb..6b5edf6c 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -18,7 +18,7 @@
<item>lowercase</item>
<item>UPPERCASE</item>
<item>TitleCase</item>
- <item>Sentencecase</item>
+ <item>Sentence</item>
</string-array>
<string-array name="pwgen_provider_labels">
<item>Classic</item>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4b1e81bf..fe2a3488 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -390,4 +390,6 @@
<!-- GPG key selection in folder creation -->
<string name="folder_creation_err_file_exists">A file by that name already exists</string>
<string name="folder_creation_err_folder_exists">A folder by that name already exists</string>
+ <string name="xkpwgen_extrachars_label" >Digits/Symbols (d/s)</string>
+ <string name="xk_numbers_symbols_append_default">ds</string>
</resources>