walnut.js/lib/com.daplie.walnut/scripts/controllers/verify-contact-details.js

104 lines
2.9 KiB
JavaScript
Raw Normal View History

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