Merge branch 'oauth3' of git.daplie.com:Daplie/walnut_launchpad into jon/design2
This commit is contained in:
		
						commit
						58537e1d16
					
				| @ -26,6 +26,7 @@ | |||||||
|     <script src="/assets/oauth3.org/oauth3.core.js" charset="utf-8"></script> |     <script src="/assets/oauth3.org/oauth3.core.js" charset="utf-8"></script> | ||||||
|     <script src="/assets/oauth3.org/oauth3.dns.js" charset="utf-8"></script> |     <script src="/assets/oauth3.org/oauth3.dns.js" charset="utf-8"></script> | ||||||
|     <script src="/assets/oauth3.org/oauth3.domains.js" charset="utf-8"></script> |     <script src="/assets/oauth3.org/oauth3.domains.js" charset="utf-8"></script> | ||||||
|  |     <script src="/js/issuer@oauth3.org.js" charset="utf-8"></script> | ||||||
|     <script src="/js/www@daplie.com.js" charset="utf-8"></script> |     <script src="/js/www@daplie.com.js" charset="utf-8"></script> | ||||||
|     <script src="/js/email@daplie.com.js" charset="utf-8"></script> |     <script src="/js/email@daplie.com.js" charset="utf-8"></script> | ||||||
|     <!-- Angular Modules --> |     <!-- Angular Modules --> | ||||||
| @ -43,6 +44,7 @@ | |||||||
|     <script src="/js/services/auth-service.js" charset="utf-8"></script> |     <script src="/js/services/auth-service.js" charset="utf-8"></script> | ||||||
|     <!-- Controllers --> |     <!-- Controllers --> | ||||||
|     <script src="/js/controllers/login-controller.js" charset="utf-8"></script> |     <script src="/js/controllers/login-controller.js" charset="utf-8"></script> | ||||||
|  |     <script src="/js/controllers/profile-controller.js" charset="utf-8"></script> | ||||||
|     <script src="/js/controllers/home-controller.js" charset="utf-8"></script> |     <script src="/js/controllers/home-controller.js" charset="utf-8"></script> | ||||||
|     <script src="/js/controllers/bolt-controller.js" charset="utf-8"></script> |     <script src="/js/controllers/bolt-controller.js" charset="utf-8"></script> | ||||||
|     <script src="/js/controllers/file-controller.js" charset="utf-8"></script> |     <script src="/js/controllers/file-controller.js" charset="utf-8"></script> | ||||||
|  | |||||||
							
								
								
									
										25
									
								
								js/app.js
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								js/app.js
									
									
									
									
									
								
							| @ -1,4 +1,24 @@ | |||||||
| var app = angular.module('launchpad', ['oauth3.org', 'ui.router', 'LocalStorageModule', 'angucomplete-alt', 'ez.fileTree']); | (function () { | ||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | var angular = window.angular; | ||||||
|  | var OAUTH3 = window.OAUTH3; | ||||||
|  | 
 | ||||||
|  | var app = window.app = angular.module('launchpad', ['oauth3.org', 'ui.router', 'LocalStorageModule', 'angucomplete-alt', 'ez.fileTree']); | ||||||
|  | 
 | ||||||
|  | app.directive('daplieFileChange', function () { | ||||||
|  |   return { | ||||||
|  |     restrict: 'A', | ||||||
|  |     require:"ngModel", | ||||||
|  |     link: function (scope, element, attrs, ngModel) { | ||||||
|  |       element.bind('change', function (event) { | ||||||
|  |         var files = event.target.files; | ||||||
|  |         ngModel.$setViewValue(files[0]); | ||||||
|  |         scope.$eval(attrs.daplieFileChange); | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  | }); | ||||||
| 
 | 
 | ||||||
| app.config(['$stateProvider', '$urlRouterProvider', 'localStorageServiceProvider', | app.config(['$stateProvider', '$urlRouterProvider', 'localStorageServiceProvider', | ||||||
|   function ($stateProvider, $urlRouterProvider, localStorageServiceProvider) { |   function ($stateProvider, $urlRouterProvider, localStorageServiceProvider) { | ||||||
| @ -106,7 +126,7 @@ app.config(['$stateProvider', '$urlRouterProvider', 'localStorageServiceProvider | |||||||
|     views: { |     views: { | ||||||
|       'content@': { |       'content@': { | ||||||
|         templateUrl: 'templates/account-settings.html', |         templateUrl: 'templates/account-settings.html', | ||||||
|         controller: 'loginCtrl as vm', |         controller: 'profileCtrl as vm', | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   }); |   }); | ||||||
| @ -133,3 +153,4 @@ app.run(['$rootScope', '$state', 'Auth', '$location', function($rootScope, $stat | |||||||
|     } |     } | ||||||
|   }); |   }); | ||||||
| }]); | }]); | ||||||
|  | }()); | ||||||
|  | |||||||
| @ -148,5 +148,4 @@ app.controller('loginCtrl', [ | |||||||
|       }); |       }); | ||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
| 
 |  | ||||||
| }]); | }]); | ||||||
|  | |||||||
							
								
								
									
										183
									
								
								js/controllers/profile-controller.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								js/controllers/profile-controller.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,183 @@ | |||||||
|  | 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(); | ||||||
|  | 
 | ||||||
|  | }]); | ||||||
| @ -1,3 +1,7 @@ | |||||||
|  | (function () { | ||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | var app = window.app; | ||||||
| //
 | //
 | ||||||
| // Angular file upload hack
 | // Angular file upload hack
 | ||||||
| //
 | //
 | ||||||
| @ -9,6 +13,7 @@ function analyzeFile(file, vm) { | |||||||
|   return vm; |   return vm; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /* | ||||||
| function handleFiles(ev) { | function handleFiles(ev) { | ||||||
|   var selector = 'js-file-upload'; |   var selector = 'js-file-upload'; | ||||||
|   var $scope; |   var $scope; | ||||||
| @ -29,6 +34,7 @@ function handleFiles(ev) { | |||||||
|   console.log(vm.currentFiles); |   console.log(vm.currentFiles); | ||||||
| } | } | ||||||
| window.document.body.addEventListener('change', handleFiles); | window.document.body.addEventListener('change', handleFiles); | ||||||
|  | */ | ||||||
| 
 | 
 | ||||||
| app.directive('daplieFileChange', [function () { | app.directive('daplieFileChange', [function () { | ||||||
|   return { |   return { | ||||||
| @ -57,10 +63,16 @@ app.controller('websiteCtrl', [ | |||||||
| , function ($scope, $q, Auth, Oauth3, $timeout, $sce) { | , function ($scope, $q, Auth, Oauth3, $timeout, $sce) { | ||||||
| 
 | 
 | ||||||
|   var vm = this; |   var vm = this; | ||||||
|  |   var angular = window.angular; | ||||||
|   vm.domains = []; |   vm.domains = []; | ||||||
|   //vm.unzipPath = '/';
 |   //vm.unzipPath = '/';
 | ||||||
|   vm.uploadPath = '/'; |   vm.uploadPath = '/'; | ||||||
| 
 | 
 | ||||||
|  |   // already validated
 | ||||||
|  |   function domainIsVerified(r) { | ||||||
|  |     return r.verifiedAt || r.mode; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   Auth.api = function (apiname, opts) { |   Auth.api = function (apiname, opts) { | ||||||
|     var els = []; |     var els = []; | ||||||
| 
 | 
 | ||||||
| @ -169,13 +181,13 @@ app.controller('websiteCtrl', [ | |||||||
| 
 | 
 | ||||||
|   vm._uploadFileVm = function (pkg, opts) { |   vm._uploadFileVm = function (pkg, opts) { | ||||||
|     return vm._uploadFile(pkg, { |     return vm._uploadFile(pkg, { | ||||||
|       domain: vm.currentHost |       domain: opts.currentHost | ||||||
|     , tld: vm.domain.tld |     , tld: opts.domain.tld | ||||||
|     , sld: vm.domain.sld |     , sld: opts.domain.sld | ||||||
|     , sub: vm.domain.sub |     , sub: opts.domain.sub | ||||||
|     , newFile: vm.currentFiles[0] |     , newFile: opts.newFile | ||||||
|     , uploadPath: vm.uploadPath |     , uploadPath: opts.uploadPath | ||||||
|     , progress: vm |     , progress: opts | ||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
|   vm._uploadFile = function (pkg, opts) { |   vm._uploadFile = function (pkg, opts) { | ||||||
| @ -215,6 +227,7 @@ app.controller('websiteCtrl', [ | |||||||
|     var sld; |     var sld; | ||||||
|     var tld; |     var tld; | ||||||
| 
 | 
 | ||||||
|  |     /* | ||||||
|     //vm.unlock('webpreneur');
 |     //vm.unlock('webpreneur');
 | ||||||
|     if (!vm.currentFiles || !vm.currentFiles.length) { |     if (!vm.currentFiles || !vm.currentFiles.length) { | ||||||
|       window.alert('No files chosen.'); |       window.alert('No files chosen.'); | ||||||
| @ -224,6 +237,11 @@ app.controller('websiteCtrl', [ | |||||||
|       window.alert('Too many files chosen.'); |       window.alert('Too many files chosen.'); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|  |     */ | ||||||
|  |     if (!vm.newFile) { | ||||||
|  |       window.alert('No file chosen.'); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|     if (!vm.currentHost) { |     if (!vm.currentHost) { | ||||||
|       window.alert('No hostname chosen.'); |       window.alert('No hostname chosen.'); | ||||||
|       return; |       return; | ||||||
| @ -246,9 +264,8 @@ app.controller('websiteCtrl', [ | |||||||
|       sub = parts.join('.'); |       sub = parts.join('.'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // already validated
 |  | ||||||
|     if (vm.sites.some(function (r) { |     if (vm.sites.some(function (r) { | ||||||
|       return -1 !== ('.' + vm.currentHost).indexOf(('.' + r.domain)); |       return (-1 !== ('.' + vm.currentHost).indexOf(('.' + r.domain))) && domainIsVerified(r); | ||||||
|     })) { |     })) { | ||||||
|       vm._uploadFileVm(pkg, vm); |       vm._uploadFileVm(pkg, vm); | ||||||
|       return; |       return; | ||||||
| @ -328,7 +345,7 @@ app.controller('websiteCtrl', [ | |||||||
|       window.open(result.data.url); |       window.open(result.data.url); | ||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
|   vm.Sites.remove = function (r) { |   vm.Sites.remove = function (r, opts) { | ||||||
|     if (!window.confirm("Delete files for this site?")) { |     if (!window.confirm("Delete files for this site?")) { | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| @ -340,7 +357,8 @@ app.controller('websiteCtrl', [ | |||||||
|     , tld: r.tld |     , tld: r.tld | ||||||
|     , sld: r.sld |     , sld: r.sld | ||||||
|     //, sub: vm.record.sub
 |     //, sub: vm.record.sub
 | ||||||
|     //, path: vm.uploadPath
 |     , path: opts.path || r.path | ||||||
|  |     , confirm: opts.confirm || r.confirm | ||||||
|     }).then(function (result) { |     }).then(function (result) { | ||||||
|       window.alert(JSON.stringify(result)); |       window.alert(JSON.stringify(result)); | ||||||
|     }); |     }); | ||||||
| @ -519,6 +537,9 @@ app.controller('websiteCtrl', [ | |||||||
|         }); |         }); | ||||||
|       }); |       }); | ||||||
|     })).then(function () { |     })).then(function () { | ||||||
|  |       sites.forEach(function (site) { | ||||||
|  |         site.pending = !domainIsVerified(site); | ||||||
|  |       }); | ||||||
|       console.log('[listSites] sites:'); |       console.log('[listSites] sites:'); | ||||||
|       console.log(sites); |       console.log(sites); | ||||||
|       vm.sites = sites; |       vm.sites = sites; | ||||||
| @ -594,6 +615,8 @@ app.controller('websiteCtrl', [ | |||||||
| 
 | 
 | ||||||
| }]); | }]); | ||||||
| 
 | 
 | ||||||
|  | }()); | ||||||
|  | 
 | ||||||
| app.filter('stringify', function() { | app.filter('stringify', function() { | ||||||
|   function getSerialize (fn, decycle) { |   function getSerialize (fn, decycle) { | ||||||
|     var seen = [], keys = []; |     var seen = [], keys = []; | ||||||
|  | |||||||
							
								
								
									
										78
									
								
								js/issuer@oauth3.org.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								js/issuer@oauth3.org.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | |||||||
|  | (function (exports) { | ||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | var OAUTH3 = exports.OAUTH3 = exports.OAUTH3 || require('./oauth3.core.js').OAUTH3; | ||||||
|  | 
 | ||||||
|  | OAUTH3._pkgs['issuer@oauth3.org'] = { | ||||||
|  |   update: function (opts) { | ||||||
|  |     var providerUri = opts.audience; | ||||||
|  |     var session = opts.session; | ||||||
|  | 
 | ||||||
|  |     return OAUTH3.request({ | ||||||
|  |       method: 'POST' | ||||||
|  |     , url: OAUTH3.url.normalize(providerUri) | ||||||
|  |         + '/api/issuer@oauth3.org/acl/profile/' | ||||||
|  |     , session: session | ||||||
|  |     , data: { | ||||||
|  |         displayName: opts.displayName | ||||||
|  |       , avatarUrl: opts.avatarUrl | ||||||
|  |       , firstName: opts.firstName | ||||||
|  |       , lastName: opts.lastName | ||||||
|  |       , primaryEmail: opts.primaryEmail | ||||||
|  |       , primaryPhone: opts.primaryPhone | ||||||
|  |       } | ||||||
|  |     }).then(function (result) { | ||||||
|  |       return result; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | , get: function (opts) { | ||||||
|  |     var providerUri = opts.audience; | ||||||
|  |     var session = opts.session; | ||||||
|  | 
 | ||||||
|  |     return OAUTH3.request({ | ||||||
|  |       method: 'GET' | ||||||
|  |     , url: OAUTH3.url.normalize(providerUri) | ||||||
|  |         + '/api/issuer@oauth3.org/acl/profile/' | ||||||
|  |     , session: session | ||||||
|  |     }).then(function (result) { | ||||||
|  |       return result; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | , requestContact: function (opts) { | ||||||
|  |     var providerUri = opts.audience; | ||||||
|  |     var session = opts.session; | ||||||
|  | 
 | ||||||
|  |     return OAUTH3.request({ | ||||||
|  |       method: 'POST' | ||||||
|  |     , url: OAUTH3.url.normalize(providerUri) | ||||||
|  |         + '/api/issuer@oauth3.org/acl/contact_nodes/' | ||||||
|  |     , session: session | ||||||
|  |     , data: { | ||||||
|  |         type: opts.type | ||||||
|  |       , node: opts.node | ||||||
|  |       } | ||||||
|  |     }).then(function (result) { | ||||||
|  |       return result; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | , verifyContact: function (opts) { | ||||||
|  |     var providerUri = opts.audience; | ||||||
|  |     var session = opts.session; | ||||||
|  | 
 | ||||||
|  |     return OAUTH3.request({ | ||||||
|  |       method: 'POST' | ||||||
|  |     , url: OAUTH3.url.normalize(providerUri) | ||||||
|  |         + '/api/issuer@oauth3.org/acl/contact_nodes/' | ||||||
|  |     , session: session | ||||||
|  |     , data: { | ||||||
|  |         type: opts.type | ||||||
|  |       , node: opts.node | ||||||
|  |       , challenge: opts.challenge | ||||||
|  |       } | ||||||
|  |     }).then(function (result) { | ||||||
|  |       return result; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | }('undefined' !== typeof exports ? exports : window)); | ||||||
| @ -1,4 +1,4 @@ | |||||||
| <h1 class="text-center">Account Settings</h1> | <h1 class="text-center">Profile Settings</h1> | ||||||
| <div class="row"> | <div class="row"> | ||||||
|   <div class="col-md-4 col-sm-6 col-xs-12"> |   <div class="col-md-4 col-sm-6 col-xs-12"> | ||||||
|     <div class="text-center"> |     <div class="text-center"> | ||||||
| @ -9,22 +9,34 @@ | |||||||
|   </div> |   </div> | ||||||
|   <div class="col-md-8 col-sm-6 col-xs-12 personal-info"> |   <div class="col-md-8 col-sm-6 col-xs-12 personal-info"> | ||||||
|     <form class="form-horizontal" role="form"> |     <form class="form-horizontal" role="form"> | ||||||
|  |       <div class="form-group"> | ||||||
|  |         <label class="col-lg-3 control-label">Display name:</label> | ||||||
|  |         <div class="col-lg-8"> | ||||||
|  |           <input class="form-control" type="text" ng-model="vm.account.displayName"> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|       <div class="form-group"> |       <div class="form-group"> | ||||||
|         <label class="col-lg-3 control-label">First name:</label> |         <label class="col-lg-3 control-label">First name:</label> | ||||||
|         <div class="col-lg-8"> |         <div class="col-lg-8"> | ||||||
|           <input class="form-control" type="text"> |           <input class="form-control" type="text" ng-model="vm.account.firstName"> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <div class="form-group"> |       <div class="form-group"> | ||||||
|         <label class="col-lg-3 control-label">Last name:</label> |         <label class="col-lg-3 control-label">Last name:</label> | ||||||
|         <div class="col-lg-8"> |         <div class="col-lg-8"> | ||||||
|           <input class="form-control" type="text"> |           <input class="form-control" type="text" ng-model="vm.account.lastName"> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <div class="form-group"> |       <div class="form-group"> | ||||||
|         <label class="col-lg-3 control-label">Email:</label> |         <label class="col-lg-3 control-label">Email:</label> | ||||||
|         <div class="col-lg-8"> |         <div class="col-lg-8"> | ||||||
|           <input class="form-control" type="email" value="{{ vm.session.subject }}" disabled> |           <input class="form-control" type="email" ng-model="vm.account.primaryEmail"> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |         <label class="col-lg-3 control-label"> </label> | ||||||
|  |         <div class="col-lg-8"> | ||||||
|  |           <button class="btn btn-primary form-control" ng-click="vm.Profile.update(vm.account)">Save</button> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user