64 lines
2.1 KiB
JavaScript
64 lines
2.1 KiB
JavaScript
"use strict";
|
|
|
|
const router = require("../router.js");
|
|
const api = require("../api.js");
|
|
const uri = require("../util/uri.js");
|
|
const User = require("../models/user.js");
|
|
const topNavigation = require("../models/top_navigation.js");
|
|
const RegistrationView = require("../views/registration_view.js");
|
|
const EmptyView = require("../views/empty_view.js");
|
|
|
|
class UserRegistrationController {
|
|
constructor() {
|
|
if (!api.hasPrivilege("users:create:self")) {
|
|
this._view = new EmptyView();
|
|
this._view.showError("Registration is closed.");
|
|
return;
|
|
}
|
|
|
|
topNavigation.activate("register");
|
|
topNavigation.setTitle("Registration");
|
|
this._view = new RegistrationView();
|
|
this._view.addEventListener("submit", (e) => this._evtRegister(e));
|
|
}
|
|
|
|
_evtRegister(e) {
|
|
this._view.clearMessages();
|
|
this._view.disableForm();
|
|
const user = new User();
|
|
user.name = e.detail.name;
|
|
user.email = e.detail.email;
|
|
user.password = e.detail.password;
|
|
const isLoggedIn = api.isLoggedIn();
|
|
user.save()
|
|
.then(() => {
|
|
if (isLoggedIn) {
|
|
return Promise.resolve();
|
|
} else {
|
|
api.forget();
|
|
return api.login(e.detail.name, e.detail.password, false);
|
|
}
|
|
})
|
|
.then(
|
|
() => {
|
|
if (isLoggedIn) {
|
|
const ctx = router.show(uri.formatClientLink("users"));
|
|
ctx.controller.showSuccess("User added!");
|
|
} else {
|
|
const ctx = router.show(uri.formatClientLink());
|
|
ctx.controller.showSuccess("Welcome aboard!");
|
|
}
|
|
},
|
|
(error) => {
|
|
this._view.showError(error.message);
|
|
this._view.enableForm();
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
module.exports = (router) => {
|
|
router.enter(["register"], (ctx, next) => {
|
|
new UserRegistrationController();
|
|
});
|
|
};
|