diff --git a/index.html b/index.html
index e261d9cc9..d0b9b38a4 100644
--- a/index.html
+++ b/index.html
@@ -53,6 +53,7 @@
Network Error.
Attempting to reconnect..
+ Resend
Email not confirmed.
diff --git a/js/controllers/index.js b/js/controllers/index.js
index 285506ee9..8e1f4e689 100644
--- a/js/controllers/index.js
+++ b/js/controllers/index.js
@@ -1,10 +1,22 @@
'use strict';
-angular.module('copayApp.controllers').controller('IndexController', function($scope, go, isCordova) {
+angular.module('copayApp.controllers').controller('IndexController', function($scope, go, isCordova, identityService, notification) {
$scope.init = function() {
};
+ $scope.resendVerificationEmail = function() {
+ identityService.resendVerificationEmail(function(err) {
+ if (err) {
+ notification.error('Could not send email', 'There was a problem sending the verification email.');
+ setTimeout(function() {
+ $scope.$digest();
+ }, 1);
+ return;
+ }
+ });
+ };
+
$scope.swipe = function(invert) {
go.swipe(invert);
};
diff --git a/js/models/Identity.js b/js/models/Identity.js
index 60fc2ecd2..4ed14f0db 100644
--- a/js/models/Identity.js
+++ b/js/models/Identity.js
@@ -105,6 +105,15 @@ Identity.create = function(opts, cb) {
});
};
+Identity.prototype.resendVerificationEmail = function (cb) {
+ var self = this;
+
+ preconditions.checkArgument(_.isFunction(cb));
+ preconditions.checkState(_.isFunction(self.storage.resendVerificationEmail));
+
+ self.storage.resendVerificationEmail(cb);
+};
+
/**
* Open an Identity from the given storage.
diff --git a/js/plugins/EncryptedInsightStorage.js b/js/plugins/EncryptedInsightStorage.js
index ff994be5c..ce377796c 100644
--- a/js/plugins/EncryptedInsightStorage.js
+++ b/js/plugins/EncryptedInsightStorage.js
@@ -16,6 +16,10 @@ EncryptedInsightStorage.prototype._brokenDecrypt = function(body) {
return decryptedJson;
};
+EncryptedInsightStorage.prototype.resendVerificationEmail = function(callback) {
+ InsightStorage.prototype.resendVerificationEmail.apply(this, [callback]);
+};
+
EncryptedInsightStorage.prototype.getItem = function(name, callback) {
var self = this;
InsightStorage.prototype.getItem.apply(this, [name,
diff --git a/js/plugins/InsightStorage.js b/js/plugins/InsightStorage.js
index 1f28eccde..cb8ec6fc4 100644
--- a/js/plugins/InsightStorage.js
+++ b/js/plugins/InsightStorage.js
@@ -37,6 +37,31 @@ InsightStorage.prototype.createItem = function(name, value, callback) {
});
};
+InsightStorage.prototype.resendVerificationEmail = function (callback) {
+ var passphrase = this.getPassphrase();
+ var authHeader = new buffers.Buffer(this.email + ':' + passphrase).toString('base64');
+ var resendUrl = this.storeUrl + '/resend_email';
+
+ log.debug('Resending verification email: ' + this.email);
+ this.request.get({
+ url: resendUrl,
+ headers: {
+ 'Authorization': authHeader
+ },
+ body: null,
+ }, function(err, response, body) {
+ if (err) {
+ return callback('Connection error');
+ }
+ if (response.statusCode === 409) {
+ return callback('BADCREDENTIALS: Invalid username or password');
+ } else if (response.statusCode !== 200) {
+ return callback('Unable to process the request');
+ }
+ return callback();
+ });
+};
+
function mayBeOldPassword(password) {
// Test for base64
return /^[a-zA-Z0-9\/=\+]+$/.test(password);
diff --git a/js/services/identityService.js b/js/services/identityService.js
index 8dcc89a04..e7a993213 100644
--- a/js/services/identityService.js
+++ b/js/services/identityService.js
@@ -62,6 +62,11 @@ angular.module('copayApp.services')
});
};
+ root.resendVerificationEmail = function (cb) {
+ var iden = $rootScope.iden;
+ iden.resendVerificationEmail(cb);
+ };
+
root.setServerStatus = function(headers) {
if (!headers)
return;