mirror of https://github.com/keeweb/keeweb
Merge branch 'master' into develop
commit
f8fda777db
29
Gruntfile.js
29
Gruntfile.js
|
@ -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': {
|
||||
|
|
2
LICENSE
2
LICENSE
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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à",
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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)];
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -14,3 +14,12 @@ $themes: map-merge(
|
|||
)
|
||||
)
|
||||
);
|
||||
|
||||
body.th-db {
|
||||
.list__item--active .blue-color {
|
||||
color: #0051d2;
|
||||
}
|
||||
.list__item--active .green-color {
|
||||
color: #77d644;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,3 +14,9 @@ $themes: map-merge(
|
|||
)
|
||||
)
|
||||
);
|
||||
|
||||
body.th-fb {
|
||||
.list__item--active .blue-color {
|
||||
color: #98bfff;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,4 +22,8 @@ $themes: map-merge(
|
|||
|
||||
body.th-sd {
|
||||
--selected-item-text-color: #002b36;
|
||||
|
||||
.list__item--active .blue-color {
|
||||
color: #0249bd;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,3 +14,12 @@ $themes: map-merge(
|
|||
)
|
||||
)
|
||||
);
|
||||
|
||||
body.th-te {
|
||||
.list__item--active .green-color {
|
||||
color: #7be045;
|
||||
}
|
||||
.list__item--active .blue-color {
|
||||
color: #0750c5;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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~}}
|
||||
{{~#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, © 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, © 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, © Patrick Steele-Idem <pnidem@gmail.com> (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, © OpenJS Foundation and other contributors <https://openjsf.org/></span></li>
|
||||
<li><a href="https://jquery.com/" target="_blank">jQuery</a><span class="muted-color">, fast, small, and feature-rich JavaScript library, © 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, © 2018+, MarkedJS (https://github.com/markedjs/) © 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, © 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, © 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, © 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, © 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, © 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, © 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, © 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, © 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, © 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, © 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, © 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, © 2011-2020 thoughtbot, inc. <http://thoughtbot.com/></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, © 2013–2019 thoughtbot, inc. <http://thoughtbot.com/></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, © 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 © 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,
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "KeeWeb",
|
||||
"version": "1.16.0",
|
||||
"version": "1.16.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue