diff --git a/js/app.js b/js/app.js index 56ac1c6..61a9353 100644 --- a/js/app.js +++ b/js/app.js @@ -18,7 +18,7 @@ app.config(['$stateProvider', '$urlRouterProvider', 'localStorageServiceProvider views: { 'header': { templateUrl: '/templates/partials/header.html', - controller: 'HomeController', + controller: 'SignInController', controllerAs: 'vm' }, 'menu': { @@ -34,7 +34,7 @@ app.config(['$stateProvider', '$urlRouterProvider', 'localStorageServiceProvider views: { 'content@': { templateUrl: 'templates/home.html', - controller: 'HomeController', + controller: 'SignInController', controllerAs: 'vm' } } diff --git a/js/controllers/homeController.js b/js/controllers/homeController.js index 412a467..74345ef 100644 --- a/js/controllers/homeController.js +++ b/js/controllers/homeController.js @@ -17,4 +17,5 @@ app.controller('HomeController', [ return profile.email; }; + throw new Error('loaded home controller'); }]); diff --git a/js/controllers/signInController.js b/js/controllers/signInController.js index 95ac910..1d59a56 100644 --- a/js/controllers/signInController.js +++ b/js/controllers/signInController.js @@ -9,10 +9,22 @@ app.controller('SignInController', [ vm.timers = {}; vm.defaultIssuer = 'provider.' + location.host.replace(/^cloud\./, ''); + vm.session = Auth.session; + vm.sessions = Auth.sessions; + + vm.showAdvanced = true; vm.toggleAdvanced = function () { + vm.showAdvanced = !vm.showAdvanced; vm.independentIssuer = !vm.independentIssuer; } + vm.notification = true; + + vm.signOut = function () { + Auth.signOut(); + $location.path('/splash-page'); + }; + vm._setSubject = function (subject) { vm.currentSubject = vm.newSubject; subject = subject || vm.newSubject; @@ -69,14 +81,14 @@ app.controller('SignInController', [ }; vm.selectSession = function (session) { + vm.session = session; vm.oauth3.init({ location: location - , issuer: vm.currentIssuer - , audience: vm.currentIssuer + , issuer: session.issuer + , audience: session.audience || session.issuer }); }; - vm.oauth3.sessions = vm.oauth3.sessions || []; vm.instaauth = function () { return vm._setSubject().then(function () { return vm._setIssuer().then(function () { @@ -91,11 +103,9 @@ app.controller('SignInController', [ 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); + Auth.add(session); }, function (err) { console.log('auth error'); console.log(err); @@ -106,13 +116,7 @@ app.controller('SignInController', [ vm.setIssuer(vm.defaultIssuer); vm.signIn = function () { - vm.auth().then(function () { - var userInfo = { - email: vm.currentSubject, - name: 'Johnny Cash' - }; - Auth.setUser(userInfo); - }); + vm.auth(); }; }]); diff --git a/js/controllers/websiteController.js b/js/controllers/websiteController.js index b5d39ec..a2759ed 100644 --- a/js/controllers/websiteController.js +++ b/js/controllers/websiteController.js @@ -1,4 +1,4 @@ -app.controller('WebsiteController', [ 'azp@oauth3.org', function ($scope, Oauth3) { +app.controller('WebsiteController', [ '$scope', 'azp@oauth3.org', function ($scope, Oauth3) { var vm = this; vm.oauth3 = Oauth3.oauth3; diff --git a/js/services/auth.js b/js/services/auth.js index 16afea1..17abe97 100644 --- a/js/services/auth.js +++ b/js/services/auth.js @@ -1,26 +1,66 @@ app.factory('Auth', [ '$rootScope', 'localStorageService', '$location', 'azp@oauth3.org' , function($rootScope, localStorageService, $location, Oauth3) { - var user; - return { - setUser: function(currentUser){ - user = currentUser; + var dapSession = 'dap-session'; + var dapSessions = 'dap-sessions'; + + var Auth = { + setUser: function (currentUser) { if (redirectedURL === '/splash-page') { $location.path('/home'); } else { $location.path('/' + redirectedURL); } - user = localStorageService.set('userAuth', JSON.stringify(currentUser)); + localStorageService.set('userAuth', JSON.stringify(currentUser)); }, - isLoggedIn: function(){ - // TODO check sessions instead - user = JSON.parse(localStorageService.get('userAuth')); - return (user) ? user : false; + isLoggedIn: function () { + Auth.restore(); + + return Auth.session || false; }, - getProfile: function(profile) { - profile = user; - return profile; + getProfile: function (profile) { + Auth.restore(); + + return Auth.session || false; } + , add: function (session) { + var obj = JSON.parse(localStorage.getItem(dapSessions) || 'null') || {}; + var dapName = 'dap-' + session.subject + '|' + session.issuer; + + console.log('session', session); + + Auth.session = session; + Auth.sessions.push(session); + + localStorage.setItem(dapName, JSON.stringify(session)); + localStorage.setItem(dapSession, dapName); + obj[dapName] = true; + localStorage.setItem(dapSessions, JSON.stringify(obj)); + } + , restore: function () { + var dapName = localStorage.getItem(dapSession); + Auth.sessions.length = 0; // don't overwrite with a new array, keep original references + + (Object.keys(JSON.parse(localStorage.getItem(dapSessions) || 'null') || {})).forEach(function (name) { + var session = JSON.parse(localStorage.getItem(name) || 'null'); + + if (session) { + session.email = session.subject; + } + + if (dapName === name) { + Auth.session = session; + } + + Auth.sessions.push(session); + }); + + return Auth.session; + } + , sessions: [] + , session: null }; + + return Auth; }]); diff --git a/templates/partials/header.html b/templates/partials/header.html index 8f26528..9f4fbfd 100644 --- a/templates/partials/header.html +++ b/templates/partials/header.html @@ -19,13 +19,28 @@