native auto-type helper implementation

This commit is contained in:
antelle 2021-01-30 14:55:00 +01:00
parent 674311cb4b
commit 00c0b3f88c
No known key found for this signature in database
GPG Key ID: 63C9777AAB7C563C
7 changed files with 45 additions and 5 deletions

View File

@ -1,9 +1,15 @@
import { Launcher } from 'comp/launcher';
import { AppSettingsModel } from 'models/app-settings-model';
import { AutoTypeHelper } from 'auto-type/auto-type-helper';
const AutoTypeHelperFactory = {
create() {
if (Launcher && Launcher.autoTypeSupported) {
const { AutoTypeHelper } = require('./helper/auto-type-helper-' + Launcher.platform());
if (AppSettingsModel.useLegacyAutoType) {
const { AutoTypeHelper } = require('./helper/auto-type-helper-' +
Launcher.platform());
return new AutoTypeHelper();
}
return new AutoTypeHelper();
}
return null;

View File

@ -0,0 +1,16 @@
import { NativeModules } from 'comp/launcher/native-modules';
class AutoTypeHelper {
getActiveWindowInfo(callback) {
NativeModules.kbdGetActiveWindow({
getWindowTitle: true,
getBrowserUrl: true
})
.then((win) => {
callback(undefined, win);
})
.catch((err) => callback(err));
}
}
export { AutoTypeHelper };

View File

@ -15,7 +15,6 @@ const logger = new Logger('auto-type');
const clearTextAutoTypeLog = !!localStorage.debugAutoType;
const AutoType = {
helper: AutoTypeHelperFactory.create(),
enabled: !!(Launcher && Launcher.autoTypeSupported),
supportsEventsWithWindowId: !!(Launcher && Launcher.platform() === 'linux'),
selectEntryView: false,
@ -160,8 +159,10 @@ const AutoType = {
},
getActiveWindowInfo(callback) {
logger.debug('Getting window info');
return this.helper.getActiveWindowInfo((err, windowInfo) => {
const helperType = AppSettingsModel.useLegacyAutoType ? 'legacy' : 'native';
logger.debug(`Getting window info using ${helperType} helper`);
const helper = AutoTypeHelperFactory.create();
return helper.getActiveWindowInfo((err, windowInfo) => {
if (err) {
logger.error('Error getting window info', err);
} else {

View File

@ -41,7 +41,8 @@ const DefaultAppSettings = {
auditPasswordEntropy: true, // show warnings for weak passwords
excludePinsFromAudit: true, // exclude PIN codes from audit
checkPasswordsOnHIBP: false, // check passwords on Have I Been Pwned
auditPasswordAge: 0,
auditPasswordAge: 0, // show warnings about old passwords, number of years, 0 = disabled
useLegacyAutoType: false, // use legacy auto-type engine (will be removed in future versions)
yubiKeyShowIcon: true, // show an icon to open OTP codes from YubiKey
yubiKeyAutoOpen: false, // auto-load one-time codes when there are open files

View File

@ -448,6 +448,7 @@
"setGenShowAppLogs": "Show app logs",
"setGenReloadApp": "Reload the app",
"setGenFieldLabelDblClickAutoType": "Auto-type on double-clicking field labels",
"setGenUseLegacyAutoType": "Use legacy auto-type (if you have issues)",
"setGenAudit": "Audit",
"setGenAuditPasswords": "Show warnings about password strength",
"setGenAuditPasswordEntropy": "Check password length and randomness",

View File

@ -53,6 +53,7 @@ class SettingsGeneralView extends View {
'change .settings__general-direct-autotype': 'changeDirectAutotype',
'change .settings__general-field-label-dblclick-autotype':
'changeFieldLabelDblClickAutoType',
'change .settings__general-field-label-legacy-autotype': 'changeUseLegacyAutoType',
'change .settings__general-titlebar-style': 'changeTitlebarStyle',
'click .settings__general-update-btn': 'checkUpdate',
'click .settings__general-restart-btn': 'installUpdateAndRestart',
@ -129,6 +130,7 @@ class SettingsGeneralView extends View {
useGroupIconForEntries: AppSettingsModel.useGroupIconForEntries,
directAutotype: AppSettingsModel.directAutotype,
fieldLabelDblClickAutoType: AppSettingsModel.fieldLabelDblClickAutoType,
useLegacyAutoType: AppSettingsModel.useLegacyAutoType,
supportsTitleBarStyles: Launcher && Features.supportsTitleBarStyles(),
titlebarStyle: AppSettingsModel.titlebarStyle,
storageProviders,
@ -420,6 +422,12 @@ class SettingsGeneralView extends View {
Events.emit('refresh');
}
changeUseLegacyAutoType(e) {
const useLegacyAutoType = e.target.checked || false;
AppSettingsModel.useLegacyAutoType = useLegacyAutoType;
Events.emit('refresh');
}
installUpdateAndRestart() {
if (Launcher) {
Updater.installAndRestart();

View File

@ -286,6 +286,13 @@
<h2 id="advanced">{{res 'advanced'}}</h2>
<a class="settings__general-show-advanced">{{res 'setGenShowAdvanced'}}</a>
<div class="settings__general-advanced hide">
{{#if canAutoType}}
<div>
<input type="checkbox" class="settings__input input-base settings__general-field-label-legacy-autotype"
id="settings__general-field-label-use-legacy-autotype" {{#if useLegacyAutoType}}checked{{/if}} />
<label for="settings__general-field-label-use-legacy-autotype">{{res 'setGenUseLegacyAutoType'}}</label>
</div>
{{/if}}
{{#if devTools}}
<button class="btn-silent settings__general-dev-tools-link">{{res 'setGenDevTools'}}</button>
<button class="btn-silent settings__general-try-beta-link">{{res 'setGenTryBeta'}}</button>