forked from coolaj86/walnut.js
		
	
		
			
	
	
		
			142 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			142 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @ngdoc service
							 | 
						||
| 
								 | 
							
								 * @name yololiumApp.LdsAccount
							 | 
						||
| 
								 | 
							
								 * @description
							 | 
						||
| 
								 | 
							
								 * # LdsAccount
							 | 
						||
| 
								 | 
							
								 * Service in the yololiumApp.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								angular.module('yololiumApp')
							 | 
						||
| 
								 | 
							
								  .service('LdsAccount', [
							 | 
						||
| 
								 | 
							
								    '$q'
							 | 
						||
| 
								 | 
							
								  , '$http'
							 | 
						||
| 
								 | 
							
								  , '$modal'
							 | 
						||
| 
								 | 
							
								  , 'DaplieApiConfig'
							 | 
						||
| 
								 | 
							
								  , 'DaplieApiRequest'
							 | 
						||
| 
								 | 
							
								  , function LdsAccount($q, $http, $modal, DaplieApiConfig, DaplieApiRequest) {
							 | 
						||
| 
								 | 
							
								    // AngularJS will instantiate a singleton by calling "new" on this function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var me = this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /*
							 | 
						||
| 
								 | 
							
								    function getWardClerkInfo(session, opts) {
							 | 
						||
| 
								 | 
							
								      // TODO check to see if this user is in the system
							 | 
						||
| 
								 | 
							
								      // if so, present them with the information to get
							 | 
						||
| 
								 | 
							
								      // their record number from the ward clerk
							 | 
						||
| 
								 | 
							
								      return $http.get(StApi.apiPrefix + '/ldsconnectv2/request-mrn/:emailOrPhone')q.when();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    me.showVerificationModal = function (account, opts) {
							 | 
						||
| 
								 | 
							
								      return $modal.open({
							 | 
						||
| 
								 | 
							
								        templateUrl: '/views/verify-contact-details.html'
							 | 
						||
| 
								 | 
							
								      , controller: 'VerifyContactDetailsController as VCDC'
							 | 
						||
| 
								 | 
							
								      , backdrop: 'static'
							 | 
						||
| 
								 | 
							
								      , keyboard: false
							 | 
						||
| 
								 | 
							
								      , resolve: {
							 | 
						||
| 
								 | 
							
								          myLdsAccount: function () {
							 | 
						||
| 
								 | 
							
								            return me;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        , ldsAccountObject: function () {
							 | 
						||
| 
								 | 
							
								            return account;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        , ldsAccountOptions: function () {
							 | 
						||
| 
								 | 
							
								            return opts;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }).result;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    me.showAccountModal = function (session, profile, opts) {
							 | 
						||
| 
								 | 
							
								      return DaplieApiRequest.profile(session).then(function () {
							 | 
						||
| 
								 | 
							
								        return $modal.open({
							 | 
						||
| 
								 | 
							
								          templateUrl: '/views/lds-account.html'
							 | 
						||
| 
								 | 
							
								        , controller: 'LdsAccountController as LAC'
							 | 
						||
| 
								 | 
							
								        , backdrop: 'static'
							 | 
						||
| 
								 | 
							
								        , keyboard: false
							 | 
						||
| 
								 | 
							
								        , resolve: {
							 | 
						||
| 
								 | 
							
								            realLdsAccount: function () {
							 | 
						||
| 
								 | 
							
								              return me;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          , mySession: function () {
							 | 
						||
| 
								 | 
							
								              return session;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          , myProfile: function () {
							 | 
						||
| 
								 | 
							
								              return profile;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          , myOptions: function () {
							 | 
						||
| 
								 | 
							
								              return opts;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }).result;
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    me.verifyAccount = function (account, profile, opts) {
							 | 
						||
| 
								 | 
							
								      var recheckTime = (3 * 30 * 24 * 60 * 60 * 1000);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var fresh;
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								      // TODO ISO timestamps
							 | 
						||
| 
								 | 
							
								      fresh = Date.now() - (new Date(account.userVerifiedAt).valueOf()) < recheckTime;
							 | 
						||
| 
								 | 
							
								      if (fresh) {
							 | 
						||
| 
								 | 
							
								        return $q.when(account);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //opts.ldsStaleLoginInfo = login;
							 | 
						||
| 
								 | 
							
								      //return true;
							 | 
						||
| 
								 | 
							
								      // ask the user to re-verify their info
							 | 
						||
| 
								 | 
							
								      return me.showAccountModal(account, profile, opts).then(function () {
							 | 
						||
| 
								 | 
							
								        return me.verifyAccount(account, profile, opts);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    me.getCode = function (account, type, node) {
							 | 
						||
| 
								 | 
							
								      return $http.post(DaplieApiConfig.providerUri + '/api/ldsio/' + account.id + '/verify/code', {
							 | 
						||
| 
								 | 
							
								        type: type
							 | 
						||
| 
								 | 
							
								      , node: node
							 | 
						||
| 
								 | 
							
								      }).then(function (result) {
							 | 
						||
| 
								 | 
							
								        if (result.data.error) {
							 | 
						||
| 
								 | 
							
								          return $q.reject(result.data.error);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return result.data;
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    me.validateCode = function (account, type, node, uuid, code) {
							 | 
						||
| 
								 | 
							
								      return $http.post(DaplieApiConfig.providerUri + '/api/ldsio/' + account.id + '/verify/code/validate', {
							 | 
						||
| 
								 | 
							
								        type: type
							 | 
						||
| 
								 | 
							
								      , node: node
							 | 
						||
| 
								 | 
							
								      , uuid: uuid
							 | 
						||
| 
								 | 
							
								      , code: code
							 | 
						||
| 
								 | 
							
								      }).then(function (result) {
							 | 
						||
| 
								 | 
							
								        if (result.data.error) {
							 | 
						||
| 
								 | 
							
								          return $q.reject(result.data.error);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return result.data;
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    me.isFresh = function (iso) {
							 | 
						||
| 
								 | 
							
								      var now = Date.now();
							 | 
						||
| 
								 | 
							
								      var date = new Date(iso).valueOf();
							 | 
						||
| 
								 | 
							
								      // 3 months - 3 days
							 | 
						||
| 
								 | 
							
								      var staleTime = (3 * 30 * 24 * 60 * 60 * 1000) - (3 * 24 * 60 * 60 * 1000);
							 | 
						||
| 
								 | 
							
								      var fresh = date && (now - date < staleTime);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return fresh;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    me.ensureVerified = function (account, opts) {
							 | 
						||
| 
								 | 
							
								      if (me.isFresh(account.emailVerifiedAt) && me.isFresh(account.phoneVerifiedAt)) {
							 | 
						||
| 
								 | 
							
								        return $q.when();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return me.showVerificationModal(account, opts);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return me;
							 | 
						||
| 
								 | 
							
								  }]);
							 |