forked from coolaj86/walnut.js
		
	
		
			
	
	
		
			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();
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }]);
							 |