diff --git a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
index aea48af20d4b7ed44e2e0138aa4e3afb1b4563d7..5e94d1de03ee10f2abed10d2ce2b771e1dfb9291 100644
--- a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
@@ -12,6 +12,7 @@ var GuiConnector = require('../../GuiConnector');
var NetworkError = require('../../NetworkError');
var ValidationError = require('../../ValidationError');
var SignUpDapiDialog = require('./SignUpDapiDialog');
+var SignInDapiDialog = require('./SignInDapiDialog');
var logger = require('../../logger');
var HttpStatus = require('http-status-codes');
@@ -124,6 +125,30 @@ ConfigurationAdminPanel.prototype._createGui = function () {
return dialog.open();
});
});
+ $(self.getElement()).on("click", ".minerva-dapi-logout", function () {
+ var loginOption = self.getConfiguration().getOption(ConfigurationType.DAPI_LOGIN);
+ var passwordOption = self.getConfiguration().getOption(ConfigurationType.DAPI_PASSWORD);
+ loginOption.setValue("");
+ passwordOption.setValue("");
+ return Promise.all([self.getServerConnector().updateConfigurationOption(loginOption),
+ self.getServerConnector().updateConfigurationOption(passwordOption)]);
+ });
+
+ $(self.getElement()).on("click", ".minerva-dapi-sign-in", function () {
+ var dialog = new SignInDapiDialog({
+ element: Functions.createElement({
+ type: "div"
+ }),
+ configuration: self.getConfiguration(),
+ customMap: null,
+ serverConnector: self.getServerConnector()
+ }
+ );
+ self._signInDialog = dialog;
+ return dialog.init().then(function () {
+ return dialog.open();
+ });
+ });
$(self.getElement()).on("click", ".minerva-accept-dapi-release", function () {
var button = this;
@@ -145,7 +170,8 @@ ConfigurationAdminPanel.prototype._createGui = function () {
}).catch(GuiConnector.alert);
});
-};
+}
+;
/**
*
@@ -282,6 +308,12 @@ ConfigurationAdminPanel.prototype.createDapiConfiguration = function (options) {
self.getGuiUtils().addTab(self, {name: type, content: contentDiv});
return self.refreshDapiData(options, type).then(function () {
+ self.getConfiguration().addListener("onOptionChanged", function (e) {
+ var option = e.arg;
+ if (option.getGroup() === type) {
+ return self.refreshDapiData(self.getConfiguration().getOptions());
+ }
+ });
return contentDiv;
});
@@ -291,33 +323,22 @@ ConfigurationAdminPanel.prototype.refreshDapiData = function (options) {
var self = this;
var dataTable = $(".minerva-dapi-configuration", self.getElement()).DataTable();
- var type = "Data-API configuration";
var data = [];
- for (var i = 0; i < options.length; i++) {
- var option = options[i];
- if (option.getGroup() === type) {
- var rowData = self.optionToTableRow(option);
- data.push(rowData);
- }
- }
+
+ var loginOption = self.getConfiguration().getOption(ConfigurationType.DAPI_LOGIN);
+ var login = xss(loginOption.getValue());
return self.getServerConnector().isDapiConnectionValid().then(function (isValid) {
var row = [];
row[0] = "DAPI connection validity";
if (isValid) {
- row[1] = "
" +
- "";
+ row[1] = "User logged in (" + login + ")
" +
+ "";
} else {
- row[1] = "
" +
- "";
+ row[1] = "No user logged in
" +
+ " ";
}
data.push(row);
- self.getConfiguration().addListener("onOptionChanged", function (e) {
- var option = e.arg;
- if (option.getGroup() === type) {
- return self.refreshDapiData(self.getConfiguration().getOptions());
- }
- });
if (isValid) {
return self.getReleasesRows();
} else {
diff --git a/frontend-js/src/main/js/gui/admin/SignInDapiDialog.js b/frontend-js/src/main/js/gui/admin/SignInDapiDialog.js
new file mode 100644
index 0000000000000000000000000000000000000000..19f8cc386e449261b0f8baa3ec81f1037e96e339
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/SignInDapiDialog.js
@@ -0,0 +1,201 @@
+"use strict";
+
+var Promise = require("bluebird");
+var $ = require('jquery');
+
+var AbstractGuiElement = require('../AbstractGuiElement');
+var GuiConnector = require('../../GuiConnector');
+
+var ConfigurationType = require('../../ConfigurationType');
+
+var Functions = require('../../Functions');
+
+// noinspection JSUnusedLocalSymbols
+var logger = require('../../logger');
+
+/**
+ *
+ * @param {Object} params
+ * @param {HTMLElement} params.element
+ * @param {Configuration} params.configuration
+ * @param {ServerConnector} params.serverConnector
+
+ * @constructor
+ *
+ * @extends AbstractGuiElement
+ */
+function SignInDapiDialog(params) {
+ params["customMap"] = null;
+ AbstractGuiElement.call(this, params);
+ var self = this;
+
+ $(self.getElement()).css({overflow: "hidden"});
+
+ self.createGui();
+ self.registerListenerType("onSave");
+}
+
+SignInDapiDialog.prototype = Object.create(AbstractGuiElement.prototype);
+SignInDapiDialog.prototype.constructor = SignInDapiDialog;
+
+/**
+ *
+ */
+SignInDapiDialog.prototype.createGui = function () {
+ var self = this;
+
+ var result = Functions.createElement({
+ type: "div",
+ className: "minerva-dapi-sign-form-content"
+ });
+
+ var table = Functions.createElement({
+ type: "table",
+ className: "display"
+ });
+ result.appendChild(table);
+
+
+ var menuRow = Functions.createElement({
+ type: "div",
+ className: "minerva-menu-row"
+ });
+ result.appendChild(menuRow);
+
+ var saveUserButton = Functions.createElement({
+ type: "button",
+ class: "minerva-create-dapi-account",
+ content: ' LOG IN',
+ onclick: function () {
+ return self.onSaveClicked().then(function () {
+ return self.close();
+ }).catch(GuiConnector.alert);
+ },
+ xss: false
+ });
+ var cancelButton = Functions.createElement({
+ type: "button",
+ content: ' CANCEL',
+ onclick: function () {
+ return self.close();
+ },
+ xss: false
+ });
+ menuRow.appendChild(saveUserButton);
+ menuRow.appendChild(cancelButton);
+
+ return self.getElement().appendChild(result);
+};
+
+/**
+ *
+ * @returns {Promise}
+ */
+SignInDapiDialog.prototype.onSaveClicked = function () {
+ var self = this;
+ var login = $("[name='dapi-login']", self.getElement()).val();
+ var password = $("[name='dapi-password']", self.getElement()).val();
+
+ var loginOption = self.getConfiguration().getOption(ConfigurationType.DAPI_LOGIN);
+ var passwordOption = self.getConfiguration().getOption(ConfigurationType.DAPI_PASSWORD);
+ loginOption.setValue(login);
+ passwordOption.setValue(password);
+ GuiConnector.showProcessing();
+ return Promise.all([self.getServerConnector().updateConfigurationOption(loginOption),
+ self.getServerConnector().updateConfigurationOption(passwordOption)]
+ ).then(function () {
+ return self.getServerConnector().isDapiConnectionValid();
+ }).then(function (isValid) {
+ if (isValid) {
+ GuiConnector.info("Login successful");
+ } else {
+ GuiConnector.warn("Invalid credentials");
+ }
+ self.close();
+ return self.callListeners("onSave", {login: login, password: password});
+ }).finally(GuiConnector.hideProcessing);
+};
+
+/**
+ *
+ * @returns {Promise}
+ */
+SignInDapiDialog.prototype.init = function () {
+ var self = this;
+ var detailsTable = $(".minerva-dapi-sign-form-content table", self.getElement())[0];
+
+ // noinspection JSCheckFunctionSignatures
+ var dataTable = $(detailsTable).DataTable({
+ columns: [{
+ title: "Name"
+ }, {
+ title: "Value"
+ }],
+ paging: false,
+ ordering: false,
+ searching: false,
+ bInfo: false
+ });
+
+ var data = [];
+
+ data.push(['Login', ""]);
+ data.push(['Password', ""]);
+
+ dataTable.clear().rows.add(data).draw();
+
+ return Promise.resolve();
+};
+
+/**
+ *
+ *
+ * @returns {Promise}
+ */
+SignInDapiDialog.prototype.destroy = function () {
+ var self = this;
+ var div = self.getElement();
+
+ var detailsTable = $("[name=detailsTable]", div)[0];
+ if ($.fn.DataTable.isDataTable(detailsTable)) {
+ $(detailsTable).DataTable().destroy();
+ }
+ if ($(div).hasClass("ui-dialog-content")) {
+ $(div).dialog("destroy");
+ }
+ return Promise.resolve();
+};
+
+/**
+ *
+ */
+SignInDapiDialog.prototype.open = function () {
+ var self = this;
+ var div = self.getElement();
+ if (!$(div).hasClass("ui-dialog-content")) {
+ $(div).dialog({
+ dialogClass: 'minerva-sign-up-dapi-dialog',
+ title: "Log in to DAPI",
+ width: 420,
+ height: 240
+ });
+ }
+ self.clear();
+ $(div).dialog("open");
+};
+
+SignInDapiDialog.prototype.clear = function () {
+ var self = this;
+ $("[name='dapi-login']", self.getElement()).val("");
+ $("[name='dapi-password']", self.getElement()).val("");
+};
+
+/**
+ *
+ */
+SignInDapiDialog.prototype.close = function () {
+ var self = this;
+ $(self.getElement()).dialog("close");
+};
+
+module.exports = SignInDapiDialog;
diff --git a/frontend-js/src/main/js/gui/admin/SignUpDapiDialog.js b/frontend-js/src/main/js/gui/admin/SignUpDapiDialog.js
index b55606753389d3e7d267fafd86bc14400f6a3658..02f2b0910162e3207f69cca56b2d756ae93ca87f 100644
--- a/frontend-js/src/main/js/gui/admin/SignUpDapiDialog.js
+++ b/frontend-js/src/main/js/gui/admin/SignUpDapiDialog.js
@@ -7,7 +7,7 @@ var AbstractGuiElement = require('../AbstractGuiElement');
var GuiConnector = require('../../GuiConnector');
var ObjectExistsError = require('../../ObjectExistsError');
-var NetworkError = require('../../NetworkError');
+var ValidationError = require('../../ValidationError');
var Functions = require('../../Functions');
@@ -97,7 +97,11 @@ SignUpDapiDialog.prototype.onSaveClicked = function () {
var self = this;
var login = $("[name='dapi-login']", self.getElement()).val();
var password = $("[name='dapi-password']", self.getElement()).val();
+ var password2 = $("[name='dapi-password-2']", self.getElement()).val();
+ if (password!==password2) {
+ return Promise.reject(new ValidationError("Password does not match"));
+ }
return self.getServerConnector().registerDapiUser({
login: login,
password: password,
@@ -140,6 +144,7 @@ SignUpDapiDialog.prototype.init = function () {
data.push(['Login', ""]);
data.push(['Password', ""]);
+ data.push(['Repeat password', ""]);
data.push(['Email address', ""]);
dataTable.clear().rows.add(data).draw();
@@ -176,8 +181,8 @@ SignUpDapiDialog.prototype.open = function () {
$(div).dialog({
dialogClass: 'minerva-sign-up-dapi-dialog',
title: "Create DAPI account",
- width: window.innerWidth / 2,
- height: window.innerHeight / 2
+ width: 420,
+ height: 360
});
}
self.clear();
@@ -188,6 +193,7 @@ SignUpDapiDialog.prototype.clear = function () {
var self = this;
$("[name='dapi-login']", self.getElement()).val("");
$("[name='dapi-password']", self.getElement()).val("");
+ $("[name='dapi-password-2']", self.getElement()).val("");
$("[name='dapi-email']", self.getElement()).val("");
};