104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | angular.module('yololiumApp') | ||
|  |   .controller('VerifyContactDetailsController', [ | ||
|  |     '$scope' | ||
|  |   , '$q' | ||
|  |   , '$modalInstance' | ||
|  |   , 'myLdsAccount' | ||
|  |   , 'ldsAccountObject' | ||
|  |   , 'ldsAccountOptions' | ||
|  |   , function ( | ||
|  |     $scope | ||
|  |   , $q | ||
|  |   , $modalInstance | ||
|  |   , myLdsAccount | ||
|  |   , account | ||
|  |     /* | ||
|  |   , opts | ||
|  |     */ | ||
|  |   ) { | ||
|  |     var scope = this; | ||
|  | 
 | ||
|  |     scope.phone = account.phone; | ||
|  |     scope.email = account.email; | ||
|  | 
 | ||
|  |     scope.codes = {}; | ||
|  |     scope.validationErrorMessages = {}; | ||
|  | 
 | ||
|  |     scope.codes.phone = localStorage.getItem('phoneCode'); | ||
|  |     scope.codes.email = localStorage.getItem('emailCode'); | ||
|  | 
 | ||
|  |     scope.sendCode = function (type, node) { | ||
|  |       // TODO needs to get expire time (and store in localStorage)
 | ||
|  |       myLdsAccount.getCode(account, type, node).then(function (data) { | ||
|  |         scope.codes[type] = data.uuid; | ||
|  |         localStorage.setItem(type + 'Code', data.uuid); | ||
|  |       }, function (err) { | ||
|  |         window.alert(err.message || 'unknown error'); | ||
|  |       }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     //scope.validateCode = function (type, node, uuid, code);
 | ||
|  |     scope.validateCode = function (code) { | ||
|  |       var type; | ||
|  |       var node; | ||
|  |       var uuid; | ||
|  |       var rePhoneCode = /^\s*(\d{3})[-\s]*(\d{3})\s*$/; | ||
|  |       var reEmailCode = /^\s*(\w+)[-\s]+(\w+)[-\s]+(\d+)\s*$/; | ||
|  |       var m; | ||
|  |       code = code.trim(); | ||
|  | 
 | ||
|  |       if (rePhoneCode.test(code)) { | ||
|  |         m = code.match(rePhoneCode); | ||
|  |         type = 'phone'; | ||
|  |         node = account.phone; | ||
|  |         uuid = scope.codes[type]; | ||
|  |         code = m[1] + '-' + m[2]; | ||
|  |       } else if (reEmailCode.test(code)) { | ||
|  |         m = code.match(reEmailCode); | ||
|  |         type = 'email'; | ||
|  |         node = account.email; | ||
|  |         uuid = scope.codes[type]; | ||
|  |         code = m[1] + '-' + m[2] + '-' + m[3]; | ||
|  |       } else { | ||
|  |         throw new Error("unexpected code type"); | ||
|  |       } | ||
|  | 
 | ||
|  |       function showError(err) { | ||
|  |         console.error("[ERROR] in verify contact:"); | ||
|  |         console.log(err); | ||
|  |         scope.validationErrorMessages[type] = err.message | ||
|  |           || (type + ' code validation failed, Double check and try again') | ||
|  |           ; | ||
|  |       } | ||
|  | 
 | ||
|  |       return myLdsAccount.validateCode(account, type, node, uuid, code).then(function (data) { | ||
|  |         if (data.error) { | ||
|  |           scope.validationErrorMessages[type] = "Code didn't validate"; | ||
|  |           showError(data.error); | ||
|  |           return; | ||
|  |         } | ||
|  | 
 | ||
|  |         if (!data.validated) { | ||
|  |           console.error("[ERROR] in verify contact validate:"); | ||
|  |           console.error(data); | ||
|  |           scope.validationErrorMessages[type] = "Code didn't validate"; | ||
|  |           showError({ message: "Code didn't validate" }); | ||
|  |           return; | ||
|  |         } | ||
|  | 
 | ||
|  |         scope.validationErrorMessages[type] = ''; | ||
|  |         localStorage.removeItem(type + 'Code'); | ||
|  | 
 | ||
|  |         scope[type + 'Verified'] = true; | ||
|  |         account[type + 'VerifiedAt'] = new Date().toISOString(); | ||
|  |       }, showError); | ||
|  |     }; | ||
|  | 
 | ||
|  |     scope.verifyAccount = function () { | ||
|  |       // TODO refresh session StSession.get({ expire: true })
 | ||
|  |       $modalInstance.close(); | ||
|  |     }; | ||
|  |   }]); |