diff --git a/Gruntfile.js b/Gruntfile.js index c8d427de..e84b09f4 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,13 +1,16 @@ /* eslint-env node */ -const fs = require('fs'); +const fs = require('fs-extra'); const path = require('path'); +const debug = require('debug'); const webpackConfig = require('./build/webpack.config'); const pkg = require('./package.json'); const hookRcedit = require('./build/util/hook-rcedit'); +const codeSignConfig = require('../keys/codesign'); hookRcedit.setup(); +debug.enable('electron-notarize'); module.exports = function(grunt) { require('time-grunt')(grunt); @@ -125,21 +128,6 @@ module.exports = function(grunt) { dest: 'tmp/desktop/KeeWeb-win32-x64/Resources/', nonull: true }, - 'desktop-darwin-helper-x64': { - src: 'helper/darwin/KeeWebHelper', - dest: 'tmp/desktop/KeeWeb-darwin-x64/KeeWeb.app/Contents/Resources/', - nonull: true, - options: { mode: '0755' } - }, - 'desktop-darwin-installer': { - cwd: 'package/osx/KeeWeb Installer.app', - dest: - 'tmp/desktop/KeeWeb-darwin-x64/KeeWeb.app/Contents/Installer/KeeWeb Installer.app', - src: '**', - expand: true, - nonull: true, - options: { mode: true } - }, 'desktop-win32-dist-x64': { src: 'tmp/desktop/KeeWeb.win.x64.exe', dest: `dist/desktop/KeeWeb-${pkg.version}.win.x64.exe`, @@ -276,7 +264,55 @@ module.exports = function(grunt) { icon: 'graphics/icon.icns', appBundleId: 'net.antelle.keeweb', appCategoryType: 'public.app-category.productivity', - extendInfo: 'package/osx/extend.plist' + extendInfo: 'package/osx/extend.plist', + osxSign: { + identity: codeSignConfig.identities.app, + hardenedRuntime: true, + entitlements: 'package/osx/entitlements.mac.plist', + 'entitlements-inherit': 'package/osx/entitlements.mac.plist', + 'gatekeeper-assess': false + }, + osxNotarize: { + appleId: codeSignConfig.appleId, + appleIdPassword: '@keychain:AC_PASSWORD', + ascProvider: codeSignConfig.teamId + }, + afterCopy: [ + (buildPath, electronVersion, platform, arch, callback) => { + if (path.basename(buildPath) !== 'app') { + throw new Error('Bad build path: ' + buildPath); + } + const resPath = path.dirname(buildPath); + if (path.basename(resPath) !== 'Resources') { + throw new Error('Bad Resources path: ' + resPath); + } + const helperTargetPath = path.join( + resPath, + 'helper/darwin/KeeWebHelper' + ); + const helperSourcePath = path.join( + __dirname, + 'helper/darwin/KeeWebHelper' + ); + fs.copySync(helperSourcePath, helperTargetPath); + + const contentsPath = path.dirname(resPath); + if (path.basename(contentsPath) !== 'Contents') { + throw new Error('Bad Contents path: ' + contentsPath); + } + const installerSourcePath = path.join( + __dirname, + 'package/osx/KeeWeb Installer.app' + ); + const installerTargetPath = path.join( + contentsPath, + 'Installer/KeeWeb Installer.app' + ); + fs.copySync(installerSourcePath, installerTargetPath); + + callback(); + } + ] } }, win32: { @@ -296,13 +332,6 @@ module.exports = function(grunt) { } }, codesign: { - app: { - options: { - identity: 'app', - deep: true - }, - src: ['tmp/desktop/KeeWeb-darwin-x64/KeeWeb.app'] - }, dmg: { options: { identity: 'app' diff --git a/app/index.html b/app/index.html index 0dcb0c90..669a2cce 100644 --- a/app/index.html +++ b/app/index.html @@ -11,7 +11,6 @@ content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> - diff --git a/app/scripts/comp/browser/key-handler.js b/app/scripts/comp/browser/key-handler.js index 5a821a36..49098e26 100644 --- a/app/scripts/comp/browser/key-handler.js +++ b/app/scripts/comp/browser/key-handler.js @@ -63,7 +63,7 @@ class KeyHandler { const keyShortcuts = this.shortcuts[code]; if (keyShortcuts && keyShortcuts.length) { for (const sh of keyShortcuts) { - if (this.modal && (sh.modal !== this.modal || sh.modal === '*')) { + if (this.modal && (sh.modal !== this.modal && sh.modal !== '*')) { e.stopPropagation(); continue; } diff --git a/app/scripts/plugins/theme-vars.js b/app/scripts/plugins/theme-vars.js index b4db4f6b..d6c65a33 100644 --- a/app/scripts/plugins/theme-vars.js +++ b/app/scripts/plugins/theme-vars.js @@ -1,8 +1,7 @@ import { Color } from 'util/data/color'; -const ThemeVarsScss = require('raw-loader!../../styles/base/_theme-vars.scss').default; -// eslint-disable-next-line import/no-commonjs -const ThemeDefaults = require('../../styles/themes/_theme-defaults.scss'); +import ThemeVarsScss from '!!raw-loader!../../styles/base/_theme-vars.scss'; +import ThemeDefaults from '!!raw-loader!../../styles/themes/_theme-defaults.scss'; const ThemeVars = { themeDefaults: null, diff --git a/app/scripts/views/open-view.js b/app/scripts/views/open-view.js index 93caccb7..4cae560c 100644 --- a/app/scripts/views/open-view.js +++ b/app/scripts/views/open-view.js @@ -70,7 +70,10 @@ class OpenView extends View { KeyHandler.setModal('open'); this.once('remove', () => { this.passwordInput.reset(); - KeyHandler.setModal(null); + if (KeyHandler.modal !== 'auto-type') { + // TODO: refactor this + KeyHandler.setModal(null); + } }); } diff --git a/build/util/hook-rcedit.js b/build/util/hook-rcedit.js index 035ae44b..46f27779 100644 --- a/build/util/hook-rcedit.js +++ b/build/util/hook-rcedit.js @@ -4,7 +4,7 @@ const childProcess = require('child_process'); const childProcessSpawn = childProcess.spawn; -function hookedSpawn(command, options) { +function hookedSpawn(command, options, ...args) { if (command === 'wine') { options = options.map(option => { if (option.includes(' ')) { @@ -13,7 +13,7 @@ function hookedSpawn(command, options) { return option; }); } - return childProcessSpawn.call(childProcess, command, options); + return childProcessSpawn.call(childProcess, command, options, ...args); } module.exports.setup = function() { diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 1b8752b8..ddcdfcf5 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -1,6 +1,6 @@ { "name": "KeeWeb", - "version": "1.11.7", + "version": "1.11.8", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/desktop/package.json b/desktop/package.json index f840846b..a4546624 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "KeeWeb", - "version": "1.11.7", + "version": "1.11.8", "description": "Free cross-platform password manager compatible with KeePass", "main": "main.js", "homepage": "https://keeweb.info", diff --git a/grunt.tasks.js b/grunt.tasks.js index de569bdd..acccbe3e 100644 --- a/grunt.tasks.js +++ b/grunt.tasks.js @@ -36,12 +36,9 @@ module.exports = function(grunt) { 'electron', 'sign-exe:win32-build-x64', 'sign-exe:win32-build-ia32', - 'copy:desktop-darwin-helper-x64', - 'copy:desktop-darwin-installer', 'copy:desktop-windows-helper-ia32', 'copy:desktop-windows-helper-x64', - 'chmod:linux-desktop-x64', - 'codesign:app' + 'chmod:linux-desktop-x64' ]); grunt.registerTask('build-desktop-archives', [ diff --git a/package-lock.json b/package-lock.json index 26f30a23..9ee65c29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "keeweb", - "version": "1.11.7", + "version": "1.11.8", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3894,6 +3894,16 @@ "ms": "^2.1.1" } }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "sumchecker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", @@ -5298,11 +5308,11 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } @@ -5870,6 +5880,16 @@ "requires": { "ms": "^2.1.1" } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } } } }, diff --git a/package.json b/package.json index 7ab67a50..ed37d61c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "keeweb", - "version": "1.11.7", + "version": "1.11.8", "description": "Free cross-platform password manager compatible with KeePass", "main": "Gruntfile.js", "private": true, @@ -34,6 +34,7 @@ "eslint-plugin-standard": "4.0.1", "exports-loader": "0.7.0", "font-awesome": "4.7.0", + "fs-extra": "^8.1.0", "grunt": "1.0.4", "grunt-chmod": "^1.1.1", "grunt-contrib-clean": "2.0.0", diff --git a/package/docker/entrypoint.sh b/package/docker/entrypoint.sh index 95f0332a..1991cd94 100644 --- a/package/docker/entrypoint.sh +++ b/package/docker/entrypoint.sh @@ -31,6 +31,11 @@ then -days 3650 -nodes -sha256 fi +if [ ${KEEWEB_CONFIG_URL} ] +then + sed -i "s,(no-config),${KEEWEB_CONFIG_URL}," /keeweb/index.html +fi + # exec CMD echo ">> exec docker CMD" echo "$@" diff --git a/package/osx/entitlements.mac.plist b/package/osx/entitlements.mac.plist new file mode 100644 index 00000000..38c887b2 --- /dev/null +++ b/package/osx/entitlements.mac.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + + diff --git a/release-notes.md b/release-notes.md index 035845aa..a1b5b37a 100644 --- a/release-notes.md +++ b/release-notes.md @@ -9,6 +9,11 @@ Release notes `+` #480: option to launch the app minimized `-` fix #1273: untranslated menu items +##### v1.11.8 (2019-10-11) +`-` fix #1292: macOS app notarization +`-` fix #1296: search in auto-type +`-` fixed issues with some theme plugins + ##### v1.11.7 (2019-10-08) `-` fix #1289: crash on Auto sorting mode `-` fix #1288: issues when opening a file during in auto-type mode