v2.1.0 (#293)
* Fix wrapping when too many hosts are shown (#207) * Update npm packages, fixes CVE-2019-10757 * Revert some breaking packages * Major overhaul - Docker buildx support in CI - Cypress API Testing in CI - Restructured folder layout (insert clean face meme) - Added Swagger documentation and validate API against that (to be completed) - Use common base image for all supported archs, which includes updated nginx with ipv6 support - Updated certbot and changes required for it - Large amount of Hosts names will wrap in UI - Updated packages for frontend - Version bump 2.1.0 * Updated documentation * Fix JWT expire time going crazy. Now set to 1day * Backend JS formatting rules * Remove v1 importer, I doubt anyone is using v1 anymore * Added backend formatting rules and enforce them in Jenkins builds * Fix CI, doesn't need a tty * Thanks bcrypt. Why can't you just be normal. * Cleanup after syntax check Co-authored-by: Marcelo Castagna <margaale@users.noreply.github.com>
This commit is contained in:
26
frontend/js/login/ui/login.ejs
Normal file
26
frontend/js/login/ui/login.ejs
Normal file
@ -0,0 +1,26 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col col-login mx-auto">
|
||||
<form class="card" action="" method="post">
|
||||
<div class="card-body p-6">
|
||||
<div class="card-title"><%- i18n('login', 'title') %></div>
|
||||
<div class="form-group">
|
||||
<label class="form-label"><%- i18n('str', 'email-address') %></label>
|
||||
<input name="identity" type="email" class="form-control" placeholder="<%- i18n('str', 'email-address') %>" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label"><%- i18n('str', 'password') %></label>
|
||||
<input name="secret" type="password" class="form-control" placeholder="<%- i18n('str', 'password') %>" required>
|
||||
<div class="invalid-feedback secret-error"></div>
|
||||
</div>
|
||||
<div class="form-footer">
|
||||
<button type="submit" class="btn btn-teal btn-block"><%- i18n('str', 'sign-in') %></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="text-center text-muted">
|
||||
<%- i18n('main', 'app') %> <%- i18n('main', 'version', {version: getVersion()}) %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
42
frontend/js/login/ui/login.js
Normal file
42
frontend/js/login/ui/login.js
Normal file
@ -0,0 +1,42 @@
|
||||
const $ = require('jquery');
|
||||
const Mn = require('backbone.marionette');
|
||||
const template = require('./login.ejs');
|
||||
const Api = require('../../app/api');
|
||||
const i18n = require('../../app/i18n');
|
||||
|
||||
module.exports = Mn.View.extend({
|
||||
template: template,
|
||||
className: 'page-single',
|
||||
|
||||
ui: {
|
||||
form: 'form',
|
||||
identity: 'input[name="identity"]',
|
||||
secret: 'input[name="secret"]',
|
||||
error: '.secret-error',
|
||||
button: 'button'
|
||||
},
|
||||
|
||||
events: {
|
||||
'submit @ui.form': function (e) {
|
||||
e.preventDefault();
|
||||
this.ui.button.addClass('btn-loading').prop('disabled', true);
|
||||
this.ui.error.hide();
|
||||
|
||||
Api.Tokens.login(this.ui.identity.val(), this.ui.secret.val(), true)
|
||||
.then(() => {
|
||||
window.location = '/';
|
||||
})
|
||||
.catch(err => {
|
||||
this.ui.error.text(err.message).show();
|
||||
this.ui.button.removeClass('btn-loading').prop('disabled', false);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
templateContext: {
|
||||
i18n: i18n,
|
||||
getVersion: function () {
|
||||
return $('#login').data('version');
|
||||
}
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user