WIP: begin browserify build

This commit is contained in:
Tankred Hase 2014-10-02 22:05:44 +02:00 committed by Felix Hammerl
parent 73ed053c66
commit c36cd069e0
57 changed files with 8559 additions and 9088 deletions

3
.gitignore vendored
View File

@ -7,7 +7,4 @@ src/css/
dist/
release/
test/integration/src/
src/lib/*.js
src/js/crypto/aes-gcm.js
src/js/crypto/util.js
.elasticbeanstalk/

View File

@ -23,15 +23,7 @@
"importScripts",
"process",
"Event",
"QUnit",
"test",
"asyncTest",
"ok",
"equal",
"deepEqual",
"start",
"chrome",
"requirejs",
"define",
"self",
"describe",
@ -42,7 +34,13 @@
"before",
"beforeEach",
"after",
"afterEach"
"afterEach",
"FastClick",
"angular",
"forge",
"Lawnchair",
"_",
"openpgp"
],
"globals": {

View File

@ -6,6 +6,7 @@ module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
connect: {
dev: {
options: {
@ -47,8 +48,9 @@ module.exports = function(grunt) {
},
clean: {
dist: ['dist', 'src/lib/*.js', 'test/lib', 'test/integration/src']
dist: ['dist', 'test/lib', 'test/integration/src']
},
sass: {
dist: {
files: {
@ -57,6 +59,7 @@ module.exports = function(grunt) {
}
}
},
autoprefixer: {
options: {
browsers: ['last 2 versions']
@ -68,9 +71,10 @@ module.exports = function(grunt) {
}
}
},
csso: {
options: {
banner: '/*! Copyright © 2013, Whiteout Networks GmbH. All rights reserved.*/\n'
banner: '/*! Copyright © <%= grunt.template.today("yyyy") %>, Whiteout Networks GmbH.*/\n'
},
dist: {
files: {
@ -79,6 +83,7 @@ module.exports = function(grunt) {
}
}
},
watch: {
css: {
files: ['src/sass/**/*.scss'],
@ -86,7 +91,7 @@ module.exports = function(grunt) {
},
js: {
files: ['src/js/**/*.js'],
tasks: ['copy:js', 'copy:integration', 'manifest']
tasks: ['dist-js', 'copy:integration', 'manifest']
},
lib: {
files: ['src/lib/**/*.js'],
@ -97,36 +102,52 @@ module.exports = function(grunt) {
tasks: ['copy:app', 'copy:ca', 'copy:tpl', 'copy:img', 'copy:font', 'manifest-dev', 'manifest']
}
},
copy: {
npm: {
expand: true,
flatten: true,
cwd: 'node_modules/',
src: [
'requirejs/require.js',
'imap-client/src/*.js',
'imap-client/node_modules/browserbox/src/*.js',
'imap-client/node_modules/browserbox/node_modules/wo-imap-handler/src/*.js',
'imap-client/node_modules/browserbox/node_modules/mimefuncs/src/*.js',
'imap-client/node_modules/browserbox/node_modules/tcp-socket/src/*.js',
'imap-client/node_modules/browserbox/node_modules/wo-utf7/src/*.js',
'mailreader/src/*.js',
'mailreader/node_modules/mimeparser/src/*.js',
'mailreader/node_modules/mimeparser/node_modules/wo-addressparser/src/*.js',
'pgpbuilder/src/*.js',
'pgpbuilder/node_modules/mailbuild/src/*.js',
'pgpbuilder/node_modules/mailbuild/node_modules/mimetypes/src/*.js',
'pgpbuilder/node_modules/mailbuild/node_modules/punycode/punycode.min.js',
'pgpmailer/src/*.js',
'pgpmailer/node_modules/wo-smtpclient/src/*.js',
'pgpmailer/node_modules/wo-smtpclient/node_modules/wo-stringencoding/dist/stringencoding.js',
'axe-logger/axe.js',
'dompurify/purify.js',
'jquery/dist/jquery.min.js',
'ng-infinite-scroll/build/ng-infinite-scroll.min.js'
],
dest: 'src/lib/'
browserify: {
all: {
files: {
'dist/js/app.min.js': ['src/js/app.js']
},
options: {
external: ['node-forge', 'net', 'tls'] // common.js apis not required at build time
}
},
/* TODO:
tls-worker: {},
mailreader-worker: {},
pbkdf2-worker: {},
unitTest: {},
unitTest: {},
integrationTest: {}
*/
},
uglify: {
all: {
files: {
'dist/js/app.min.js': [
'src/lib/underscore/underscore-min.js',
'node_modules/jquery/dist/jquery.min.js',
'src/lib/angular/angular.min.js',
'src/lib/angular/angular-route.min.js',
'src/lib/angular/angular-animate.min.js',
'src/lib/ngtagsinput/ng-tags-input.min.js',
'src/lib/fastclick/fastclick.js',
'node_modules/ng-infinite-scroll/build/ng-infinite-scroll.min.js',
'src/lib/lawnchair/lawnchair-git.js',
'src/lib/lawnchair/lawnchair-adapter-webkit-sqlite-git.js',
'src/lib/lawnchair/lawnchair-adapter-indexed-db-git.js',
'node_modules/dompurify/purify.js',
'dist/js/app.min.js'
]
}
},
options: {
banner: '/*! Copyright © <%= grunt.template.today("yyyy") %>, Whiteout Networks GmbH.*/\n'
}
},
copy: {
npmDev: {
expand: true,
flatten: true,
@ -134,24 +155,6 @@ module.exports = function(grunt) {
src: ['requirejs/require.js', 'mocha/mocha.css', 'mocha/mocha.js', 'chai/chai.js', 'sinon/pkg/sinon.js', 'angularjs/src/ngMock/angular-mocks.js', 'browsercrow/src/*.js', 'browsersmtp/src/*.js'],
dest: 'test/lib/'
},
cryptoLib: {
expand: true,
cwd: 'node_modules/crypto-lib/src/',
src: ['*.js'],
dest: 'src/js/crypto/'
},
lib: {
expand: true,
cwd: 'src/lib/',
src: ['**'],
dest: 'dist/lib/'
},
js: {
expand: true,
cwd: 'src/js/',
src: ['**'],
dest: 'dist/js/'
},
font: {
expand: true,
cwd: 'src/font/',
@ -170,12 +173,6 @@ module.exports = function(grunt) {
src: ['*'],
dest: 'dist/tpl/'
},
ca: {
expand: true,
cwd: 'src/ca/',
src: ['*'],
dest: 'dist/ca/'
},
app: {
expand: true,
cwd: 'src/',
@ -200,16 +197,6 @@ module.exports = function(grunt) {
cwd: 'dist/',
src: ['**/*'],
dest: 'release/'
},
nodeWebkit: {
options: {
mode: 'zip',
archive: 'release/whiteout-mail_' + zipName + '.nw'
},
expand: true,
cwd: 'dist/',
src: ['**/*'],
dest: '/'
}
},
@ -226,22 +213,13 @@ module.exports = function(grunt) {
src: ['**/*.*'],
dest: 'dist/appcache.manifest'
}
},
}
nodewebkit: {
options: {
version: '0.9.2', // node-webkit version
build_dir: './release/node-webkit/', // Where the build version of my node-webkit app is saved
mac: true, // We want to build it for mac
win: false, // We want to build it for win
linux32: false, // We don't need linux32
linux64: false, // We don't need linux64
},
src: ['./dist/**/*'] // Your node-webkit app
},
});
// Load the plugin(s)
grunt.loadNpmTasks('grunt-browserify');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-mocha');
@ -252,14 +230,14 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-node-webkit-builder');
grunt.loadNpmTasks('grunt-manifest');
// Build tasks
grunt.registerTask('dist-npm', ['copy:npm', 'copy:npmDev', 'copy:cryptoLib']);
grunt.registerTask('dist-npm', ['copy:npmDev']);
grunt.registerTask('dist-css', ['sass', 'autoprefixer', 'csso']);
grunt.registerTask('dist-js', ['browserify', 'uglify']);
grunt.registerTask('dist-copy', ['copy']);
grunt.registerTask('dist', ['clean', 'dist-npm', 'dist-css', 'dist-copy', 'manifest']);
grunt.registerTask('dist', ['clean', 'dist-npm', 'dist-css', 'dist-js', 'dist-copy', 'manifest']);
// Test/Dev tasks
grunt.registerTask('dev', ['connect:dev']);

View File

@ -29,20 +29,21 @@
"dependencies": {
"axe-logger": "~0.0.2",
"compression": "^1.0.11",
"config": "^1.0.2",
"crypto-lib": "~0.2.1",
"dompurify": "~0.4.2",
"express": "^4.8.3",
"imap-client": "~0.4.3",
"jquery": "~2.1.1",
"mailreader": "~0.3.5",
"morgan": "^1.2.3",
"ng-infinite-scroll": "~1.1.2",
"npmlog": "^0.1.1",
"pgpbuilder": "~0.4.0",
"pgpmailer": "~0.4.0",
"requirejs": "~2.1.14",
"config": "^1.0.2",
"morgan": "^1.2.3",
"npmlog": "^0.1.1",
"socket.io": "^1.0.6"
"socket.io": "^1.0.6",
"tcp-socket": "^0.3.9",
"wo-smtpclient": "^0.3.8"
},
"devDependencies": {
"angularjs": "https://github.com/whiteout-io/angular.js/tarball/npm-version",
@ -50,18 +51,19 @@
"browsersmtp": "https://github.com/whiteout-io/browsersmtp/tarball/master",
"chai": "~1.7.2",
"grunt": "~0.4.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-manifest": "^0.4.0",
"grunt-autoprefixer": "~0.7.2",
"grunt-browserify": "^3.0.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-compress": "~0.5.2",
"grunt-contrib-connect": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-jshint": "~0.6.4",
"grunt-contrib-sass": "~0.7.3",
"grunt-contrib-uglify": "^0.6.0",
"grunt-contrib-watch": "~0.5.3",
"grunt-csso": "~0.6.1",
"grunt-manifest": "^0.4.0",
"grunt-mocha": "~0.4.1",
"grunt-node-webkit-builder": "~0.1.17",
"mocha": "~1.13.0",
"sinon": "~1.7.3"
}

View File

@ -26,9 +26,7 @@
<!-- The Scripts -->
<script src="socket.io/socket.io.js"></script>
<script src="lib/require.js"></script>
<script src="require-config.js"></script>
<script src="js/app.js"></script>
<script src="js/app.min.js"></script>
</head>
<body key-shortcuts>

View File

@ -1,9 +1,6 @@
define(function(require) {
'use strict';
var _ = require('underscore'),
app = {},
appVersion, cloudUrl, keychainUrl, clientId;
var appVersion, cloudUrl, keychainUrl, clientId;
// parse manifest to get configurations for current runtime
try {
@ -29,7 +26,7 @@ define(function(require) {
/**
* Global app configurations
*/
app.config = {
exports.config = {
cloudUrl: cloudUrl || 'https://keys.whiteout.io',
privkeyServerUrl: keychainUrl || 'https://keychain.whiteout.io',
adminUrl: 'https://admin-node.whiteout.io',
@ -185,7 +182,7 @@ define(function(require) {
/**
* Strings are maintained here
*/
app.string = {
exports.string = {
fallbackSubject: '(no subject)',
invitationSubject: 'Invitation to a private conversation',
invitationMessage: 'Hi,\n\nI use Whiteout Mail to send and receive encrypted email. I would like to exchange encrypted messages with you as well.\n\nPlease install the Whiteout Mail application. This application makes it easy to read and write messages securely with PGP encryption applied.\n\nGo to the Whiteout Networks homepage to learn more and to download the application: https://whiteout.io\n\n',
@ -218,6 +215,3 @@ define(function(require) {
connDocNoInbox: 'We could not detect an IMAP inbox folder on {0}. Please have a look at the FAQ for information on how to fix this error.',
connDocGenericError: 'There was an error connecting to {0}: {1}'
};
return app;
});

View File

@ -1,31 +1,31 @@
/**
* The main application controller
*/
define(function(require) {
'use strict';
var axe = require('axe'),
Auth = require('js/bo/auth'),
PGP = require('js/crypto/pgp'),
var axe = require('axe-logger'),
Auth = require('./bo/auth'),
PGP = require('./crypto/pgp'),
PgpMailer = require('pgpmailer'),
OAuth = require('js/util/oauth'),
OAuth = require('./util/oauth'),
PgpBuilder = require('pgpbuilder'),
OutboxBO = require('js/bo/outbox'),
OutboxBO = require('./bo/outbox'),
mailreader = require('mailreader'),
ImapClient = require('imap-client'),
Crypto = require('js/crypto/crypto'),
RestDAO = require('js/dao/rest-dao'),
appConfig = require('js/app-config'),
EmailDAO = require('js/dao/email-dao'),
AdminDao = require('js/dao/admin-dao'),
KeychainDAO = require('js/dao/keychain-dao'),
PublicKeyDAO = require('js/dao/publickey-dao'),
LawnchairDAO = require('js/dao/lawnchair-dao'),
PrivateKeyDAO = require('js/dao/privatekey-dao'),
InvitationDAO = require('js/dao/invitation-dao'),
DeviceStorageDAO = require('js/dao/devicestorage-dao'),
ConnectionDoctor = require('js/util/connection-doctor'),
UpdateHandler = require('js/util/update/update-handler'),
Crypto = require('./crypto/crypto'),
RestDAO = require('./dao/rest-dao'),
appConfig = require('./app-config'),
EmailDAO = require('./dao/email-dao'),
AdminDao = require('./dao/admin-dao'),
KeychainDAO = require('./dao/keychain-dao'),
PublicKeyDAO = require('./dao/publickey-dao'),
LawnchairDAO = require('./dao/lawnchair-dao'),
PrivateKeyDAO = require('./dao/privatekey-dao'),
InvitationDAO = require('./dao/invitation-dao'),
DeviceStorageDAO = require('./dao/devicestorage-dao'),
ConnectionDoctor = require('./util/connection-doctor'),
UpdateHandler = require('./util/update/update-handler'),
config = appConfig.config,
str = appConfig.string;
@ -183,8 +183,6 @@ define(function(require) {
* Log the current user out by clear the app config store and deleting instances of imap-client and pgp-mailer.
*/
self.logout = function() {
var self = this;
// clear app config store
self._auth.logout(function(err) {
if (err) {
@ -267,5 +265,4 @@ define(function(require) {
}
};
return self;
});
exports = self;

View File

@ -14,64 +14,26 @@ if (typeof window.applicationCache !== 'undefined') {
};
}
// hey Angular, we're bootstrapping manually!
window.name = 'NG_DEFER_BOOTSTRAP!';
requirejs([
'angular',
'js/controller/dialog',
'js/controller/popover',
'js/controller/add-account',
'js/controller/account',
'js/controller/set-passphrase',
'js/controller/privatekey-upload',
'js/controller/contacts',
'js/controller/about',
'js/controller/login',
'js/controller/login-initial',
'js/controller/login-new-device',
'js/controller/login-existing',
'js/controller/login-privatekey-download',
'js/controller/login-set-credentials',
'js/controller/mail-list',
'js/controller/read',
'js/controller/write',
'js/controller/navigation',
'js/crypto/util',
'js/util/error',
'js/util/backbutton-handler',
'fastclick',
'angularRoute',
'angularAnimate',
'ngInfiniteScroll',
'ngTagsInput'
], function(
angular,
DialogCtrl,
PopoverCtrl,
AddAccountCtrl,
AccountCtrl,
SetPassphraseCtrl,
PrivateKeyUploadCtrl,
ContactsCtrl,
AboutCtrl,
LoginCtrl,
LoginInitialCtrl,
LoginNewDeviceCtrl,
LoginExistingCtrl,
LoginPrivateKeyDownloadCtrl,
LoginSetCredentialsCtrl,
MailListCtrl,
ReadCtrl,
WriteCtrl,
NavigationCtrl,
util,
errorUtil,
backButtonUtil,
FastClick
) {
// reset window.name
window.name = util.UUID();
var DialogCtrl = require('./controller/dialog'),
PopoverCtrl = require('./controller/popover'),
AddAccountCtrl = require('./controller/add-account'),
AccountCtrl = require('./controller/account'),
SetPassphraseCtrl = require('./controller/set-passphrase'),
PrivateKeyUploadCtrl = require('./controller/privatekey-upload'),
ContactsCtrl = require('./controller/contacts'),
AboutCtrl = require('./controller/about'),
LoginCtrl = require('./controller/login'),
LoginInitialCtrl = require('./controller/login-initial'),
LoginNewDeviceCtrl = require('./controller/login-new-device'),
LoginExistingCtrl = require('./controller/login-existing'),
LoginPrivateKeyDownloadCtrl = require('./controller/login-privatekey-download'),
LoginSetCredentialsCtrl = require('./controller/login-set-credentials'),
MailListCtrl = require('./controller/mail-list'),
ReadCtrl = require('./controller/read'),
WriteCtrl = require('./controller/write'),
NavigationCtrl = require('./controller/navigation'),
errorUtil = require('./util/error'),
backButtonUtil = require('./util/backbutton-handler');
// init main angular module including dependencies
var app = angular.module('mail', [
@ -153,9 +115,3 @@ requirejs([
app.controller('AboutCtrl', AboutCtrl);
app.controller('DialogCtrl', DialogCtrl);
app.controller('PopoverCtrl', PopoverCtrl);
// manually bootstrap angular due to require.js
angular.element().ready(function() {
angular.bootstrap(document, ['mail']);
});
});

View File

@ -1,8 +1,7 @@
define(function(require) {
'use strict';
var axe = require('axe'),
str = require('js/app-config').string;
var axe = require('axe-logger'),
str = require('../app-config').string;
var EMAIL_ADDR_DB_KEY = 'emailaddress';
var USERNAME_DB_KEY = 'username';
@ -449,5 +448,4 @@ define(function(require) {
});
};
return Auth;
});
exports = Auth;

View File

@ -1,9 +1,7 @@
define(function(require) {
'use strict';
var _ = require('underscore'),
util = require('js/crypto/util'),
config = require('js/app-config').config,
var util = require('crypto-lib').util,
config = require('../app-config').config,
outboxDb = 'email_OUTBOX';
/**
@ -228,5 +226,4 @@ define(function(require) {
}
};
return OutboxBO;
});
exports = OutboxBO;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var cfg = require('js/app-config').config;
var cfg = require('../app-config').config;
//
// Controller
@ -27,5 +26,4 @@ define(function(require) {
//
};
return AboutCtrl;
});
exports = AboutCtrl;

View File

@ -1,9 +1,8 @@
define(function(require) {
'use strict';
var appController = require('js/app-controller'),
dl = require('js/util/download'),
config = require('js/app-config').config,
var appController = require('../app-controller'),
dl = require('../util/download'),
config = require('../app-config').config,
pgp, keychain, userId;
//
@ -57,5 +56,4 @@ define(function(require) {
};
};
return AccountCtrl;
});
exports = AccountCtrl;

View File

@ -1,8 +1,7 @@
define(function(require) {
'use strict';
var appCtrl = require('js/app-controller'),
cfg = require('js/app-config').config;
var appCtrl = require('../app-controller'),
cfg = require('../app-config').config;
var AddAccountCtrl = function($scope, $location, $routeParams) {
if (!appCtrl._auth && !$routeParams.dev) {
@ -116,5 +115,4 @@ define(function(require) {
};
};
return AddAccountCtrl;
});
exports = AddAccountCtrl;

View File

@ -1,9 +1,6 @@
define(function(require) {
'use strict';
var angular = require('angular'),
_ = require('underscore'),
appController = require('js/app-controller'),
var appController = require('../app-controller'),
keychain, pgp;
//
@ -139,5 +136,4 @@ define(function(require) {
};
});
return ContactsCtrl;
});
exports = ContactsCtrl;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
var DialogCtrl = function($scope) {
@ -12,5 +11,4 @@ define(function() {
};
};
return DialogCtrl;
});
exports = DialogCtrl;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var appController = require('js/app-controller');
var appController = require('../app-controller');
var LoginExistingCtrl = function($scope, $location, $routeParams) {
if (!appController._emailDao && !$routeParams.dev) {
@ -69,5 +68,4 @@ define(function(require) {
}
};
return LoginExistingCtrl;
});
exports = LoginExistingCtrl;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var appController = require('js/app-controller');
var appController = require('../app-controller');
var LoginInitialCtrl = function($scope, $location, $routeParams) {
if (!appController._emailDao && !$routeParams.dev) {
@ -117,5 +116,4 @@ define(function(require) {
};
};
return LoginInitialCtrl;
});
exports = LoginInitialCtrl;

View File

@ -1,8 +1,6 @@
define(function(require) {
'use strict';
var angular = require('angular'),
appController = require('js/app-controller');
var appController = require('../app-controller');
var LoginExistingCtrl = function($scope, $location, $routeParams) {
if (!appController._emailDao && !$routeParams.dev) {
@ -137,5 +135,4 @@ define(function(require) {
};
});
return LoginExistingCtrl;
});
exports = LoginExistingCtrl;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var appController = require('js/app-controller');
var appController = require('../app-controller');
var LoginPrivateKeyDownloadCtrl = function($scope, $location, $routeParams) {
if (!appController._emailDao && !$routeParams.dev) {
@ -130,5 +129,4 @@ define(function(require) {
};
};
return LoginPrivateKeyDownloadCtrl;
});
exports = LoginPrivateKeyDownloadCtrl;

View File

@ -1,12 +1,11 @@
define(function(require) {
'use strict';
var ENCRYPTION_METHOD_NONE = 0;
var ENCRYPTION_METHOD_STARTTLS = 1;
var ENCRYPTION_METHOD_TLS = 2;
var appCtrl = require('js/app-controller'),
config = require('js/app-config').config;
var appCtrl = require('../app-controller'),
config = require('../app-config').config;
var SetCredentialsCtrl = function($scope, $location, $routeParams) {
if (!appCtrl._auth && !$routeParams.dev) {
@ -116,5 +115,4 @@ define(function(require) {
};
};
return SetCredentialsCtrl;
});
exports = SetCredentialsCtrl;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var appController = require('js/app-controller');
var appController = require('../app-controller');
var LoginCtrl = function($scope, $location) {
@ -99,5 +98,4 @@ define(function(require) {
}
};
return LoginCtrl;
});
exports = LoginCtrl;

View File

@ -1,10 +1,7 @@
define(function(require) {
'use strict';
var angular = require('angular'),
_ = require('underscore'),
appController = require('js/app-controller'),
notification = require('js/util/notification'),
var appController = require('../app-controller'),
notification = require('../util/notification'),
emailDao, outboxBo, keychainDao, searchTimeout, firstSelect;
var INIT_DISPLAY_LEN = 20,
@ -596,5 +593,4 @@ define(function(require) {
return dummies;
}
return MailListCtrl;
});
exports = MailListCtrl;

View File

@ -1,12 +1,9 @@
define(function(require) {
'use strict';
var angular = require('angular'),
appController = require('js/app-controller'),
config = require('js/app-config').config,
notification = require('js/util/notification'),
backBtnHandler = require('js/util/backbutton-handler'),
_ = require('underscore'),
var appController = require('../app-controller'),
config = require('../app-config').config,
notification = require('../util/notification'),
backBtnHandler = require('../util/backbutton-handler'),
emailDao, outboxBo;
//
@ -206,5 +203,4 @@ define(function(require) {
};
});
return NavigationCtrl;
});
exports = NavigationCtrl;

View File

@ -1,8 +1,5 @@
define(function(require) {
'use strict';
var angular = require('angular');
//
// Controller
//
@ -43,5 +40,4 @@ define(function(require) {
};
});
return PopoverCtrl;
});
exports = PopoverCtrl;

View File

@ -1,9 +1,7 @@
define(function(require) {
'use strict';
var angular = require('angular'),
appController = require('js/app-controller'),
util = require('js/crypto/util'),
var appController = require('../app-controller'),
util = require('crypto-lib').util,
keychain, pgp;
var PrivateKeyUploadCtrl = function($scope) {
@ -200,5 +198,4 @@ define(function(require) {
};
});
return PrivateKeyUploadCtrl;
});
exports = PrivateKeyUploadCtrl;

View File

@ -1,4 +1,3 @@
(function() {
'use strict';
// set listener for event from main window
@ -214,5 +213,3 @@
view.style['-webkit-transform'] = scale;
view.style.transform = scale;
}
})();

View File

@ -1,10 +1,8 @@
define(function(require) {
'use strict';
var appController = require('js/app-controller'),
download = require('js/util/download'),
angular = require('angular'),
str = require('js/app-config').string,
var appController = require('../app-controller'),
download = require('../util/download'),
str = require('../app-config').string,
emailDao, invitationDao, outbox, pgp, keychain;
//
@ -282,5 +280,4 @@ define(function(require) {
};
});
return ReadCtrl;
});
exports = ReadCtrl;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var appController = require('js/app-controller'),
var appController = require('../app-controller'),
pgp, keychain;
//
@ -134,5 +133,4 @@ define(function(require) {
}
};
return SetPassphraseCtrl;
});
exports = SetPassphraseCtrl;

View File

@ -1,12 +1,9 @@
define(function(require) {
'use strict';
var angular = require('angular'),
_ = require('underscore'),
appController = require('js/app-controller'),
axe = require('axe'),
util = require('js/crypto/util'),
str = require('js/app-config').string,
var appController = require('../app-controller'),
axe = require('axe-logger'),
util = require('crypto-lib').util,
str = require('../app-config').string,
pgp, emailDao, outbox, keychainDao, auth;
//
@ -530,5 +527,4 @@ define(function(require) {
};
});
return WriteCtrl;
});
exports = WriteCtrl;

View File

@ -2,13 +2,13 @@
* High level crypto api that invokes native crypto (if available) and
* gracefully degrades to JS crypto (if unavailable)
*/
define(function(require) {
'use strict';
var aes = require('js/crypto/aes-gcm'),
pbkdf2 = require('js/crypto/pbkdf2'),
config = require('js/app-config').config,
axe = require('axe');
var aes = require('crypto-lib').aes,
pbkdf2 = require('./pbkdf2'),
config = require('../app-config').config,
axe = require('axe-logger');
var PBKDF2_WORKER = '/crypto/pbkdf2-worker.js';
@ -119,5 +119,4 @@ define(function(require) {
options.callback(null, result);
}
return Crypto;
});
exports = Crypto;

View File

@ -1,22 +1,12 @@
(function() {
'use strict';
// import web worker dependencies
importScripts('../../lib/require.js');
var pbkdf2 = require('./pbkdf2');
/**
* In the web worker thread context, 'this' and 'self' can be used as a global
* variable namespace similar to the 'window' object in the main thread
*/
self.onmessage = function(e) {
// fetch dependencies via require.js
require(['../../require-config'], function() {
require.config({
baseUrl: '../../lib'
});
require(['js/crypto/pbkdf2'], function(pbkdf2) {
var i = e.data,
key = null;
@ -30,9 +20,4 @@
// pass output back to main thread
self.postMessage(key);
});
});
};
}());

View File

@ -1,7 +1,7 @@
/**
* A Wrapper for Forge's PBKDF2 function
*/
define(['forge'], function(forge) {
'use strict';
var self = {};
@ -21,5 +21,4 @@ define(['forge'], function(forge) {
return forge.util.encode64(key);
};
return self;
});
exports = self;

View File

@ -1,12 +1,11 @@
/**
* High level crypto api that handles all calls to OpenPGP.js
*/
define(function(require) {
'use strict';
var openpgp = require('openpgp'),
util = require('openpgp').util,
config = require('js/app-config').config;
var util = openpgp.util,
config = require('../app-config').config;
var PGP = function() {
openpgp.config.prefer_hash_algorithm = openpgp.enums.hash.sha256;
@ -448,5 +447,4 @@ define(function(require) {
return true;
}
return PGP;
});
exports = PGP;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
var AdminDAO = function(restDao) {
@ -59,5 +58,4 @@ define(function() {
});
};
return AdminDAO;
});
exports = AdminDAO;

View File

@ -1,10 +1,7 @@
/**
* High level storage api that handles all persistence on the device. If
* SQLcipher/SQLite is available, all data is securely persisted there,
* through transparent encryption. If not, the crypto API is
* used to encrypt data on the fly before persisting via a JSON store.
* High level storage api that handles all persistence on the device.
*/
define(function() {
'use strict';
var DeviceStorageDAO = function(localDbDao) {
@ -93,5 +90,4 @@ define(function() {
return key;
}
return DeviceStorageDAO;
});
exports = DeviceStorageDAO;

View File

@ -1,11 +1,8 @@
define(function(require) {
'use strict';
var util = require('js/crypto/util'),
_ = require('underscore'),
config = require('js/app-config').config,
str = require('js/app-config').string;
var util = require('crypto-lib').util,
config = require('../app-config').config,
str = require('../app-config').string;
//
//
@ -1727,5 +1724,4 @@ define(function(require) {
});
}
return EmailDAO;
});
exports = EmailDAO;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
/**
@ -58,5 +57,4 @@ define(function() {
}
};
return InvitationDAO;
});
exports = InvitationDAO;

View File

@ -2,12 +2,11 @@
* A high-level Data-Access Api for handling Keypair synchronization
* between the cloud service and the device's local storage
*/
define(function(require) {
'use strict';
var _ = require('underscore'),
util = require('js/crypto/util'),
config = require('js/app-config').config;
var util = require('crypto-lib').util,
config = require('../app-config').config;
var DB_PUBLICKEY = 'publickey',
DB_PRIVATEKEY = 'privatekey',
@ -934,5 +933,4 @@ define(function(require) {
this._localDbDao.persist(prkLookupKey, privkey, callback);
};
return KeychainDAO;
});
exports = KeychainDAO;

View File

@ -1,13 +1,8 @@
/**
* Handles generic caching of JSON objects in a lawnchair adapter
*/
define(function(require) {
'use strict';
var _ = require('underscore'),
Lawnchair = require('lawnchair');
require('lawnchairSQL');
require('lawnchairIDB');
'use strict';
var LawnchairDAO = function() {};
@ -218,5 +213,4 @@ define(function(require) {
this._db.nuke(callback);
};
return LawnchairDAO;
});
exports = LawnchairDAO;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
var PrivateKeyDAO = function(restDao) {
@ -194,5 +193,4 @@ define(function() {
}, callback);
};
return PrivateKeyDAO;
});
exports = PrivateKeyDAO;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
var PublicKeyDAO = function(restDao) {
@ -101,5 +100,4 @@ define(function() {
this._restDao.remove(uri, callback);
};
return PublicKeyDAO;
});
exports = PublicKeyDAO;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var config = require('js/app-config').config;
var config = require('../app-config').config;
var RestDAO = function(baseUri) {
if (baseUri) {
@ -119,5 +118,4 @@ define(function(require) {
xhr.send(options.payload ? JSON.stringify(options.payload) : undefined);
};
return RestDAO;
});
exports = RestDAO;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var axe = require('axe'),
var axe = require('axe-logger'),
DEBUG_TAG = 'backbutton handler';
/**
@ -53,5 +52,4 @@ define(function(require) {
}
}
return backBtnHandler;
});
exports = backBtnHandler;

View File

@ -1,12 +1,11 @@
define(function(require) {
'use strict';
var TCPSocket = require('tcp-socket'),
appConfig = require('js/app-config'),
appConfig = require('../app-config'),
cfg = appConfig.config,
strings = appConfig.string,
ImapClient = require('imap-client'),
SmtpClient = require('smtpclient');
SmtpClient = require('wo-smtpclient');
/**
* The connection doctor can check your connection. In essence, it reconstructs what happens when
@ -291,5 +290,4 @@ define(function(require) {
return error;
}
return ConnectionDoctor;
});
exports = ConnectionDoctor;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var util = require('js/crypto/util');
var util = require('crypto-lib').util;
var dl = {};
@ -56,5 +55,4 @@ define(function(require) {
}
};
return dl;
});
exports = dl;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var axe = require('axe');
var axe = require('axe-logger');
var er = {};
er.attachHandler = function(scope) {
@ -31,5 +30,4 @@ define(function(require) {
};
};
return er;
});
exports = er;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var cfg = require('js/app-config').config;
var cfg = require('../app-config').config;
var self = {};
@ -56,5 +55,4 @@ define(function(require) {
notification.close();
};
return self;
});
exports = self;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
var OAuth = function(googleApi) {
@ -97,5 +96,4 @@ define(function() {
});
};
return OAuth;
});
exports = OAuth;

View File

@ -1,13 +1,12 @@
define(function(require) {
'use strict';
var axe = require('axe'),
cfg = require('js/app-config').config,
updateV1 = require('js/util/update/update-v1'),
updateV2 = require('js/util/update/update-v2'),
updateV3 = require('js/util/update/update-v3'),
updateV4 = require('js/util/update/update-v4'),
updateV5 = require('js/util/update/update-v5');
var axe = require('axe-logger'),
cfg = require('../../app-config').config,
updateV1 = require('./update-v1'),
updateV2 = require('./update-v2'),
updateV3 = require('./update-v3'),
updateV4 = require('./update-v4'),
updateV5 = require('./update-v5');
/**
* Handles database migration
@ -128,5 +127,4 @@ define(function(require) {
}
};
return UpdateHandler;
});
exports = UpdateHandler;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
/**
@ -25,5 +24,4 @@ define(function() {
});
}
return updateV1;
});
exports = updateV1;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
/**
@ -24,5 +23,4 @@ define(function() {
});
}
return updateV2;
});
exports = updateV2;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
/**
@ -24,5 +23,4 @@ define(function() {
});
}
return update;
});
exports = update;

View File

@ -1,7 +1,6 @@
define(function(require) {
'use strict';
var config = require('js/app-config').config;
var config = require('../../app-config').config;
/**
@ -101,5 +100,4 @@ define(function(require) {
}
}
return update;
});
exports = update;

View File

@ -1,4 +1,3 @@
define(function() {
'use strict';
var FOLDER_TYPE_INBOX = 'Inbox';
@ -52,5 +51,4 @@ define(function() {
});
}
return update;
});
exports = update;

View File

@ -1,245 +0,0 @@
// uuid.js
//
// (c) 2010-2012 Robert Kieffer
// MIT License
// https://github.com/broofa/node-uuid
(function() {
var _global = this;
// Unique ID creation requires a high quality random # generator. We feature
// detect to determine the best RNG source, normalizing to a function that
// returns 128-bits of randomness, since that's what's usually required
var _rng;
// Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html
//
// Moderately fast, high quality
if (typeof(require) == 'function') {
try {
var _rb = require('crypto').randomBytes;
_rng = _rb && function() {return _rb(16);};
} catch(e) {}
}
if (!_rng && _global.crypto && crypto.getRandomValues) {
// WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
//
// Moderately fast, high quality
var _rnds8 = new Uint8Array(16);
_rng = function whatwgRNG() {
crypto.getRandomValues(_rnds8);
return _rnds8;
};
}
if (!_rng) {
// Math.random()-based (RNG)
//
// If all else fails, use Math.random(). It's fast, but is of unspecified
// quality.
var _rnds = new Array(16);
_rng = function() {
for (var i = 0, r; i < 16; i++) {
if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
_rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
}
return _rnds;
};
}
// Buffer class to use
var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array;
// Maps for number <-> hex string conversion
var _byteToHex = [];
var _hexToByte = {};
for (var i = 0; i < 256; i++) {
_byteToHex[i] = (i + 0x100).toString(16).substr(1);
_hexToByte[_byteToHex[i]] = i;
}
// **`parse()` - Parse a UUID into it's component bytes**
function parse(s, buf, offset) {
var i = (buf && offset) || 0, ii = 0;
buf = buf || [];
s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
if (ii < 16) { // Don't overflow!
buf[i + ii++] = _hexToByte[oct];
}
});
// Zero out remaining bytes if string was short
while (ii < 16) {
buf[i + ii++] = 0;
}
return buf;
}
// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
function unparse(buf, offset) {
var i = offset || 0, bth = _byteToHex;
return bth[buf[i++]] + bth[buf[i++]] +
bth[buf[i++]] + bth[buf[i++]] + '-' +
bth[buf[i++]] + bth[buf[i++]] + '-' +
bth[buf[i++]] + bth[buf[i++]] + '-' +
bth[buf[i++]] + bth[buf[i++]] + '-' +
bth[buf[i++]] + bth[buf[i++]] +
bth[buf[i++]] + bth[buf[i++]] +
bth[buf[i++]] + bth[buf[i++]];
}
// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html
// random #'s we need to init node and clockseq
var _seedBytes = _rng();
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
var _nodeId = [
_seedBytes[0] | 0x01,
_seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]
];
// Per 4.2.2, randomize (14 bit) clockseq
var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;
// Previous uuid creation time
var _lastMSecs = 0, _lastNSecs = 0;
// See https://github.com/broofa/node-uuid for API details
function v1(options, buf, offset) {
var i = buf && offset || 0;
var b = buf || [];
options = options || {};
var clockseq = options.clockseq != null ? options.clockseq : _clockseq;
// UUID timestamps are 100 nano-second units since the Gregorian epoch,
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
var msecs = options.msecs != null ? options.msecs : new Date().getTime();
// Per 4.2.1.2, use count of uuid's generated during the current clock
// cycle to simulate higher resolution clock
var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1;
// Time since last uuid creation (in msecs)
var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
// Per 4.2.1.2, Bump clockseq on clock regression
if (dt < 0 && options.clockseq == null) {
clockseq = clockseq + 1 & 0x3fff;
}
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
// time interval
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {
nsecs = 0;
}
// Per 4.2.1.2 Throw error if too many uuids are requested
if (nsecs >= 10000) {
throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
}
_lastMSecs = msecs;
_lastNSecs = nsecs;
_clockseq = clockseq;
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
msecs += 12219292800000;
// `time_low`
var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
b[i++] = tl >>> 24 & 0xff;
b[i++] = tl >>> 16 & 0xff;
b[i++] = tl >>> 8 & 0xff;
b[i++] = tl & 0xff;
// `time_mid`
var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
b[i++] = tmh >>> 8 & 0xff;
b[i++] = tmh & 0xff;
// `time_high_and_version`
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
b[i++] = tmh >>> 16 & 0xff;
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
b[i++] = clockseq >>> 8 | 0x80;
// `clock_seq_low`
b[i++] = clockseq & 0xff;
// `node`
var node = options.node || _nodeId;
for (var n = 0; n < 6; n++) {
b[i + n] = node[n];
}
return buf ? buf : unparse(b);
}
// **`v4()` - Generate random UUID**
// See https://github.com/broofa/node-uuid for API details
function v4(options, buf, offset) {
// Deprecated - 'format' argument, as supported in v1.2
var i = buf && offset || 0;
if (typeof(options) == 'string') {
buf = options == 'binary' ? new BufferClass(16) : null;
options = null;
}
options = options || {};
var rnds = options.random || (options.rng || _rng)();
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds[6] = (rnds[6] & 0x0f) | 0x40;
rnds[8] = (rnds[8] & 0x3f) | 0x80;
// Copy bytes to buffer, if provided
if (buf) {
for (var ii = 0; ii < 16; ii++) {
buf[i + ii] = rnds[ii];
}
}
return buf || unparse(rnds);
}
// Export public API
var uuid = v4;
uuid.v1 = v1;
uuid.v4 = v4;
uuid.parse = parse;
uuid.unparse = unparse;
uuid.BufferClass = BufferClass;
if (_global.define && define.amd) {
// Publish as AMD module
define(function() {return uuid;});
} else if (typeof(module) != 'undefined' && module.exports) {
// Publish as node.js module
module.exports = uuid;
} else {
// Publish as global (in browsers)
var _previousRoot = _global.uuid;
// **`noConflict()` - (browser only) to reset global 'uuid' var**
uuid.noConflict = function() {
_global.uuid = _previousRoot;
return uuid;
};
_global.uuid = uuid;
}
}());

View File

@ -1,10 +0,0 @@
{
"name": "Whiteout Mail",
"version": "0.0.1",
"main": "index.html",
"window": {
"toolbar": false,
"width": 1024,
"height": 768
}
}

View File

@ -1,68 +0,0 @@
(function() {
'use strict';
requirejs.config({
nodeRequire: (typeof module !== 'undefined' && module.exports) ? require : undefined,
baseUrl: 'lib',
paths: {
js: '../js',
test: '../../test',
jquery: 'jquery.min',
underscore: 'underscore/underscore-min',
lawnchair: 'lawnchair/lawnchair-git',
lawnchairSQL: 'lawnchair/lawnchair-adapter-webkit-sqlite-git',
lawnchairIDB: 'lawnchair/lawnchair-adapter-indexed-db-git',
angular: 'angular/angular.min',
angularRoute: 'angular/angular-route.min',
angularAnimate: 'angular/angular-animate.min',
ngInfiniteScroll: 'ng-infinite-scroll.min',
ngTagsInput: 'ngtagsinput/ng-tags-input.min',
uuid: 'uuid/uuid',
forge: 'forge/forge.min',
punycode: 'punycode.min',
openpgp: 'openpgp/openpgp',
fastclick: 'fastclick/fastclick'
},
shim: {
forge: {
exports: 'forge'
},
jquery: {
exports: '$'
},
angular: {
exports: 'angular',
deps: ['jquery']
},
angularRoute: {
exports: 'angular',
deps: ['angular']
},
angularAnimate: {
exports: 'angular',
deps: ['angular']
},
ngInfiniteScroll: {
exports: 'angular',
deps: ['jquery', 'angular']
},
ngTagsInput: {
exports: 'angular',
deps: ['angular']
},
lawnchair: {
exports: 'Lawnchair'
},
lawnchairSQL: {
deps: ['lawnchair']
},
lawnchairIDB: {
deps: ['lawnchair', 'lawnchairSQL']
},
underscore: {
exports: '_'
}
}
});
}());