Merge branch 'master' into develop

vibrancy
antelle 2020-12-06 10:31:16 +01:00
commit f8fda777db
No known key found for this signature in database
GPG Key ID: 63C9777AAB7C563C
31 changed files with 196 additions and 215 deletions

View File

@ -2,6 +2,7 @@
const fs = require('fs-extra');
const path = require('path');
const { execSync } = require('child_process');
const debug = require('debug');
const webpackConfig = require('./build/webpack.config');
@ -24,7 +25,7 @@ module.exports = function (grunt) {
const dt = date.toISOString().replace(/T.*/, '');
const year = date.getFullYear();
const minElectronVersionForUpdate = '9.0.1';
const minElectronVersionForUpdate = '11.0.3';
const zipCommentPlaceholderPart = 'zip_comment_placeholder_that_will_be_replaced_with_hash';
const zipCommentPlaceholder =
zipCommentPlaceholderPart + '.'.repeat(512 - zipCommentPlaceholderPart.length);
@ -33,12 +34,12 @@ module.exports = function (grunt) {
const getCodeSignConfig = () =>
skipSign ? { identities: {} } : require('./keys/codesign.json');
const sha = execSync('git rev-parse --short HEAD').toString('utf8').trim();
const webpackOptions = {
date,
beta: !!grunt.option('beta'),
get sha() {
return grunt.config.get('gitinfo.local.branch.current.shortSHA');
}
sha
};
const windowsAppVersionString = {
@ -69,16 +70,6 @@ module.exports = function (grunt) {
grunt.initConfig({
noop: { noop: {} },
gitinfo: {
branch: {
current: {
SHA: 'Current HEAD SHA',
shortSHA: 'Current HEAD short SHA',
name: 'Current branch name',
lastCommitTime: 'Last commit time'
}
}
},
clean: {
dist: ['dist', 'tmp'],
desktop: ['tmp/desktop', 'dist/desktop']
@ -363,7 +354,7 @@ module.exports = function (grunt) {
asar: true,
appCopyright: `Copyright © ${year} Antelle`,
appVersion: pkg.version,
buildVersion: '<%= gitinfo.local.branch.current.shortSHA %>'
buildVersion: sha
},
linux: {
options: {
@ -500,9 +491,7 @@ module.exports = function (grunt) {
options: {
vars: {
version: pkg.version,
rev() {
return grunt.config.get('gitinfo.local.branch.current.shortSHA');
},
rev: sha,
homepage: pkg.homepage
}
},
@ -566,9 +555,7 @@ module.exports = function (grunt) {
description: pkg.description,
author: pkg.author,
homepage: pkg.homepage,
rev() {
return grunt.config.get('gitinfo.local.branch.current.shortSHA');
}
rev: sha
}
},
'linux-x64': {

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019 Antelle
Copyright (c) 2020 Antelle https://antelle.net
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -38,7 +38,7 @@ const Alerts = {
Alerts.alertDisplayed = true;
const view = new ModalView(config);
view.render();
view.on('result', (res, check) => {
view.once('result', (res, check) => {
if (res && config.success) {
config.success(res, check);
}

View File

@ -9,7 +9,7 @@ const DefaultAppSettings = {
clipboardSeconds: 0, // number of seconds after which the clipboard will be cleared
autoSave: true, // auto-save open files
autoSaveInterval: 0, // interval between performing automatic sync, minutes
rememberKeyFiles: false, // remember keyfiles selected on the Open screen
rememberKeyFiles: 'path', // remember keyfiles selected on the Open screen
idleMinutes: 15, // app lock timeout after inactivity, minutes
minimizeOnClose: false, // minimise the app instead of closing
tableView: false, // view entries as a table instead of list

View File

@ -333,6 +333,8 @@
"appSaveError": "Save Error",
"appSaveErrorBody": "Failed to auto-save file",
"appSaveErrorBodyMul": "Failed to auto-save files:",
"appSaveErrorExitLoseChanges": "Quit and lose all changes",
"appSaveErrorExitLoseChangesBody": "You can either quit the app and lose all changes, or go file settings to export data",
"appSettingsError": "Error loading app",
"appSettingsErrorBody": "There was an error loading app settings. Please double check the app URL or contact your administrator.",
"appNotSupportedError": "Your browser doesn't support some important features we're using.",

View File

@ -1,50 +1,4 @@
{
"months": [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
],
"monthsShort": [
"Jan",
"Feb",
"Mär",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dez"
],
"weekdays": [
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag"
],
"weekdaysShort": [
"So",
"Mo",
"Di",
"Mi",
"Do",
"Fr",
"Sa"
],
"retToApp": "zurück zur App",
"name": "Name",
"icon": "Icon",
@ -399,12 +353,10 @@
"setGenTheme": "Theme",
"setGenThemeFb": "Mattblau",
"setGenThemeDb": "Dunkelbraun",
"setGenThemeWh": "Weiß",
"setGenThemeTe": "Terminal",
"setGenThemeHc": "Hoher Kontrast",
"setGenThemeSd": "Solarisiert dunkel",
"setGenThemeSl": "Solarisiert hell",
"setGenThemeMacDark": "macOS Dunkel",
"setGenLocale": "Sprache",
"setGenLocOther": "Andere Sprachen sind als Plugins verfügbar.",
"setGenFontSize": "Schriftgröße",

View File

@ -1,50 +1,6 @@
{
"months": [
"Janvier",
"Février",
"Mars",
"Avril",
"Mai",
"Juin",
"Juillet",
"Août",
"Septembre",
"Octobre",
"Novembre",
"Décembre"
],
"monthsShort": [
"Janv",
"Févr",
"Mars",
"Avr",
"Mai",
"Juin",
"Juil",
"Août",
"Sept",
"Oct",
"Nov",
"Déc"
],
"weekdays": [
"Dimanche",
"Lundi",
"Mardi",
"Mercredi",
"Jeudi",
"Vendredi",
"Samedi"
],
"weekdaysShort": [
"Dim",
"Lun",
"Mar",
"Mer",
"Jeu",
"Ven",
"Sam"
],
"appSaveErrorExitLoseChanges": "Afsluiten en alle aanpassingen kwijtraken",
"appSaveErrorExitLoseChangesBody": "Je kunt de app afsluiten en alle wijzigingen kwijtraken, of je kunt de bestandsinstellingen gebruiken om gegevens te exporteren",
"retToApp": "retour vers l'appli",
"name": "nom",
"icon": "icône",
@ -322,7 +278,7 @@
"detOtpQrError": "Erreur lecture du QR code",
"detOtpQrErrorBody": "Désolé, le QR code n'a pas pu être lu, essayez à nouveau ou contacter les auteurs de l'application avec le détail de l'erreur.",
"detOtpQrWrong": "QR code incorrect",
"detOtpQrWrongBody": "Votre QR code a été scanné avec succès mais il ne contient pas d'information pour un mot de passe à usage unique.",
"detOtpQrWrongBody": "Votre code QR code a été scanné avec succès mais il ne contient pas d'information pour un code à usage unique.",
"detOtpField": "Code à usage unique",
"detOtpClickToTouch": "Cliquer pour générer",
"detOtpGenerating": "Création...",
@ -401,13 +357,11 @@
"setGenThemeLight": "Clair",
"setGenThemeFb": "Bleu plat",
"setGenThemeDb": "Marron foncé",
"setGenThemeWh": "Blanc",
"setGenThemeTe": "Terminal",
"setGenThemeHc": "Contraste élevé",
"setGenThemeSd": "Solarized dark",
"setGenThemeSl": "Solarized light",
"setGenMoreThemes": "Plus de thèmes",
"setGenThemeMacDark": "Mode sombre de macOS",
"setGenLocale": "Langue",
"setGenLocOther": "d'autres langues sont disponibles en tant que modules",
"setGenFontSize": "Taille de police",
@ -515,10 +469,10 @@
"setFileUseKeyFile": "Utiliser un fichier clé",
"setFileUseGenKeyFile": "Utiliser le fichier clé généré",
"setFileUseOldKeyFile": "Utiliser l'ancien fichier clé",
"setFileGenKeyFile": "Générer nouveau fichier clé",
"setFileGenKeyFile": "Générer un nouveau fichier clé",
"setFileDontUseKeyFile": "Ne pas utiliser de fichier clé",
"setFileEmptyPass": "Mot de passe vide",
"setFileEmptyPassBody": "Sauvegarder la base de données avec un mode de passe vide la laisse sans aucune protection. Voulez-vous vraiment faire cela ?",
"setFileEmptyPassBody": "Sauvegarder la base de données avec un mot de passe vide la laisse sans aucune protection. Voulez-vous vraiment faire cela ?",
"setFileSaveError": "Erreur sauvegarde",
"setFileSaveErrorBody": "Erreur sauvegarde dans le fichier",
"setFileAlreadyExists": "Existe déjà",

View File

@ -189,8 +189,10 @@ class FileModel extends Model {
if (uuid) {
uuid = kdbxweb.ByteUtils.bytesToBase64(uuid);
switch (uuid) {
case kdbxweb.Consts.KdfId.Argon2:
return 'Argon2';
case kdbxweb.Consts.KdfId.Argon2d:
return 'Argon2d';
case kdbxweb.Consts.KdfId.Argon2id:
return 'Argon2id';
case kdbxweb.Consts.KdfId.Aes:
return 'Aes';
}
@ -212,7 +214,8 @@ class FileModel extends Model {
}
uuid = kdbxweb.ByteUtils.bytesToBase64(uuid);
switch (uuid) {
case kdbxweb.Consts.KdfId.Argon2:
case kdbxweb.Consts.KdfId.Argon2d:
case kdbxweb.Consts.KdfId.Argon2id:
return {
parallelism: kdfParameters.get('P').valueOf(),
iterations: kdfParameters.get('I').valueOf(),
@ -698,8 +701,11 @@ class FileModel extends Model {
case 'Aes':
this.db.setKdf(kdbxweb.Consts.KdfId.Aes);
break;
case 'Argon2':
this.db.setKdf(kdbxweb.Consts.KdfId.Argon2);
case 'Argon2d':
this.db.setKdf(kdbxweb.Consts.KdfId.Argon2d);
break;
case 'Argon2id':
this.db.setKdf(kdbxweb.Consts.KdfId.Argon2id);
break;
default:
throw new Error('Bad KDF name');

View File

@ -445,7 +445,7 @@ class Plugin extends Model {
removeTheme(theme) {
delete SettingsManager.allThemes[theme.name];
if (AppSettingsModel.theme === theme.name) {
AppSettingsModel.theme = 'fb';
AppSettingsModel.theme = SettingsManager.getDefaultTheme();
}
delete BaseLocale[this.getThemeLocaleKey(theme.name)];
}

View File

@ -382,11 +382,14 @@ class AppView extends View {
if (Launcher) {
if (!this.exitAlertShown) {
if (this.model.settings.autoSave) {
this.saveAndLock((result) => {
if (result) {
exit();
}
});
this.saveAndLock(
(result) => {
if (result) {
exit();
}
},
{ appClosing: true }
);
return Launcher.preventExit(e);
}
this.exitAlertShown = true;
@ -400,11 +403,14 @@ class AppView extends View {
],
success: (result) => {
if (result === 'save') {
this.saveAndLock((result) => {
if (result) {
exit();
}
});
this.saveAndLock(
(result) => {
if (result) {
exit();
}
},
{ appClosing: true }
);
} else {
exit();
}
@ -531,7 +537,7 @@ class AppView extends View {
}
}
saveAndLock(complete) {
saveAndLock(complete, options) {
let pendingCallbacks = 0;
const errorFiles = [];
this.model.files.forEach(function (file) {
@ -551,17 +557,37 @@ class AppView extends View {
if (--pendingCallbacks === 0) {
if (errorFiles.length && this.model.files.hasDirtyFiles()) {
if (!Alerts.alertDisplayed) {
const alertBody =
const buttons = [Alerts.buttons.ok];
const errorStr =
errorFiles.length > 1
? Locale.appSaveErrorBodyMul
: Locale.appSaveErrorBody;
let body = errorStr + ' ' + errorFiles.join(', ') + '.';
if (options?.appClosing) {
buttons.unshift({
result: 'ignore',
title: Locale.appSaveErrorExitLoseChanges,
error: true
});
body += '\n' + Locale.appSaveErrorExitLoseChangesBody;
}
Alerts.error({
header: Locale.appSaveError,
body: alertBody + ' ' + errorFiles.join(', ')
body,
buttons,
complete: (res) => {
if (res === 'ignore') {
this.model.closeAllFiles();
complete(true);
} else {
complete(false);
}
}
});
}
if (complete) {
complete(false);
} else {
if (complete) {
complete(false);
}
}
} else {
this.closeAllFilesAndShowFirst();

View File

@ -55,8 +55,8 @@ class ModalView extends View {
this.closeWithResult(result);
}
bodyClick() {
if (typeof this.model.click === 'string') {
bodyClick(e) {
if (typeof this.model.click === 'string' && !e.target.matches('button')) {
this.closeWithResult(this.model.click);
}
}

View File

@ -42,8 +42,10 @@
text-overflow: ellipsis;
border-radius: var(--input-border-radius);
border: 1px solid transparent;
height: 1.4em;
line-height: 1.4em;
// why px and not em? it's like this to prevent jumping in different browsers
// when switching from a div to an input and vice versa
height: 42px;
line-height: 40px;
white-space: nowrap;
&:hover {
transition: border-color $base-duration $base-timing;
@ -54,8 +56,9 @@
}
}
input.details__header-title-input {
height: calc(1.4em + 6px);
line-height: 1.4em;
// see the comment about px above
height: 48px;
line-height: 40px;
user-select: text;
flex: 1;
margin: 0 6px;

View File

@ -150,7 +150,9 @@
}
&:not(.list__item--table) {
border-radius: var(--block-border-radius);
@include nomobile {
border-radius: var(--block-border-radius);
}
margin: 0 $small-spacing;
}

View File

@ -17,6 +17,9 @@
.fa {
@include fa-icon;
&.bottom {
vertical-align: bottom;
}
}
$fa-glyph-counter: 61440; // 0xf000
@ -95,6 +98,7 @@ $fa-var-info-circle: next-fa-glyph();
$fa-var-key: next-fa-glyph();
$fa-var-globe: next-fa-glyph();
$fa-var-exclamation-triangle: next-fa-glyph();
$fa-var-exclamation-circle: next-fa-glyph();
$fa-var-thumbtack: next-fa-glyph();
$fa-var-comments: next-fa-glyph();
$fa-var-edit: next-fa-glyph();

View File

@ -14,3 +14,12 @@ $themes: map-merge(
)
)
);
body.th-db {
.list__item--active .blue-color {
color: #0051d2;
}
.list__item--active .green-color {
color: #77d644;
}
}

View File

@ -19,8 +19,12 @@ body.th-dark {
--form-box-border-color-focus: #407091;
--form-box-shadow-color-focus: #3a698b;
--form-box-shadow-color-hover: rgba(58, 105, 139, 0.8);
--light-border-color: rgb(68, 68, 69, 0.7);
--light-border-color: rgba(68, 68, 69, 0.7);
--secondary-background-color: #2d2d2e;
--selected-item-color: #2463c8;
--selected-on-secondary-item-color: #403f40;
.list__item--active .blue-color {
color: #689ff7;
}
}

View File

@ -14,3 +14,9 @@ $themes: map-merge(
)
)
);
body.th-fb {
.list__item--active .blue-color {
color: #98bfff;
}
}

View File

@ -24,4 +24,22 @@ $themes: map-merge(
body.th-hc {
--selected-item-color: #1e5db8;
--selected-item-text-color: #fafafa;
.list__item--active .red-color {
color: #ff6d6b;
}
.list__item--active .orange-color {
color: #ffbb86;
}
.list__item--active .yellow-color {
}
.list__item--active .green-color {
color: #baff92;
}
.list__item--active .blue-color {
color: #c1d9ff;
}
.list__item--active .violet-color {
color: #ff93c5;
}
}

View File

@ -29,4 +29,8 @@ body.th-light {
--selected-on-secondary-item-color: #d6d6d6;
--selected-item-text-color: #f6f6f6;
--open-icon-color: var(--muted-color);
.list__item--active .blue-color {
color: #7baeff;
}
}

View File

@ -22,4 +22,8 @@ $themes: map-merge(
body.th-sd {
--selected-item-text-color: #002b36;
.list__item--active .blue-color {
color: #0249bd;
}
}

View File

@ -18,4 +18,11 @@ $themes: map-merge(
body.th-sl {
--selected-item-text-color: #fdf6e3;
.list__item--active .orange-color {
color: #ff9846;
}
.list__item--active .green-color {
color: #63d823;
}
}

View File

@ -14,3 +14,12 @@ $themes: map-merge(
)
)
);
body.th-te {
.list__item--active .green-color {
color: #7be045;
}
.list__item--active .blue-color {
color: #0750c5;
}
}

View File

@ -2,72 +2,72 @@
<h1><i class="fa fa-info settings__head-icon"></i> {{res 'setAboutTitle'}} KeeWeb v{{version}}</h1>
<p>{{#res 'setAboutFirst'}}<a href="https://antelle.net" target="_blank">Antelle</a>{{/res~}}&nbsp;
{{~#res 'setAboutSecond'}}<a href="{{licenseLink}}" target="_blank">MIT</a>{{/res}}
{{#res 'setAboutSource'}}<a href="{{repoLink}}" target="_blank">GitHub <i class="fa fa-github-alt"></i></a>{{/res}}</p>
{{#res 'setAboutSource'}}<a href="{{repoLink}}" target="_blank">GitHub <i class="fa fa-github-alt bottom"></i></a>{{/res}}</p>
<a href="{{donationLink}}" target="_blank" class="settings__donate-btn no-border">
<span class="settings__donate-btn-top">Become a</span><span class="settings__donate-btn-bottom">Backer</span>
</a>
<p>{{res 'setAboutBuilt'}}:</p>
<h3>Libraries</h3>
<ul>
{{#if isDesktop}}<li><a href="https://electron.atom.io/" target="_blank">electron</a><span class="muted-color">, cross-platform desktop apps framework</span></li>{{/if}}
<li><a href="https://handlebarsjs.com/" target="_blank">handlebars</a><span class="muted-color">, semantic templates</span></li>
<li><a href="https://github.com/patrick-steele-idem/morphdom" target="_blank">morphdom</a><span class="muted-color">, fast and lightweight DOM diffing/patching</span></li>
<li><a href="https://lodash.com/" target="_blank">lodash</a><span class="muted-color">, a modern JavaScript utility library delivering modularity, performance & extras</span></li>
<li><a href="https://jquery.com/" target="_blank">jQuery</a><span class="muted-color">, fast, small, and feature-rich JavaScript library</span></li>
<li><a href="https://marked.js.org/" target="_blank">marked</a><span class="muted-color">, a markdown parser and compiler</span></li>
<li><a href="https://github.com/cure53/DOMPurify" target="_blank">dompurify</a><span class="muted-color">, a DOM-only, super-fast, uber-tolerant XSS sanitizer, </span>
{{#if isDesktop}}<li><a href="https://electron.atom.io/" target="_blank">electron</a><span class="muted-color">, cross-platform desktop apps framework, &copy; 2013-2020 GitHub Inc.</span></li>{{/if}}
<li><a href="https://handlebarsjs.com/" target="_blank">handlebars</a><span class="muted-color">, minimal templating on steroids, &copy; 2011-2019 by Yehuda Katz</span></li>
<li><a href="https://github.com/patrick-steele-idem/morphdom" target="_blank">morphdom</a><span class="muted-color">, fast and lightweight DOM diffing/patching, &copy; Patrick Steele-Idem &lt;pnidem@gmail.com&gt; (psteeleidem.com)</span></li>
<li><a href="https://lodash.com/" target="_blank">lodash</a><span class="muted-color">, a modern JavaScript utility library delivering modularity, performance & extras, &copy; OpenJS Foundation and other contributors &lt;https://openjsf.org/&gt;</span></li>
<li><a href="https://jquery.com/" target="_blank">jQuery</a><span class="muted-color">, fast, small, and feature-rich JavaScript library, &copy; OpenJS Foundation and other contributors, https://openjsf.org/</span></li>
<li><a href="https://marked.js.org/" target="_blank">marked</a><span class="muted-color">, a markdown parser and compiler, &copy; 2018+, MarkedJS (https://github.com/markedjs/) &copy; 2011-2018, Christopher Jeffrey (https://github.com/chjj/)</span></li>
<li><a href="https://github.com/cure53/DOMPurify" target="_blank">dompurify</a><span class="muted-color">, a DOM-only, super-fast, uber-tolerant XSS sanitizer, &copy; 2015 Mario Heiderich, </span>
<a href="{{licenseLinkApache}}" class="muted-color" target="_blank">Apache-2.0 license</a></li>
<li><a href="https://github.com/TomFrost/node-phonetic" target="_blank">node-phonetic</a><span class="muted-color">, generates unique, pronounceable names</span></li>
<li><a href="https://github.com/TomFrost/node-phonetic" target="_blank">node-phonetic</a><span class="muted-color">, generates unique, pronounceable names, &copy; 2013 Tom Frost</span></li>
</ul>
<h3>Core components</h3>
<ul>
<li><a href="https://github.com/keeweb/kdbxweb" target="_blank">kdbxweb</a><span class="muted-color">, web kdbx library</span></li>
<li><a href="https://nodeca.github.io/pako/" target="_blank">pako</a><span class="muted-color">, zlib port to JavaScript, very fast</span></li>
<li><a href="https://github.com/inexorabletash/text-encoding" target="_blank">text-encoding</a><span class="muted-color">, polyfill for the Encoding Living Standard's API</span></li>
<li><a href="https://github.com/keeweb/kdbxweb" target="_blank">kdbxweb</a><span class="muted-color">, web kdbx library, &copy; 2016 Antelle</span></li>
<li><a href="https://nodeca.github.io/pako/" target="_blank">pako</a><span class="muted-color">, high speed zlib port to javascript, &copy; 2014-2017 by Vitaly Puzrin and Andrei Tuputcyn</span></li>
<li><a href="https://github.com/inexorabletash/text-encoding" target="_blank">text-encoding</a><span class="muted-color">, polyfill for the Encoding Living Standard's API, public domain</span></li>
<li><a href="https://github.com/jindw/xmldom" target="_blank">xmldom</a><span class="muted-color">, a pure JS W3C Standard based DOMParser and XMLSerializer</span></li>
</ul>
<h3>UI components</h3>
<ul>
<li><a href="https://github.com/Diokuz/baron" target="_blank">baron</a><span class="muted-color">, native scroll with custom scrollbar</span></li>
<li><a href="https://github.com/Pikaday/Pikaday" target="_blank">pikaday</a><span class="muted-color">, a refreshing JavaScript datepicker</span></li>
<li><a href="https://github.com/Diokuz/baron" target="_blank">baron</a><span class="muted-color">, native scroll with custom scrollbar, &copy; 2018 Kuznetsov Dmitriy</span></li>
<li><a href="https://github.com/Pikaday/Pikaday" target="_blank">pikaday</a><span class="muted-color">, a refreshing JavaScript datepicker, &copy; 2014 David Bushell</span></li>
</ul>
{{#if isDesktop}}
<h3>Desktop modules</h3>
<ul>
<li><a href="https://github.com/antelle/node-stream-zip" target="_blank">node-stream-zip</a><span class="muted-color">, node.js library for fast reading of large ZIPs</span></li>
<li><a href="https://github.com/ranisalt/node-argon2" target="_blank">node-argon2</a><span class="muted-color">, node.js bindings for Argon2 hashing algorithm</span></li>
<li><a href="https://github.com/tessel/node-usb" target="_blank">node-usb</a><span class="muted-color">, improved USB library for Node.js</span></li>
<li><a href="https://github.com/atom/node-keytar" target="_blank">node-keytar</a><span class="muted-color">, node module to manage system keychain</span></li>
<li><a href="https://github.com/antelle/node-yubikey-chalresp" target="_blank">node-yubikey-chalresp</a><span class="muted-color">, YubiKey challenge-response API for node.js</span></li>
<li><a href="https://github.com/antelle/node-stream-zip" target="_blank">node-stream-zip</a><span class="muted-color">, node.js library for fast reading of large ZIPs, &copy; 2015 Antelle https://github.com/antelle</span></li>
<li><a href="https://github.com/ranisalt/node-argon2" target="_blank">node-argon2</a><span class="muted-color">, node.js bindings for Argon2 hashing algorithm, copy; 2015 Ranieri Althoff</span></li>
<li><a href="https://github.com/tessel/node-usb" target="_blank">node-usb</a><span class="muted-color">, improved USB library for Node.js, &copy; 2012 Nonolith Labs, LLC</span></li>
<li><a href="https://github.com/atom/node-keytar" target="_blank">node-keytar</a><span class="muted-color">, native password node module, &copy; 2013 GitHub Inc.</span></li>
<li><a href="https://github.com/antelle/node-yubikey-chalresp" target="_blank">node-yubikey-chalresp</a><span class="muted-color">, YubiKey challenge-response API for node.js, &copy; 2020 Antelle</span></li>
</ul>
{{/if}}
<h3>Utils</h3>
<ul>
<li><a href="https://github.com/LazarSoft/jsqrcode" target="_blank">jsqrcode</a><span class="muted-color">, QR code scanner,
<li><a href="https://github.com/LazarSoft/jsqrcode" target="_blank">jsqrcode</a><span class="muted-color">, javascript QR code scanner,
<a href="{{licenseLinkApache}}" class="muted-color" target="_blank">Apache-2.0 license</a></span></li>
</ul>
<h3>Styles</h3>
<ul>
<li><a href="https://sass-lang.com/" target="_blank">sass</a><span class="muted-color">, syntactically awesome stylesheets</span></li>
<li><a href="https://bourbon.io/" target="_blank">bourbon</a><span class="muted-color">, a lightweight Sass tool set</span></li>
<li><a href="https://github.com/thoughtbot/bitters" target="_blank">bitters</a><span class="muted-color">, styles, variables and structure for
Bourbon projects</span></li>
<li><a href="https://necolas.github.io/normalize.css/" target="_blank">normalize.css</a><span class="muted-color">, a modern, HTML5-ready alternative
to CSS resets</span></li>
<li><a href="https://sass-lang.com/" target="_blank">sass</a><span class="muted-color">, syntactically awesome stylesheets, &copy; 2012-2016 by the Sass Open Source Foundation</span></li>
<li><a href="https://bourbon.io/" target="_blank">bourbon</a><span class="muted-color">, a lightweight Sass tool set, &copy; 2011-2020 thoughtbot, inc. &lt;http://thoughtbot.com/&gt;</span></li>
<li><a href="https://github.com/thoughtbot/bitters" target="_blank">bitters</a><span class="muted-color">, a dash of pre-defined style to your Bourbon, &copy; 20132019 thoughtbot, inc. &lt;http://thoughtbot.com/&gt;</span></li>
<li><a href="https://necolas.github.io/normalize.css/" target="_blank">normalize.css</a><span class="muted-color">, a modern, HTML5-ready alternative to CSS resets, &copy; Nicolas Gallagher and Jonathan Neal</span></li>
</ul>
<h3>Graphics</h3>
<ul>
<li><a href="https://fontawesome.com/" target="_blank">fontawesome</a><span class="muted-color">, the iconic SVG, font, and CSS toolkit, </span>
<a href="{{licenseLinkApache}}" class="muted-color" target="_blank">CC BY 4.0 License</a> <span class="muted-color">(icons only)</span></li>
<a href="{{licenseLinkCCBY40}}" class="muted-color" target="_blank">CC BY 4.0 License</a> <span class="muted-color">(icons only)</span></li>
</ul>
<h2>{{res 'setAboutLic'}}</h2>
<p>{{res 'setAboutLicComment'}}:</p>
<p></p>
<p>Copyright &copy; 2020 Antelle https://antelle.net</p>
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,

View File

@ -165,7 +165,8 @@
<label for="settings__file-kdf">{{res 'setFileKdfParams'}}</label>
<select class="settings__select input-base" id="settings__file-kdf" {{#ifneq formatVersion 4}}disabled{{/ifneq}}>
<option value="Aes" {{#ifeq kdfName 'AES'}}selected{{/ifeq}}>AES</option>
{{#ifeq formatVersion 4}}<option value="Argon2" {{#ifeq kdfName 'Argon2'}}selected{{/ifeq}}>Argon2</option>{{/ifeq}}
{{#ifeq formatVersion 4}}<option value="Argon2d" {{#ifeq kdfName 'Argon2d'}}selected{{/ifeq}}>Argon2d</option>{{/ifeq}}
{{#ifeq formatVersion 4}}<option value="Argon2id" {{#ifeq kdfName 'Argon2id'}}selected{{/ifeq}}>Argon2id</option>{{/ifeq}}
</select>
{{#if keyEncryptionRounds}}
<label for="settings__file-key-rounds">{{res 'setFileRounds'}}:</label>

View File

@ -1,6 +1,6 @@
{
"name": "KeeWeb",
"version": "1.16.0",
"version": "1.16.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "KeeWeb",
"version": "1.16.0",
"version": "1.16.1",
"description": "Free cross-platform password manager compatible with KeePass",
"main": "main.js",
"homepage": "https://keeweb.info",

View File

@ -21,7 +21,6 @@ module.exports = function(grunt) {
]);
grunt.registerTask('desktop-linux', 'Build desktop apps on linux', [
'gitinfo',
'clean:desktop',
'build-desktop-app-content',
'build-desktop-executables-linux',
@ -31,7 +30,6 @@ module.exports = function(grunt) {
]);
grunt.registerTask('desktop-darwin', 'Build desktop apps on macos', [
'gitinfo',
'clean:desktop',
'build-desktop-app-content',
'build-desktop-executables-darwin',
@ -39,7 +37,6 @@ module.exports = function(grunt) {
]);
grunt.registerTask('desktop-win32', 'Build desktop apps on windows', [
'gitinfo',
'clean:desktop',
'build-desktop-app-content',
'build-desktop-executables-win32',

View File

@ -2,7 +2,6 @@ module.exports = function (grunt) {
const sign = !grunt.option('skip-sign');
grunt.registerTask('build-web-app', [
'gitinfo',
'clean',
'eslint',
'copy:html',
@ -124,7 +123,6 @@ module.exports = function (grunt) {
]);
grunt.registerTask('build-desktop', [
'gitinfo',
'clean:desktop',
'build-desktop-app-content',
'build-desktop-executables',

27
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "keeweb",
"version": "1.16.0",
"version": "1.16.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -8213,25 +8213,6 @@
}
}
},
"grunt-gitinfo": {
"version": "github:keeweb/grunt-gitinfo#b61aaeda40cac9c8b0d18fa88f660c0dbacfffa3",
"from": "github:keeweb/grunt-gitinfo#b61aaed",
"requires": {
"async": "~2.6.1",
"getobject": "~0.1.0",
"lodash": "~4.17.11"
},
"dependencies": {
"async": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"requires": {
"lodash": "^4.17.14"
}
}
}
},
"grunt-inline-alt": {
"version": "github:keeweb/grunt-inline-alt#ec9f6ad885b958d4f766ddda5d7eeacec491d159",
"from": "github:keeweb/grunt-inline-alt#ec9f6ad",
@ -9802,9 +9783,9 @@
}
},
"kdbxweb": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/kdbxweb/-/kdbxweb-1.10.0.tgz",
"integrity": "sha512-wreNdagE2L1x2LWGWEZiHAVgqVzmGHkMmKENGIZb+gQ53HRTl8bgTJ/jddUiCuBaWA7KJHd8xcdxpk4djzwRFw==",
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/kdbxweb/-/kdbxweb-1.11.0.tgz",
"integrity": "sha512-8jhyAU+X8Kk9zsQobwMwx6wFI6XJyMrWuPWq+PcWaYwBW3l9ruN91FbRWbLSQvKku3IRLgpMgCIqiWBS/tQjCQ==",
"requires": {
"pako": "github:keeweb/pako#653c0b00d8941c89d09ed4546d2179001ec44efc",
"text-encoding": "github:keeweb/text-encoding#4dfb7cb0954c222852092f8b06ae4f6b4f60bfbb",

View File

@ -1,6 +1,6 @@
{
"name": "keeweb",
"version": "1.16.0",
"version": "1.16.1",
"description": "Free cross-platform password manager compatible with KeePass",
"main": "Gruntfile.js",
"private": true,
@ -56,7 +56,6 @@
"grunt-contrib-watch": "1.1.0",
"grunt-electron": "12.0.0",
"grunt-eslint": "23.0.0",
"grunt-gitinfo": "github:keeweb/grunt-gitinfo#b61aaed",
"grunt-inline-alt": "github:keeweb/grunt-inline-alt#ec9f6ad",
"grunt-string-replace": "1.3.1",
"grunt-webpack": "4.0.2",
@ -67,7 +66,7 @@
"jquery": "3.5.1",
"json-loader": "^0.5.7",
"jsqrcode": "github:antelle/jsqrcode#0.1.3",
"kdbxweb": "1.10.0",
"kdbxweb": "^1.11.0",
"load-grunt-tasks": "5.1.0",
"lodash": "^4.17.20",
"marked": "^1.2.5",

View File

@ -1,5 +1,13 @@
Release notes
-------------
##### v1.16.1 (2020-12-04)
`+` native Apple Silicon build
`+` Argon2id KDF support
`+` added an options to quit the app and lose all changes
`-` fix #1637: git commit in the About box
`-` fixed some design glitches
`*` keyfile paths are saved by default
##### v1.16.0 (2020-11-29)
`+` updated icons and visual design
`+` new Dark (default) and Light themes