This commit is contained in:
antelle 2017-01-30 21:26:31 +01:00
parent a8290d8199
commit 334b50b074
8 changed files with 60 additions and 10 deletions

View File

@ -50,7 +50,7 @@ module.exports = function(grunt) {
var webpackConfig = {
entry: {
app: 'app',
vendor: ['jquery', 'underscore', 'backbone', 'kdbxweb', 'baron', 'dropbox', 'pikaday', 'filesaver', 'qrcode']
vendor: ['jquery', 'underscore', 'backbone', 'kdbxweb', 'baron', 'dropbox', 'pikaday', 'filesaver', 'qrcode', 'argon2']
},
output: {
path: 'tmp/js',
@ -77,6 +77,7 @@ module.exports = function(grunt) {
pikaday: 'pikaday/pikaday.js',
filesaver: 'FileSaver.js/FileSaver.min.js',
qrcode: 'jsqrcode/dist/qrcode.min.js',
argon2: 'argon2-browser/docs/dist/argon2-asm.min.js',
templates: path.join(__dirname, 'app/templates')
}
},
@ -97,12 +98,13 @@ module.exports = function(grunt) {
{ test: /\.js$/, exclude: /(node_modules|bower_components)/, loader: 'babel',
query: { presets: ['es2015'], cacheDirectory: true }
},
{ test: /\.json$/, loader: 'json' }
{ test: /\.json$/, loader: 'json' },
{ test: /argon2-asm\.min\.js$/, loader: 'exports?Module' }
]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js'),
new webpack.BannerPlugin('keeweb v' + pkg.version + ', (c) 2015 ' + pkg.author.name +
new webpack.BannerPlugin('keeweb v' + pkg.version + ', (c) ' + new Date().getFullYear() + ' ' + pkg.author.name +
', opensource.org/licenses/' + pkg.license),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.ProvidePlugin({ _: 'underscore', $: 'jquery' }),
@ -116,11 +118,13 @@ module.exports = function(grunt) {
crypto: false,
Buffer: false,
__filename: false,
__dirname: false
__dirname: false,
fs: false
},
externals: {
xmldom: 'null',
crypto: 'null'
crypto: 'null',
fs: 'null'
}
};

View File

@ -10,7 +10,8 @@ var AppModel = require('./models/app-model'),
Updater = require('./comp/updater'),
AuthReceiver = require('./comp/auth-receiver'),
ExportApi = require('./comp/export-api'),
SettingsManager = require('./util/settings-manager'),
SettingsManager = require('./comp/settings-manager'),
KdbxwebInit = require('./util/kdbxweb-init'),
Locale = require('./util/locale');
$(() => {
@ -49,6 +50,7 @@ $(() => {
KeyHandler.init();
IdleTracker.init();
PopupNotifier.init();
KdbxwebInit.init();
window.kw = ExportApi;
}

View File

@ -1,7 +1,7 @@
'use strict';
const Backbone = require('backbone');
const Locale = require('./locale');
const Locale = require('./../util/locale');
const SettingsManager = {
neutralLocale: null,

View File

@ -0,0 +1,42 @@
'use strict';
const kdbxweb = require('kdbxweb');
const KdbxwebInit = {
init() {
kdbxweb.CryptoEngine.argon2 = this.argon2;
},
argon2(password, salt, memory, iterations, length, parallelism, type, version) {
const Module = require('argon2');
let passwordLen = password.byteLength;
password = Module.allocate(new Uint8Array(password), 'i8', Module.ALLOC_NORMAL);
let saltLen = salt.byteLength;
salt = Module.allocate(new Uint8Array(salt), 'i8', Module.ALLOC_NORMAL);
let hash = Module.allocate(new Array(length), 'i8', Module.ALLOC_NORMAL);
let encodedLen = 512;
let encoded = Module.allocate(new Array(encodedLen), 'i8', Module.ALLOC_NORMAL);
// jshint camelcase:false
try {
let res = Module._argon2_hash(iterations, memory, parallelism,
password, passwordLen, salt, saltLen,
hash, length, encoded, encodedLen, type, version);
if (res) {
return Promise.reject('Argon2 error ' + res);
}
let hashArr = new Uint8Array(length);
for (let i = 0; i < length; i++) {
hashArr[i] = Module.HEAP8[hash + i];
}
Module._free(password);
Module._free(salt);
Module._free(hash);
Module._free(encoded);
return Promise.resolve(hashArr);
} catch (e) {
return Promise.reject(e);
}
}
};
module.exports = KdbxwebInit;

View File

@ -20,7 +20,7 @@ var Backbone = require('backbone'),
KeyHandler = require('../comp/key-handler'),
IdleTracker = require('../comp/idle-tracker'),
Launcher = require('../comp/launcher'),
SettingsManager = require('../util/settings-manager'),
SettingsManager = require('../comp/settings-manager'),
Locale = require('../util/locale'),
UpdateModel = require('../models/update-model');

View File

@ -10,10 +10,10 @@ var Backbone = require('backbone'),
UpdateModel = require('../../models/update-model'),
RuntimeInfo = require('../../comp/runtime-info'),
Alerts = require('../../comp/alerts'),
SettingsManager = require('../../comp/settings-manager'),
Storage = require('../../storage'),
FeatureDetector = require('../../util/feature-detector'),
Locale = require('../../util/locale'),
SettingsManager = require('../../util/settings-manager'),
Links = require('../../const/links');
var SettingsGeneralView = Backbone.View.extend({

View File

@ -32,6 +32,7 @@
"pikaday": "1.4.0",
"FileSaver.js": "eligrey/FileSaver.js",
"jquery": "3.1.0",
"jsqrcode": "antelle/jsqrcode#0.1.3"
"jsqrcode": "antelle/jsqrcode#0.1.3",
"argon2-browser": "^0.0.2"
}
}

View File

@ -4,6 +4,7 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.idea" />
<excludeFolder url="file://$MODULE_DIR$/bower_components" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/dist" />
<excludeFolder url="file://$MODULE_DIR$/node_modules" />