Use new registration API

This commit is contained in:
Girish Ramakrishnan
2019-05-04 21:57:42 -07:00
parent 8e08ac2ce1
commit 51521926e7
7 changed files with 52 additions and 224 deletions
+44 -104
View File
@@ -3,7 +3,7 @@
/* global angular:false */
/* global $:false */
angular.module('Application').controller('AppStoreController', ['$scope', '$location', '$timeout', '$routeParams', 'Client', 'AppStore', function ($scope, $location, $timeout, $routeParams, Client, AppStore) {
angular.module('Application').controller('AppStoreController', ['$scope', '$location', '$timeout', '$routeParams', 'Client', function ($scope, $location, $timeout, $routeParams, Client) {
Client.onReady(function () { if (!Client.getUserInfo().admin) $location.path('/'); });
$scope.HOST_PORT_MIN = 1024;
@@ -19,9 +19,9 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca
$scope.category = '';
$scope.cachedCategory = ''; // used to cache the selected category while searching
$scope.searchString = '';
$scope.validAppstoreAccount = false;
$scope.appstoreConfig = null;
$scope.validSubscription = false;
$scope.unstableApps = false;
$scope.subscription = {};
$scope.showView = function (view) {
// wait for dialog to be fully closed to avoid modal behavior breakage when moving to a different view already
@@ -241,70 +241,7 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca
$scope.appstoreLogin.error = {};
$scope.appstoreLogin.busy = true;
function login() {
AppStore.login($scope.appstoreLogin.email, $scope.appstoreLogin.password, $scope.appstoreLogin.totpToken, function (error, result) {
if (error) {
$scope.appstoreLogin.busy = false;
if (error.statusCode === 401) {
if (error.message.indexOf('TOTP token missing') !== -1) {
$scope.appstoreLogin.error.totpToken = 'A 2FA token is required';
setTimeout(function () { $('#inputAppstoreLoginTotpToken').focus(); }, 0);
} else if (error.message.indexOf('TOTP token invalid') !== -1) {
$scope.appstoreLogin.error.totpToken = 'Wrong 2FA token';
$scope.appstoreLogin.totpToken = '';
setTimeout(function () { $('#inputAppstoreLoginTotpToken').focus(); }, 0);
} else {
$scope.appstoreLogin.error.password = 'Wrong email or password';
$scope.appstoreLogin.password = '';
$('#inputAppstoreLoginPassword').focus();
$scope.appstoreLoginForm.password.$setPristine();
}
} else {
console.error(error);
}
return;
}
var config = {
userId: result.userId,
token: result.accessToken
};
Client.setAppstoreConfig(config, function (error) {
if (error) {
$scope.appstoreLogin.busy = false;
if (error.statusCode === 424) {
if (error.message === 'wrong user') {
$scope.appstoreLogin.error.generic = 'Wrong cloudron.io account';
$scope.appstoreLogin.email = '';
$scope.appstoreLogin.password = '';
$scope.appstoreLoginForm.email.$setPristine();
$scope.appstoreLoginForm.password.$setPristine();
$('#inputAppstoreLoginEmail').focus();
} else {
console.error(error);
$scope.appstoreLogin.error.generic = 'Please retry later';
}
} else {
console.error(error);
}
return;
}
fetchAppstoreConfig(function (error) {
if (error) return console.error('Unable to fetch appstore config.', error);
});
});
});
}
if (!$scope.appstoreLogin.register) return login();
AppStore.register($scope.appstoreLogin.email, $scope.appstoreLogin.password, function (error) {
Client.subscribeCloudron($scope.appstoreLogin.email, $scope.appstoreLogin.password, $scope.appstoreLogin.totpToken, $scope.appstoreLogin.register, function (error) {
if (error) {
$scope.appstoreLogin.busy = false;
@@ -314,6 +251,32 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca
$scope.appstoreLoginForm.email.$setPristine();
$scope.appstoreLoginForm.password.$setPristine();
$('#inputAppstoreLoginEmail').focus();
} else if (error.statusCode === 412) {
if (error.message.indexOf('TOTP token missing') !== -1) {
$scope.appstoreLogin.error.totpToken = 'A 2FA token is required';
setTimeout(function () { $('#inputAppstoreLoginTotpToken').focus(); }, 0);
} else if (error.message.indexOf('TOTP token invalid') !== -1) {
$scope.appstoreLogin.error.totpToken = 'Wrong 2FA token';
$scope.appstoreLogin.totpToken = '';
setTimeout(function () { $('#inputAppstoreLoginTotpToken').focus(); }, 0);
} else {
$scope.appstoreLogin.error.password = 'Wrong email or password';
$scope.appstoreLogin.password = '';
$('#inputAppstoreLoginPassword').focus();
$scope.appstoreLoginForm.password.$setPristine();
}
} else if (error.statusCode === 424) {
if (error.message === 'wrong user') {
$scope.appstoreLogin.error.generic = 'Wrong cloudron.io account';
$scope.appstoreLogin.email = '';
$scope.appstoreLogin.password = '';
$scope.appstoreLoginForm.email.$setPristine();
$scope.appstoreLoginForm.password.$setPristine();
$('#inputAppstoreLoginEmail').focus();
} else {
console.error(error);
$scope.appstoreLogin.error.generic = error.message;
}
} else {
console.error(error);
$scope.appstoreLogin.error.generic = 'Please retry later';
@@ -321,8 +284,6 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca
return;
}
login();
});
}
};
@@ -475,42 +436,21 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca
});
}
function fetchAppstoreConfig(callback) {
callback = callback || function (error) { if (error) console.error(error); };
function getSubscription(callback) {
Client.getSubscription(function (error, subscription) {
if (error) { // error.statusCode will be 402
$scope.validSubscription = false;
} else {
$scope.subscription = subscription;
}
if ($scope.user.admin && $scope.config.managed) {
$scope.validAppstoreAccount = true;
return callback();
}
// clear busy state when a login/signup was performed
$scope.appstoreLogin.busy = false;
Client.getAppstoreConfig(function (error, result) {
if (error) return callback(error);
// also update the root controller status
if ($scope.$parent) $scope.$parent.updateSubscriptionStatus();
if (!result.token || !result.cloudronId) return callback();
var appstoreConfig = result;
AppStore.getProfile(appstoreConfig.token, function (error, result) {
if (error) return console.error(error);
// assign late to avoid UI flicketing on update
appstoreConfig.profile = result;
$scope.appstoreConfig = appstoreConfig;
$scope.validAppstoreAccount = true;
// clear busy state when a login/signup was performed
$scope.appstoreLogin.busy = false;
// also update the root controller status
if ($scope.$parent) {
$scope.$parent.fetchAppstoreProfileAndSubscription(function (error) {
if (error) console.error(error);
});
}
callback();
});
callback();
});
}
@@ -541,7 +481,7 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca
// hashChangeListener calls $apply, so make sure we don't double digest here
setTimeout(hashChangeListener, 1);
fetchAppstoreConfig(function (error) {
getSubscription(function (error) {
if (error) console.error(error);
$scope.ready = true;
@@ -575,7 +515,7 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca
});
// autofocus if appstore login is shown
$scope.$watch('validAppstoreAccount', function (newValue/*, oldValue */) {
$scope.$watch('validSubscription', function (newValue/*, oldValue */) {
if (!newValue) setTimeout(function () { $('[name=appstoreLoginForm]').find('[autofocus]:first').focus(); }, 1000);
});