walnut.js/lib/com.daplie.walnut/daplie-scripts/oauth3-config.js

114 lines
4.0 KiB
JavaScript

(function (exports) {
'use strict';
var Oauth3Config;
var Oauth3 = (exports.OAUTH3 || require('./oauth3'));
function create(instanceOpts) {
var me = {};
var storage = instanceOpts.storage;
me.defaults = instanceOpts.defaults;
me.libPrefix = instanceOpts.libPrefix;
me.init = function (opts) {
console.log('DEBUG Oauth3Config.create.init');
console.log(opts);
// TODO get multiple keys at once
return Oauth3.PromiseA.all([
storage.get('dev.providerUri').then(function (val) {
console.log('DEBUG oauth3.init providerUri', val);
me.developerMode = true;
me.providerUri = val;
me.providerUriSet = true;
}, function () {
// ignore
})
, storage.get('dev.apiBaseUri').then(function (val2) {
console.log('DEBUG oauth3.init apiBaseUri', val2);
me.apiBaseUri = val2;
me.apiBaseUriSet = true;
}, function () {
// ignore
})
]).then(function () {
console.log('DEBUG oauth3.init complete');
Object.keys(opts).forEach(function (key) {
if ('appSecret' === key) {
window.alert("[ERROR] appSecret must never be used in a client (browser, mobile, or desktop)");
return;
}
me[key] = opts[key];
});
Object.keys(me.defaults).forEach(function (key) {
if ('undefined' === typeof me[key]) {
me[key] = me.defaults[key];
}
});
if (!me.appId) {
if (me.clientUri || me.clientAgreeTos) {
if (!(me.clientUri && me.clientAgreeTos)) {
console.error("Please set `DaplieApiConfig.clientUri` and `DaplieApiConfig.clientAgreeTos`, try these:");
console.log(" oauth3.org");
console.log(" oauth3.org/tos/draft");
window.alert("[ERROR] `DaplieApiConfig.clientUri` and `DaplieApiConfig.clientAgreeTos` not set."
+ "\nTest with 'oauth3.org' 'oauth3.org/tos/draft'");
}
}
else {
console.error("Please set `DaplieApiConfig.appId`, try this:");
console.log(" TEST_ID_xxxxxxxxxxxxxxxxxxxxxxxx");
console.log(" (NOT YET IMPLEMENTED)");
window.alert("[ERROR] `DaplieApiConfig.appId` not set.\nTest with 'TEST_ID_xxxxxxxxxxxxxxxxxxxxxxxx'");
}
}
console.log('');
if (!me.providerUriSet) {
console.info("Why, hello there Fellow Developer! Would you like to test against the beta server?");
console.log(" " + me.libPrefix + "Daplie.storage.set('dev.providerUri', 'https://betapool.com')");
console.log(" " + me.libPrefix + "Daplie.storage.set('dev.apiBaseUri', 'https://betapool.io')");
console.log('');
}
if (me.providerUriSet || me.apiBaseUriSet) {
console.info("You're in Developer Mode! :-)");
console.log(" UI: " + me.providerUri);
console.log(" API: " + me.apiBaseUri);
console.log('');
console.log("Want to switch back to production mode?");
console.log(" " + me.libPrefix + "Daplie.storage.remove('dev.providerUri'); "
+ me.libPrefix + "Daplie.storage.remove('dev.apiBaseUri');");
console.log('');
}
}).then(function () {
// Note: it is possible for this to fail (i.e. when offline or providerUri is bad).
// Note: for development you can pass in opts.directives (in the format of oauth3.json)
console.log('DEBUG oauth3 discover start');
return Oauth3.discover(me.providerUri, opts).then(function () {
console.log('DEBUG oauth3 discover end');
console.log(me);
return me;
});
});
};
return me;
}
Oauth3Config = {
create: create
};
exports.Oauth3Config = Oauth3Config.Oauth3Config = Oauth3Config;
if ('undefined' !== typeof module) {
module.exports = Oauth3Config;
}
}('undefined' !== typeof exports ? exports : window));