mirror of https://github.com/keeweb/keeweb
native auto-type helper implementation
parent
674311cb4b
commit
00c0b3f88c
|
@ -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;
|
||||
|
|
|
@ -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 };
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue