Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
65a3b49
fix: improve hostname parsing logic in getSiteName function
Hank076 May 6, 2025
e7c0320
fix: improve hostname parsing logic in getSiteName function
Hank076 May 6, 2025
0af8308
fix(storage): parse type & algorithm enums correctly on import
Hank076 Jun 21, 2026
ac1501d
fix(popup): keep countdown second non-negative for any clock offset
Hank076 Jun 21, 2026
8ce1acb
fix(import): accept any positive-integer TOTP period
Hank076 Jun 21, 2026
7c2efb3
fix(preferences): only show smart-filter hint when enabling it
Hank076 Jun 21, 2026
17a7da4
fix(advisor): don't warn about autolock when using the 30-min default
Hank076 Jun 21, 2026
d815f3e
fix(add-account): apply selected algorithm and digits immediately
Hank076 Jun 21, 2026
02e06a2
fix(onedrive): send token-exchange parameters in the request body
Hank076 Jun 21, 2026
0b0e182
fix(popup): show search box on load, not only after clearing a filter
Hank076 Jun 21, 2026
4e3e462
feat(import): support andOTP plain-JSON backups
Hank076 Jun 21, 2026
afecff9
fix(qr): keep the issuer:account colon literal in exported QR codes
Hank076 Jun 21, 2026
b9b43a6
fix(autofill): skip hidden inputs when pasting the code
Hank076 Jun 21, 2026
64f9822
fix(reorder): map drag indices through the displayed order
Hank076 Jun 21, 2026
598ebe7
fix(edit): stop arrow keys in entry fields from navigating the list
Hank076 Jun 21, 2026
247d946
fix(import): detect failed migration imports instead of always succee…
Hank076 Jun 21, 2026
1f955c8
fix(storage): surface sync write failures instead of dropping entries
Hank076 Jun 21, 2026
2af9666
fix(autofill): anchor domain match and ignore page title when pasting…
Hank076 Jun 21, 2026
1a873b1
fix(hotp): restore the 3s refresh debounce and disabled state
Hank076 Jun 21, 2026
5a9b7c6
fix(backup): don't mutate live export state when building the .txt ba…
Hank076 Jun 21, 2026
221124b
fix(migration): validate bounds and fields when parsing otpauth-migra…
Hank076 Jun 21, 2026
1357e84
fix(notification): remove the confirm listener after it fires
Hank076 Jun 21, 2026
b19fee3
fix(unlock): recover the UI when unlocking throws
Hank076 Jun 21, 2026
8e3ac75
fix(argon): correlate sandbox responses and stop leaking listeners
Hank076 Jun 21, 2026
f6b15e9
chore(deps): move crypto-js to dependencies and @types/lodash to dev
Hank076 Jun 21, 2026
b3086c4
build(prod): don't emit source maps in production builds
Hank076 Jun 21, 2026
87fbf21
build: don't block on an interactive keypress for forks
Hank076 Jun 21, 2026
93a3a5e
fix(import): skip a corrupt encrypted entry instead of aborting the i…
Hank076 Jun 21, 2026
d652b34
fix(synctime): report failure on an unparseable date header
Hank076 Jun 21, 2026
239d0b3
fix(backup): treat a non-2xx Dropbox response as a failed upload
Hank076 Jun 21, 2026
25605b3
fix(storage): use commitItems on sync->local migration and zero-pad t…
Hank076 Jun 21, 2026
6a9f0f4
fix(background): ignore runtime messages not from this extension
Hank076 Jun 21, 2026
1d0bd8a
fix(backup): log scheduled backup failures instead of swallowing them
Hank076 Jun 21, 2026
c2994cb
refactor(entry): render the code with text interpolation, drop v-html
Hank076 Jun 21, 2026
308ed90
refactor(store): route Accounts state changes through mutations
Hank076 Jun 21, 2026
816369e
refactor(store): convert async Advisor/Permissions mutations to actions
Hank076 Jun 21, 2026
7765118
feat(store): enable Vuex strict mode in development builds
Hank076 Jun 21, 2026
a175e19
refactor(store): move deferred animation/alert resets out of mutations
Hank076 Jun 21, 2026
3f4c83a
fix(messaging): don't return true from listeners that send no response
Hank076 Jun 21, 2026
cff9cf8
fix(popup): re-sync the timer circle after pinning or reordering
Hank076 Jun 21, 2026
490bb94
perf(content): reuse one willReadFrequently canvas context for QR cap…
Hank076 Jun 21, 2026
83a0996
feat(encryption): encrypt with authenticated AES-GCM, read legacy CBC
Hank076 Jun 21, 2026
f5794c2
refactor: await the now-async encryption across read/write paths
Hank076 Jun 21, 2026
6f7a3b6
fix(import): detect otpauth text backups instead of JSON-parsing them
Hank076 Jun 21, 2026
b708c6c
fix(import): detect otpauth text in the paste-import box too
Hank076 Jun 21, 2026
f4ac338
build(vue3): upgrade to Vue 3 / Vuex 4 toolchain
Hank076 Jun 21, 2026
c56b4c8
refactor(vue3): convert entry points to createApp / createStore
Hank076 Jun 21, 2026
3720ee4
test(vue3): migrate unit tests to @vue/test-utils v2
Hank076 Jun 21, 2026
d20d59a
refactor(vue3): migrate components and swap dragula for vuedraggable
Hank076 Jun 21, 2026
3078ae8
fix(vue3): guard empty dynamic component and define Vue feature flags
Hank076 Jun 21, 2026
a41a44d
fix(vue3): bind filtered/notSearched as classes so entries stay visible
Hank076 Jun 22, 2026
5570b8d
fix(vue3): keep set-password/unlock strict-safe under Vuex 4
Hank076 Jun 22, 2026
983e70d
fix(popup): read lastError when locking so it isn't an unchecked warning
Hank076 Jun 22, 2026
c54b5ba
fix(qr): scan via sender.tab so MV3 worker recycling can't break it
Hank076 Jun 22, 2026
4806c3d
fix(qr): guard qrDecode against empty capture / degenerate selection
Hank076 Jun 22, 2026
a959dbf
fix(qr): stable drag-select and quieter non-QR scans
Hank076 Jun 22, 2026
d7ea7f9
fix(qr): prevent native drag so the selection box is draggable
Hank076 Jun 22, 2026
0b5c96f
fix(qr): dismiss capture overlay on autolock across MV3 worker recycling
Hank076 Jun 22, 2026
c598cc6
fix(security): encrypt manually-added account secret (Map.get not bra…
Hank076 Jun 22, 2026
5095a51
test(AddAccountPage): assert raw encryption to avoid chai+reactive crash
Hank076 Jun 22, 2026
47034ea
test(vue3): fix migrated EnterPasswordPage/MenuPage tests for test-ut…
Hank076 Jun 22, 2026
8c12da5
fix(gitignore): anchor root test/ build dir with /test (was invalid .…
Hank076 Jun 22, 2026
5c75d8d
i18n(zh_TW): proofread Traditional Chinese for Taiwan usage
Hank076 Jun 22, 2026
c271202
i18n(zh_TW): add missing space after QR Code in import warning
Hank076 Jun 22, 2026
538b84a
fix(backup): correct encryption toggle in cloud backup pages
Hank076 Jun 22, 2026
f836928
fix(preferences): restore storage-migration error handler
Hank076 Jun 22, 2026
a7fc008
fix(backup): repair broken promise paths in cloud providers
Hank076 Jun 22, 2026
c41c5c6
fix(store): await UserSettings in Backup module init
Hank076 Jun 22, 2026
4b22c63
refactor(advisor): drop `this.` prefix in component templates
Hank076 Jun 22, 2026
c1c8afa
refactor(encryption): simplify boolean return
Hank076 Jun 22, 2026
8ab7528
refactor(key-utilities): remove dead hex2str, use String.padStart
Hank076 Jun 22, 2026
174a40c
refactor(advisor): remove no-op InsightLevel cast
Hank076 Jun 22, 2026
39a89e7
refactor(menu): remove dead icon import, simplify isSupported
Hank076 Jun 22, 2026
985f9d4
refactor(permissions): drop redundant Promise.all over resolved values
Hank076 Jun 22, 2026
8092df4
refactor(accounts): tidy session lookup, dead comment, dedupe regex
Hank076 Jun 22, 2026
9a30756
fix(otp): stop generate() racing a code with offset 0
Hank076 Jun 22, 2026
b50bdee
fix(migration): skip MD5 and bound the HOTP counter read correctly
Hank076 Jun 22, 2026
f7542e8
fix(backup): harden Drive/OneDrive upload result handling
Hank076 Jun 22, 2026
d849394
refactor(backup): send Drive OAuth refresh params in the POST body
Hank076 Jun 22, 2026
e9dac23
fix(permissions): resolve revoke promise without a dangling timer
Hank076 Jun 22, 2026
b9bbf2e
refactor(advisor): extract parseIgnoreList helper
Hank076 Jun 22, 2026
db40732
refactor(i18n): load bundled messages with fetch
Hank076 Jun 22, 2026
2abe325
refactor(synctime): reuse the already-computed offset
Hank076 Jun 22, 2026
06172c4
refactor(import): remove no-op try/catch
Hank076 Jun 22, 2026
c8ea145
refactor(accounts): use a Set for linkedKeys
Hank076 Jun 22, 2026
aeb6e82
refactor(storage): drop stale TODO on already-async get()
Hank076 Jun 22, 2026
908c0e3
style: apply prettier formatting
Hank076 Jun 22, 2026
231fc0a
feat(menu): point external links at the Hank076 fork
Hank076 Jun 22, 2026
9b4de0a
Merge branch 'feature/code-review-cleanup' into dev
Hank076 Jun 22, 2026
182d7d0
feat(i18n): add strings for the redesigned UI
Hank076 Jun 23, 2026
7760f8b
feat(ui): redesign the extension with a CSS custom-property design sy…
Hank076 Jun 23, 2026
3edc3b3
Merge branch 'feature/ui-redesign' into dev
Hank076 Jun 23, 2026
cac5c6b
docs: add host-bound autofill design
Hank076 Jun 23, 2026
2e111a8
feat(autofill): require a host match before injecting a code
Hank076 Jun 23, 2026
9729e8f
Merge branch 'feature/host-bound-autofill' into dev
Hank076 Jun 23, 2026
22a339b
feat(backup): require a master password before cloud backup
Hank076 Jun 23, 2026
b489eaa
Merge branch 'feature/require-password-for-cloud-backup' into dev
Hank076 Jun 23, 2026
af3c3ab
feat(import): redesign the import page with interactive tabs
Hank076 Jun 23, 2026
65227c2
fix(backup): open import in a new tab
Hank076 Jun 23, 2026
220e523
Merge branch 'feature/import-redesign' into dev
Hank076 Jun 23, 2026
9a31db9
fix(storage): preserve bound host when reloading entries
Hank076 Jun 23, 2026
2548085
Merge branch 'fix/host-persistence' into dev
Hank076 Jun 23, 2026
cdfc991
feat: rebrand extension to OTPilot Authenticator
Hank076 Jun 24, 2026
6a9e3cb
feat(backup): add Dropbox OAuth app key
Hank076 Jun 24, 2026
408b355
fix(backup): make Dropbox upload work in the MV3 service worker
Hank076 Jun 24, 2026
c61bbc5
fix(backup): repair cloud connect flow and encryption UX
Hank076 Jun 24, 2026
ef2ba44
feat(i18n): apply OTPilot brand name across all locales
Hank076 Jun 25, 2026
b80ef4b
feat(backup): wire up Google Drive OAuth with a pinned extension id
Hank076 Jun 25, 2026
7519446
fix(import): enable drag-and-drop on the backup dropzone
Hank076 Jun 25, 2026
d5f3c16
feat(i18n): translate priority locales and unify brand to OTPilot
Hank076 Jun 25, 2026
c724252
fix: quiet wrong-passphrase logging and accept boolean SelectInput value
Hank076 Jun 25, 2026
f02c52a
fix(backup): make Google Drive backup work under the new OAuth rules
Hank076 Jun 25, 2026
ed37356
feat(backup): redesign the Google Drive connect and connected pages
Hank076 Jun 25, 2026
ea08afa
fix(ui): disable OneDrive and align brand icons
Hank076 Jun 25, 2026
5794910
docs: add privacy policy for Chrome Web Store submission
Hank076 Jun 26, 2026
e3ecad6
feat(i18n): refine Traditional Chinese import and lock wording
Hank076 Jun 26, 2026
634ed63
Merge remote-tracking branch 'origin/dev' into dev
Hank076 Jun 26, 2026
0c6c152
docs: fill in privacy policy date and contact email
Hank076 Jun 26, 2026
f73fa03
fix(i18n): restore zh_TW import and lock wording
Hank076 Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ cert.pfx
css
.license-gen-tmp
view/licenses.html
./test
/test
scripts/authenticator-build-key
scripts/test-runner.js
10 changes: 5 additions & 5 deletions _locales/ar/messages.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"extName": {
"message": "الموثق",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "المدقق",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
Expand Down Expand Up @@ -120,10 +120,10 @@
"description": "Message that user is required to acknowledge before clearing all data."
},
"delete_all": {
"message": "إعادة تعيين Authenticator"
"message": "إعادة تعيين OTPilot"
},
"delete_all_warning": {
"message": "سيؤدي هذا إلى حذف جميع بياناتك وإعادة تعيين Authenticator بالكامل. لن تتمكن من استعادة أي بيانات محذوفة! يجب مراعاة حفظ نسخة احتياطية قبل إعادة تعيين Authenticator."
"message": "سيؤدي هذا إلى حذف جميع بياناتك وإعادة تعيين OTPilot بالكامل. لن تتمكن من استعادة أي بيانات محذوفة! يجب مراعاة حفظ نسخة احتياطية قبل إعادة تعيين OTPilot."
},
"security_warning": {
"message": "هذا الكود الخاص سوف يستخدم لتشفير حسابك.\nلا نقدر على مساعدتك إذا فقدت هذا الكود الخاص.",
Expand Down Expand Up @@ -489,7 +489,7 @@
"message": "يمنح صلاحية الكتابة فقط إلى الحافظة لنسخ الرموز إلى الحافظة عند النقر على الحساب."
},
"permission_context_menus": {
"message": "يضيف Authenticator إلى القائمة."
"message": "يضيف OTPilot إلى القائمة."
},
"permission_sync_clock": {
"message": "يسمح بمزامنة الساعة مع جوجل."
Expand Down
4 changes: 2 additions & 2 deletions _locales/bg/messages.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"extName": {
"message": "Удостоверител",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "Удостоверяване",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
Expand Down
4 changes: 2 additions & 2 deletions _locales/bn/messages.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"extName": {
"message": "অথেন্টিকেটর",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "অথেন্টিকেটর",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
Expand Down
12 changes: 6 additions & 6 deletions _locales/ca/messages.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"extName": {
"message": "Authenticator",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "Authenticator",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
"message": "Authenticator genera codis d'autenticació en dos passos al vostre navegador.",
"message": "OTPilot genera codis d'autenticació en dos passos al vostre navegador.",
"description": "Extension Description."
},
"added": {
Expand Down Expand Up @@ -120,10 +120,10 @@
"description": "Message that user is required to acknowledge before clearing all data."
},
"delete_all": {
"message": "Reinicialitza l'Authenticator"
"message": "Reinicialitza l'OTPilot"
},
"delete_all_warning": {
"message": "Això esborrarà totes les vostres dades i reiniciarà completament l'Authenticator. No podreu recuperar cap dada un cop esborrades! Considereu de fer una còpia de seguretat abans de reiniciar l'Authenticator."
"message": "Això esborrarà totes les vostres dades i reiniciarà completament l'OTPilot. No podreu recuperar cap dada un cop esborrades! Considereu de fer una còpia de seguretat abans de reiniciar l'OTPilot."
},
"security_warning": {
"message": "Aquesta contrasenya s'emprarà per xifrar els vostres comptes. Ningú us podrà ajudar si oblideu la contrasenya.",
Expand Down Expand Up @@ -489,7 +489,7 @@
"message": "Atorga accés només d'escriptura al porta-retalls per copiar codis al porta-retalls quan feu clic al compte."
},
"permission_context_menus": {
"message": "Afegeix Authenticator al menú contextual."
"message": "Afegeix OTPilot al menú contextual."
},
"permission_sync_clock": {
"message": "Permet la sincronització del rellotge amb Google."
Expand Down
8 changes: 4 additions & 4 deletions _locales/cs/messages.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"extName": {
"message": "Authenticator",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "Authenticator",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
"message": "Authenticator generuje kódy dvoufázového ověření ve Vašem prohlížeči.",
"message": "OTPilot generuje kódy dvoufázového ověření ve Vašem prohlížeči.",
"description": "Extension Description."
},
"added": {
Expand Down Expand Up @@ -489,7 +489,7 @@
"message": "Umožňuje přístup do schránky pouze pro zápis a kopírování kódů do schránky po kliknutí na účet."
},
"permission_context_menus": {
"message": "Přidá Authenticator do kontextové nabídky."
"message": "Přidá OTPilot do kontextové nabídky."
},
"permission_sync_clock": {
"message": "Umožnit synchronizaci hodin s Google."
Expand Down
10 changes: 5 additions & 5 deletions _locales/da/messages.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"extName": {
"message": "Autentificering",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "Autentificering",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
"message": "Authenticator genererer to-faktor autentificeringskoder i din browser.",
"message": "OTPilot genererer to-faktor autentificeringskoder i din browser.",
"description": "Extension Description."
},
"added": {
Expand Down Expand Up @@ -123,7 +123,7 @@
"message": "Nulstil Autentificering"
},
"delete_all_warning": {
"message": "Dette vil slette alle dine data og helt nulstille Authenticator. Du vil ikke være i stand til at gendanne slettede data! Du bør overveje at gemme en sikkerhedskopi, før du nulstiller Authenticator."
"message": "Dette vil slette alle dine data og helt nulstille OTPilot. Du vil ikke være i stand til at gendanne slettede data! Du bør overveje at gemme en sikkerhedskopi, før du nulstiller OTPilot."
},
"security_warning": {
"message": "Denne adgangskode bruges til at kryptere dine konti. Ingen kan hjælpe dig, hvis du glemmer adgangskoden.",
Expand Down Expand Up @@ -489,7 +489,7 @@
"message": "Giver skrivebeskyttet adgang til udklipsholderen for at kopiere koder til udklipsholderen, når du klikker på kontoen."
},
"permission_context_menus": {
"message": "Tilføjer Authenticator til kontekstmenuen."
"message": "Tilføjer OTPilot til kontekstmenuen."
},
"permission_sync_clock": {
"message": "Tillader ur-synkronisering med Google."
Expand Down
12 changes: 6 additions & 6 deletions _locales/de/messages.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"extName": {
"message": "Authentifizierung",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "Authenticator",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
"message": "Authenticator erzeugt Zwei-Faktor-Authentifizierungscodes in Ihrem Browser.",
"message": "OTPilot erzeugt Zwei-Faktor-Authentifizierungscodes in Ihrem Browser.",
"description": "Extension Description."
},
"added": {
Expand Down Expand Up @@ -120,10 +120,10 @@
"description": "Message that user is required to acknowledge before clearing all data."
},
"delete_all": {
"message": "Authenticator zurücksetzen"
"message": "OTPilot zurücksetzen"
},
"delete_all_warning": {
"message": "Dies wird alle Ihre Daten löschen und den Authenticator komplett zurücksetzen. Sie werden keine gelöschten Daten wiederherstellen können! Sie sollten erwägen, ein Backup zu speichern, bevor Sie den Authenticator zurücksetzen."
"message": "Dies wird alle Ihre Daten löschen und den OTPilot komplett zurücksetzen. Sie werden keine gelöschten Daten wiederherstellen können! Sie sollten erwägen, ein Backup zu speichern, bevor Sie den OTPilot zurücksetzen."
},
"security_warning": {
"message": "Dieses Passwort wird für die Verschlüsselung ihrer Konten/Accounts benutzt werden. Niemand kann ihnen helfen, wenn Sie dieses Passwort vergessen.",
Expand Down Expand Up @@ -489,7 +489,7 @@
"message": "Gewährt Schreibzugriff auf die Zwischenablage, um Codes in die Zwischenablage zu kopieren, wenn Sie auf das Konto klicken."
},
"permission_context_menus": {
"message": "Fügt Authenticator dem Kontextmenü hinzu."
"message": "Fügt OTPilot dem Kontextmenü hinzu."
},
"permission_sync_clock": {
"message": "Synchronisierung mit Google zulassen."
Expand Down
4 changes: 2 additions & 2 deletions _locales/el/messages.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"extName": {
"message": "Επαληθευτής",
"message": "OTPilot Authenticator",
"description": "Extension Name."
},
"extShortName": {
"message": "Επαληθευτής",
"message": "OTPilot",
"description": "Extension Short Name."
},
"extDesc": {
Expand Down
Loading