walnut_launchpad.html/js/controllers/signInController.js

119 lines
3.3 KiB
JavaScript

app.controller('SignInController', [
'$scope', '$timeout', 'Auth', '$location', 'localStorageService', '$rootScope', 'azp@oauth3.org'
, function ($scope, $timeout, Auth, $location, localStorageService, $rootScope, Oauth3) {
var vm = this;
vm.independentIssuer = false;
vm.oauth3 = Oauth3.oauth3 = Oauth3.oauth3 || Oauth3.create(location);
vm.timers = {};
vm.defaultIssuer = 'provider.' + location.host.replace(/^cloud\./, '');
vm.toggleAdvanced = function () {
vm.independentIssuer = !vm.independentIssuer;
}
vm._setSubject = function (subject) {
vm.currentSubject = vm.newSubject;
subject = subject || vm.newSubject;
var issuer = subject.replace(/.*@/, '');
if (vm.independentIssuer) {
return $timeout(function () { return; }, 0);
}
return Oauth3.discover(issuer, { client_uri: Oauth3.clientUri(location) }).then(function (deets) {
return vm._setIssuer(issuer);
}, function () {
// ignore error
});
};
vm.setSubject = function (subject) {
$timeout.cancel(vm.timers.subject);
vm.timers.subject = $timeout(function () {
vm._setSubject(subject);
}, 300);
};
vm._setIssuer = function (url) {
vm.spinner = true;
url = (url || vm.newIssuer).replace(/.*@/, '');
if (!url) {
url = vm.defaultIssuer;
}
return Oauth3.discover(url, { client_uri: Oauth3.clientUri(location) }).then(function (deets) {
console.log('discover', url);
console.log(deets);
vm.currentIssuer = url;
vm.issuerName = url;
return vm.oauth3.setIdentityProvider(url).then(function (deets) {
vm.oauth3.setResourceProvider(url);
vm.spinner = false;
// TODO add icon and name to directives
console.log(deets);
});
}, function () {
console.log('oauth3 timeout: No dice, no change');
vm.spinner = false;
});
};
vm.setIssuer = function (url) {
$timeout.cancel(vm.timers.issuer);
vm.timers.issuer = $timeout(function () {
vm._setIssuer(url);
}, 300);
};
vm.setAudience = function (url) {
url = url || vm.audienceUrl;
vm.audienceName = url;
vm.oauth3.setResourceProvider(url);
};
vm.selectSession = function (session) {
vm.oauth3.init({
location: location
, issuer: vm.currentIssuer
, audience: vm.currentIssuer
});
};
vm.oauth3.sessions = vm.oauth3.sessions || [];
vm.instaauth = function () {
return vm._setSubject().then(function () {
return vm._setIssuer().then(function () {
return vm.auth();
});
});
};
vm.auth = function () {
var subject = vm.currentSubject;
var issuer = vm.issuerName;
vm.oauth3.authenticate({
subject: subject
, scope: [ 'domains@oauth3.org', 'domains', 'dns@oauth3.org', 'dns', 'www@daplie.com' ]
}).then(function (session) {
console.log('session', session);
vm.hasSession = session;
session.subject = subject;
session.issuer = issuer;
vm.oauth3.sessions.push(session);
}, function (err) {
console.log('auth error');
console.log(err);
});
};
vm.newIssuer = vm.defaultIssuer;
vm.setIssuer(vm.defaultIssuer);
vm.signIn = function () {
vm.auth().then(function () {
var userInfo = {
email: vm.currentSubject,
name: 'Johnny Cash'
};
Auth.setUser(userInfo);
});
};
}]);