seitime-frappe/frappe/templates/includes/login/login.js
Faris Ansari 92e8856588
New Build System: Rollup (#5010)
* JS build working

* Css build working!

* Uglify JS in production

* fix codacy

* Add frappe.commands.popen

* FIx ESLint errors

* Add socket.io to package.json

* ignore subprocess warnings

* Add babel-runtime

* sleep 20 after bench start

* remove set -e

* [FIX] non-shell subprocess call

* [FIX] use shell = False

* split commands
2018-02-20 13:47:48 +05:30

312 lines
8.5 KiB
JavaScript

// login.js
// don't remove this line (used in test)
window.disable_signup = {{ disable_signup and "true" or "false" }};
window.login = {};
window.verify = {};
login.bind_events = function() {
$(window).on("hashchange", function() {
login.route();
});
$(".form-login").on("submit", function(event) {
event.preventDefault();
var args = {};
args.cmd = "login";
args.usr = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim());
args.pwd = $("#login_password").val();
args.device = "desktop";
if(!args.usr || !args.pwd) {
frappe.msgprint("{{ _("Both login and password required") }}");
return false;
}
login.call(args);
return false;
});
$(".form-signup").on("submit", function(event) {
event.preventDefault();
var args = {};
args.cmd = "frappe.core.doctype.user.user.sign_up";
args.email = ($("#signup_email").val() || "").trim();
args.redirect_to = frappe.utils.get_url_arg("redirect-to") || '';
args.full_name = ($("#signup_fullname").val() || "").trim();
if(!args.email || !valid_email(args.email) || !args.full_name) {
login.set_indicator("{{ _("Valid email and name required") }}", 'red');
return false;
}
login.call(args);
return false;
});
$(".form-forgot").on("submit", function(event) {
event.preventDefault();
var args = {};
args.cmd = "frappe.core.doctype.user.user.reset_password";
args.user = ($("#forgot_email").val() || "").trim();
if(!args.user) {
login.set_indicator("{{ _("Valid Login id required.") }}", 'red');
return false;
}
login.call(args);
return false;
});
$(".btn-ldap-login").on("click", function(){
var args = {};
args.cmd = "{{ ldap_settings.method }}";
args.usr = ($("#login_email").val() || "").trim();
args.pwd = $("#login_password").val();
args.device = "desktop";
if(!args.usr || !args.pwd) {
login.set_indicator("{{ _("Both login and password required") }}", 'red');
return false;
}
login.call(args);
return false;
});
}
login.route = function() {
var route = window.location.hash.slice(1);
if(!route) route = "login";
login[route]();
}
login.reset_sections = function(hide) {
if(hide || hide===undefined) {
$("section.for-login").toggle(false);
$("section.for-forgot").toggle(false);
$("section.for-signup").toggle(false);
}
$('section .indicator').each(function() {
$(this).removeClass().addClass('indicator').addClass('blue')
.text($(this).attr('data-text'));
});
}
login.login = function() {
login.reset_sections();
$(".for-login").toggle(true);
}
login.steptwo = function() {
login.reset_sections();
$(".for-login").toggle(true);
}
login.forgot = function() {
login.reset_sections();
$(".for-forgot").toggle(true);
}
login.signup = function() {
login.reset_sections();
$(".for-signup").toggle(true);
}
// Login
login.call = function(args, callback) {
login.set_indicator("{{ _('Verifying...') }}", 'blue');
return frappe.call({
type: "POST",
args: args,
callback: callback,
freeze: true,
statusCode: login.login_handlers
});
}
login.set_indicator = function(message, color) {
$('section:visible .indicator')
.removeClass().addClass('indicator').addClass(color).text(message)
}
login.login_handlers = (function() {
var get_error_handler = function(default_message) {
return function(xhr, data) {
if(xhr.responseJSON) {
data = xhr.responseJSON;
}
var message = default_message;
if (data._server_messages) {
message = ($.map(JSON.parse(data._server_messages || '[]'), function(v) {
// temp fix for messages sent as dict
try {
return JSON.parse(v).message;
} catch (e) {
return v;
}
}) || []).join('<br>') || default_message;
}
if(message===default_message) {
login.set_indicator(message, 'red');
} else {
login.reset_sections(false);
}
};
}
var login_handlers = {
200: function(data) {
if(data.message == 'Logged In'){
login.set_indicator("{{ _("Success") }}", 'green');
window.location.href = frappe.utils.get_url_arg("redirect-to") || data.home_page;
} else if(data.message=="No App") {
login.set_indicator("{{ _("Success") }}", 'green');
if(localStorage) {
var last_visited =
localStorage.getItem("last_visited")
|| frappe.utils.get_url_arg("redirect-to");
localStorage.removeItem("last_visited");
}
if(data.redirect_to) {
window.location.href = data.redirect_to;
}
if(last_visited && last_visited != "/login") {
window.location.href = last_visited;
} else {
window.location.href = data.home_page;
}
} else if(window.location.hash === '#forgot') {
if(data.message==='not found') {
login.set_indicator("{{ _("Not a valid user") }}", 'red');
} else if (data.message=='not allowed') {
login.set_indicator("{{ _("Not Allowed") }}", 'red');
} else if (data.message=='disabled') {
login.set_indicator("{{ _("Not Allowed: Disabled User") }}", 'red');
} else {
login.set_indicator("{{ _("Instructions Emailed") }}", 'green');
}
} else if(window.location.hash === '#signup') {
if(cint(data.message[0])==0) {
login.set_indicator(data.message[1], 'red');
} else {
login.set_indicator("{{ _('Success') }}", 'green');
frappe.msgprint(data.message[1])
}
//login.set_indicator(__(data.message), 'green');
}
//OTP verification
if(data.verification && data.message != 'Logged In') {
login.set_indicator("{{ _("Success") }}", 'green');
document.cookie = "tmp_id="+data.tmp_id;
if (data.verification.method == 'OTP App'){
continue_otp_app(data.verification.setup, data.verification.qrcode);
} else if (data.verification.method == 'SMS'){
continue_sms(data.verification.setup, data.verification.prompt);
} else if (data.verification.method == 'Email'){
continue_email(data.verification.setup, data.verification.prompt);
}
}
},
401: get_error_handler("{{ _("Invalid Login. Try again.") }}"),
417: get_error_handler("{{ _("Oops! Something went wrong") }}")
};
return login_handlers;
} )();
frappe.ready(function() {
login.bind_events();
if (!window.location.hash) {
window.location.hash = "#login";
} else {
$(window).trigger("hashchange");
}
$(".form-signup, .form-forgot").removeClass("hide");
$(document).trigger('login_rendered');
});
var verify_token = function(event) {
$(".form-verify").on("submit", function(eventx) {
eventx.preventDefault();
var args = {};
args.cmd = "login";
args.otp = $("#login_token").val();
args.tmp_id = frappe.get_cookie('tmp_id');
if(!args.otp) {
frappe.msgprint('{{ _("Login token required") }}');
return false;
}
login.call(args);
return false;
});
}
var request_otp = function(r){
$('.login-content').empty().append($('<div>').attr({'id':'twofactor_div'}).html(
'<form class="form-verify">\
<div class="page-card-head">\
<span class="indicator blue" data-text="Verification">Verification</span>\
</div>\
<div id="otp_div"></div>\
<input type="text" id="login_token" autocomplete="off" class="form-control" placeholder="Verification Code" required="" autofocus="">\
<button class="btn btn-sm btn-primary btn-block" id="verify_token">Verify</button>\
</form>'));
// add event handler for submit button
verify_token();
}
var continue_otp_app = function(setup, qrcode){
request_otp();
var qrcode_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>');
if (setup){
direction = $('<div>').attr('id','qr_info').text('Enter Code displayed in OTP App.');
qrcode_div.append(direction);
$('#otp_div').prepend(qrcode_div);
} else {
direction = $('<div>').attr('id','qr_info').text('OTP setup using OTP App was not completed. Please contact Administrator.');
qrcode_div.append(direction);
$('#otp_div').prepend(qrcode_div);
}
}
var continue_sms = function(setup, prompt){
request_otp();
var sms_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>');
if (setup){
sms_div.append(prompt)
$('#otp_div').prepend(sms_div);
} else {
direction = $('<div>').attr('id','qr_info').text(prompt || 'SMS was not sent. Please contact Administrator.');
sms_div.append(direction);
$('#otp_div').prepend(sms_div)
}
}
var continue_email = function(setup, prompt){
request_otp();
var email_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>');
if (setup){
email_div.append(prompt)
$('#otp_div').prepend(email_div);
} else {
var direction = $('<div>').attr('id','qr_info').text(prompt || 'Verification code email not sent. Please contact Administrator.');
email_div.append(direction);
$('#otp_div').prepend(email_div);
}
}