100 lines
3.5 KiB
JavaScript
100 lines
3.5 KiB
JavaScript
'use strict';
|
|
|
|
/* global $, angular, redirectIfNeeded */
|
|
|
|
// create main application module
|
|
var app = angular.module('Application', ['pascalprecht.translate', 'ngCookies', 'angular-md5', 'ui-notification', 'ui.bootstrap']);
|
|
|
|
app.controller('SetupController', ['$scope', 'Client', function ($scope, Client) {
|
|
// Stupid angular location provider either wants html5 location mode or not, do the query parsing on my own
|
|
const search = decodeURIComponent(window.location.search).slice(1).split('&').map(function (item) { return item.split('='); }).reduce(function (o, k) { o[k[0]] = k[1]; return o; }, {});
|
|
|
|
$scope.client = Client;
|
|
$scope.view = '';
|
|
$scope.initialized = false;
|
|
$scope.setupToken = '';
|
|
$scope.firstTimeLoginUrl = '';
|
|
|
|
$scope.owner = {
|
|
error: null,
|
|
busy: false,
|
|
|
|
email: '',
|
|
displayName: '',
|
|
username: '',
|
|
password: '',
|
|
|
|
submit: function () {
|
|
$scope.owner.busy = true;
|
|
$scope.owner.error = null;
|
|
|
|
var data = {
|
|
username: $scope.owner.username,
|
|
password: $scope.owner.password,
|
|
email: $scope.owner.email,
|
|
displayName: $scope.owner.displayName,
|
|
setupToken: $scope.setupToken
|
|
};
|
|
|
|
Client.createAdmin(data, function (error, autoLoginToken) {
|
|
if (error && error.statusCode === 400) {
|
|
$scope.owner.busy = false;
|
|
|
|
if (error.message === 'Invalid email') {
|
|
$scope.owner.error = { email: error.message };
|
|
$scope.owner.email = '';
|
|
$scope.ownerForm.email.$setPristine();
|
|
setTimeout(function () { $('#inputEmail').focus(); }, 200);
|
|
} else {
|
|
$scope.owner.error = { username: error.message };
|
|
$scope.owner.username = '';
|
|
$scope.ownerForm.username.$setPristine();
|
|
setTimeout(function () { $('#inputUsername').focus(); }, 200);
|
|
}
|
|
return;
|
|
} else if (error) {
|
|
$scope.owner.busy = false;
|
|
console.error('Internal error', error);
|
|
$scope.owner.error = { generic: error.message };
|
|
return;
|
|
}
|
|
|
|
// set token to autologin on first oidc flow
|
|
localStorage.cloudronFirstTimeToken = autoLoginToken;
|
|
|
|
$scope.firstTimeLoginUrl = '/openid/auth?client_id=cid-webadmin&scope=openid email profile&response_type=code token&redirect_uri=' + window.location.origin + '/authcallback.html';
|
|
|
|
setView('finished');
|
|
});
|
|
}
|
|
};
|
|
|
|
function setView(view) {
|
|
if (view === 'finished') {
|
|
$scope.view = 'finished';
|
|
} else {
|
|
$scope.view = 'owner';
|
|
}
|
|
}
|
|
|
|
function init() {
|
|
Client.getProvisionStatus(function (error, status) {
|
|
if (error) return Client.initError(error, init);
|
|
|
|
if (redirectIfNeeded(status, 'activation')) return; // redirected to some other view...
|
|
|
|
setView(search.view);
|
|
|
|
$scope.setupToken = search.setupToken;
|
|
$scope.initialized = true;
|
|
|
|
// Ensure we have a good autofocus
|
|
setTimeout(function () {
|
|
$(document).find("[autofocus]:first").focus();
|
|
}, 250);
|
|
});
|
|
}
|
|
|
|
init();
|
|
}]);
|