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;
 | 
						|
  }]);
 |