184 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			184 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | app.controller('profileCtrl', [ | ||
|  |   '$scope', '$timeout', 'Auth', '$location', 'localStorageService', '$rootScope', 'azp@oauth3.org', '$stateParams' | ||
|  | , function ($scope, $timeout, Auth, $location, localStorageService, $rootScope, Oauth3, $stateParams) { | ||
|  | 
 | ||
|  |   var vm = this; | ||
|  | 
 | ||
|  |   vm.independentIssuer = false; | ||
|  |   // TODO reuse most recent issuer?
 | ||
|  |   vm.newOauth3 = Oauth3.create(location); | ||
|  |   vm.timers = {}; | ||
|  |   vm.defaultIssuer = 'provider.' + location.host.replace(/^cloud\./, ''); | ||
|  | 
 | ||
|  |   vm.Auth = Auth; | ||
|  |   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._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) { | ||
|  |       vm.currentIssuer = url; | ||
|  |       vm.issuerName = url; | ||
|  | 
 | ||
|  |       return vm.newOauth3.setIdentityProvider(url).then(function (deets) { | ||
|  |         vm.newOauth3.setResourceProvider(url); | ||
|  |         vm.spinner = false; | ||
|  |         // TODO add icon and name to directives
 | ||
|  |       }); | ||
|  |     }, function () { | ||
|  |       console.log("oauth3 discover timeout: No dice, no change for '" + url + "'"); | ||
|  |       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.newOauth3.setResourceProvider(url); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.selectSession = function (session) { | ||
|  |     vm.xauth = true; | ||
|  |     vm.session = session; | ||
|  |     return Auth.select(session).then(function (oauth3) { | ||
|  |       vm.xauth = false; | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   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; | ||
|  |     return vm.newOauth3.authenticate({ | ||
|  |       subject: subject | ||
|  |     , scope: [ 'domains@oauth3.org', 'domains', 'dns@oauth3.org', 'dns', 'www@daplie.com' ] | ||
|  |     }).then(function (session) { | ||
|  |       session.subject = subject; | ||
|  |       session.issuer = issuer; | ||
|  |       Auth.add(session); | ||
|  |       if ($rootScope.redirectedURL === '/splash-page') { | ||
|  |         $location.path('/home'); | ||
|  |       } else { | ||
|  |         $location.path('/' + $rootScope.redirectedURL); | ||
|  |       } | ||
|  |     }, function (err) { | ||
|  |       console.error('auth error'); | ||
|  |       console.error(err); | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.newIssuer = vm.defaultIssuer; | ||
|  |   vm.setIssuer(vm.defaultIssuer); | ||
|  | 
 | ||
|  |   vm.getSession = function() { | ||
|  |     return Auth.select(Auth.session); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.initListLoggedInProfiles = function () { | ||
|  |     vm.activeProfiles = Auth.getActiveSessions(); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.signIn = function () { | ||
|  |     vm.auth(); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.masterLogOut = function () { | ||
|  |     localStorage.clear(); | ||
|  |     $location.path('/splash-page'); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.signOut = function () { | ||
|  |     vm.getSession().then(function(){ | ||
|  |       // TODO the sign-out url for each account should be fixed.
 | ||
|  |       return Auth.signOut().then(function () { | ||
|  |         if (Auth.sessions.length === 0) { | ||
|  |           $location.path('/splash-page'); | ||
|  |           return; | ||
|  |         } | ||
|  |         window.alert("You are still logged in with other accounts."); | ||
|  |       }); | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.Profile = {}; | ||
|  |   vm.Profile.update = function (a) { | ||
|  |     console.log('Click click click!!!'); | ||
|  |     var pkg = Auth.oauth3.pkg('issuer@oauth3.org'); | ||
|  | 
 | ||
|  |     return pkg.update({ | ||
|  |       displayName: a.displayName | ||
|  |     , avatarUrl: a.avatarUrl | ||
|  |     , firstName: a.firstName | ||
|  |     , lastName: a.lastName | ||
|  |     //, names: a.names
 | ||
|  |     , primaryEmail: a.primaryEmail // TODO make a combobox of available emails (and require confirm before making primary)
 | ||
|  |     , primaryPhone: a.primaryPhone | ||
|  |     }).then(function (result) { | ||
|  |       window.alert(JSON.stringify(result)); | ||
|  |       // TODO use iframe to initiate download?
 | ||
|  |       vm.account = result.data; | ||
|  |     }); | ||
|  |   }; | ||
|  |   vm.Profile.get = function () { | ||
|  |     var pkg = Auth.oauth3.pkg('issuer@oauth3.org'); | ||
|  | 
 | ||
|  |     return pkg.get().then(function (result) { | ||
|  |       console.log(result.data); | ||
|  |       vm.account = result.data; | ||
|  |       vm.profile = result.data; | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   vm.Profile.get(); | ||
|  | 
 | ||
|  | }]); |