decide.nolog.cz/app/app.js

100 lines
3.7 KiB
JavaScript
Raw Normal View History

2014-10-30 21:44:22 +01:00
import Ember from 'ember';
2014-07-06 17:37:54 +02:00
import Resolver from 'ember/resolver';
import loadInitializers from 'ember/load-initializers';
2014-10-30 21:44:22 +01:00
import config from './config/environment';
import sjcl from 'sjcl';
Ember.MODEL_FACTORY_INJECTIONS = true;
2014-07-06 17:37:54 +02:00
// decrypt / encrypt computed property helper
Ember.computed.encrypted = function(encryptedField, dataType) {
return Ember.computed(encryptedField, function(key, decryptedValue) {
var encryptKey = this.get('encryption.key'),
encryptedValue,
decryptedJSON,
encryptedJSON;
// check if encryptKey is set
if (Ember.isEmpty(encryptKey)) {
return null;
}
// setter
if (arguments.length === 2) {
decryptedJSON = JSON.stringify(decryptedValue);
encryptedValue = Ember.isNone(decryptedValue) ? null : String(sjcl.encrypt(encryptKey , decryptedJSON));
this.set(encryptedField, encryptedValue);
}
// get value of field to decrypt
encryptedJSON = this.get(encryptedField);
// check if encryptedField is defined and not null
2014-10-28 06:00:37 +01:00
if ( typeof encryptedJSON === 'undefined' ||
encryptedJSON === null
) {
2014-07-06 17:37:54 +02:00
return null;
}
// try to decrypt value
try {
decryptedJSON = sjcl.decrypt(encryptKey, encryptedJSON);
decryptedValue = JSON.parse(decryptedJSON);
} catch (e) {
2014-10-28 06:00:37 +01:00
throw new Ember.Error("Decryption failed. Please double check the url.");
2014-07-06 17:37:54 +02:00
}
switch (dataType) {
case 'array':
return Ember.isNone(decryptedValue) ? null : decryptedValue;
case 'date':
2014-10-28 04:02:43 +01:00
// https://github.com/emberjs/data/blob/master/packages/ember-data/lib/transforms/date.js
2014-10-30 21:44:22 +01:00
if (typeof decryptedValue === "string") {
2014-10-28 04:02:43 +01:00
return new Date(Ember.Date.parse(decryptedValue));
2014-10-30 21:44:22 +01:00
} else if (typeof decryptedValue === "number") {
2014-10-28 04:02:43 +01:00
return new Date(decryptedValue);
} else if (decryptedValue === null || decryptedValue === undefined) {
// if the value is not present in the data,
// return undefined, not null.
return decryptedValue;
}
2014-10-28 05:00:02 +01:00
return null;
2014-10-28 03:27:54 +01:00
case 'number':
2014-10-28 04:02:43 +01:00
// https://github.com/emberjs/data/blob/master/packages/ember-data/lib/transforms/number.js
2014-10-28 03:27:54 +01:00
return Ember.isNone(decryptedValue) ? null : Number(decryptedValue);
2014-07-06 17:37:54 +02:00
case 'string':
2014-10-28 04:02:43 +01:00
// https://github.com/emberjs/data/blob/master/packages/ember-data/lib/transforms/string.js
2014-07-06 17:37:54 +02:00
return Ember.isNone(decryptedValue) ? null : String(decryptedValue);
case 'boolean':
2014-10-28 04:02:43 +01:00
// https://github.com/emberjs/data/blob/master/packages/ember-data/lib/transforms/boolean.js
2014-10-30 21:44:22 +01:00
if (typeof decryptedValue === "boolean") {
2014-10-28 04:02:43 +01:00
return decryptedValue;
2014-10-30 21:44:22 +01:00
} else if (typeof decryptedValue === "string") {
2014-10-28 04:02:43 +01:00
return decryptedValue.match(/^true$|^t$|^1$/i) !== null;
2014-10-30 21:44:22 +01:00
} else if (typeof decryptedValue === "number") {
2014-10-28 04:02:43 +01:00
return decryptedValue === 1;
} else {
return false;
}
2014-07-06 17:37:54 +02:00
}
});
};
var App = Ember.Application.extend({
2014-10-30 21:44:22 +01:00
modulePrefix: config.modulePrefix,
podModulePrefix: config.podModulePrefix,
2014-07-06 17:37:54 +02:00
Resolver: Resolver
});
2014-07-06 19:22:38 +02:00
import formattedDateHelper from 'croodle/helpers/formatted-date';
Ember.Handlebars.registerBoundHelper('formattedDate', formattedDateHelper);
2014-10-30 21:44:22 +01:00
loadInitializers(App, config.modulePrefix);
2014-07-06 17:37:54 +02:00
export default App;