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