chimera-mark2-core-release/static/js/core/login.js

391 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import * as API from './api.js';
import * as UI from './ui.js';
import { langPack, lpCacheDrop } from './langpack.js';
export function load() {
$("body").empty();
if (UI.parceURL().module=='auth' && UI.parceURL().function=='oauth') {
let hash = UI.parceURL().id;
let code=UI.parceURL().args.code;
UI.setLocation("/");
let fprd=sessionStorage.getItem("foxPreRegisterData")
if (fprd) {
fprd=JSON.parse(fprd);
// register
API.exec({
errDict: langPack.core.iface.register.errors,
requestType: "POST",
data: {
email: fprd.email,
regCode: fprd.regCode,
authType: fprd.authType,
oAuthCode: code,
oAuthHash: hash,
},
method: "auth/register/register",
onSuccess: function(json) {
loginSuccessCallback(json);
return false;
},
onFinal: function() {
doRegister();
}
});
} else {
// auth
API.exec("POST", "auth/oauth",{hash: hash, code: code},loginSuccessCallback,false,function onFail(json) {
console.log(json);
if (json.status.code==401 && json.data.error.xCode=="UNR") {
let buttons={};
buttons["OK"]=function() {
UI.closeDialog("dialogInfo");
load();
}
UI.showInfoDialog(langPack.core.iface.oauthLoginFailedUNR,langPack.core.iface.loginFailedDialogTitle,buttons);
} else {
console.log("Error:",json);
}
});
}
return;
} else if (UI.parceURL().module=='auth' && UI.parceURL().function=='register') {
let code=UI.parceURL().args.code;
UI.setLocation("/");
doRegister(code);
return;
} else if (UI.parceURL().module=='auth' && UI.parceURL().function=='recover') {
doRecover();
return;
}
sessionStorage.removeItem("foxPreRegisterData");
sessionStorage.setItem("foxAuthReturnUrl",document.location.href);
$("<div>",{ id: "loginForm", class: "login", style: "padding: 0px;",
append: $("<h2>", { class: "login first", style: "display: inline-block; float: left; margin-top: 4px", text: "Авторизация"})
.add(UI.addButton("btnLogin","fas fa-sign-in-alt","Login","", doLogin,undefined,"float: right; margin-right: 0"))
.add("<div>",{class: "widget",
append: UI.addFieldGroup([
UI.addField({title: "Login", type: "input", item: "login_username"}).attr("reqx","true"),
UI.addField({title: "Password", type: "password", item: "login_password"}).attr("reqx","true")
])
})
.add("<div>",{class: "widget",
append: $("<span>", { class: "linkButton", id: "lbl_restore", text: "Восстановить", click: doRecover})
.add("<span>",{text: " или "})
.add($("<span>", { class: "linkButton", id: "lbt_register", text: "Зарегистрироваться", click: doRegister}))
})
}).appendTo("body");
let oap=API.settings.get("oauthProfiles");
if (oap.length>0) {
let oad=$("<div>",{ class: "widget", id: "divAuthWith" });
let width=((300/oap.length)-20).toFixed();
if (width>80) { width=80; }
$.each(oap,function(key,val) {
UI.addButton({
id: "btnOauth_"+val.id,
title: langPack.core.iface.loginWith+" "+val.name,
style: "width: "+width+"px",
icon: val.icon,
onClick: btnLoginWith_Click,
}).prop("prId",val.id).appendTo(oad);
})
oad.appendTo("#loginForm");
}
$(".i").keyup(function(event) {
if (event.keyCode === 13) {
$("#btnLogin").click();
}
});
}
async function btnLoginWith_Click(ref) {
let prid=$(ref.currentTarget).prop("prId");
UI.blankerShow();
let url=await getOAuthURL(prid,true);
document.location.href=url;
}
function doLogin() {
let data=UI.collectForm("loginForm",true,true,false,true);
if (data.validateErrCount > 0) {
return;
}
API.exec("POST", "auth/login",{login: data.username.val, password:data.password.val,type:"WEB"}, loginSuccessCallback,false,function(json) {
if (json.status.code==401) {
UI.showInfoDialog(langPack.core.iface.loginFailed401text,langPack.core.iface.loginFailedDialogTitle);
} else {
console.log("Error:",json);
}
});
}
function loginSuccessCallback(json) {
localStorage.setItem("token",json.data.token);
localStorage.setItem("tokenExpire",json.data.expire.stamp);
lpCacheDrop();
UI.setLocation(sessionStorage.getItem("foxAuthReturnUrl"));
sessionStorage.removeItem("foxAuthReturnUrl");
import("./main.js").then(function(mod) {
mod.load();
});
}
function doRecover() {
var buttons={};
buttons[langPack.core.iface.dialogRecoveryButton]=async function() {
let fdata=UI.collectForm("addgrp", true,false, false,true);
if (fdata.validateErrCount==0) {
if (fdata.code.val.length==0) {
API.exec({
errDict: langPack.core.iface.register.errors,
requestType: "POST",
data: {
email: fdata.email.val,
},
method: "auth/register/recovery",
onSuccess: function(json) {
UI.showInfoDialog(langPack.core.iface.users.recoverSentSucces);
return false;
},
onFinal: function() {
//doRegister();
},
noblabk: false
});
} else {
API.exec({
errDict: langPack.core.iface.register.errors,
requestType: "POST",
data: {
email: fdata.email.val,
code: fdata.code.val,
},
method: "auth/register/validateRecovery",
onSuccess: function(json) {
UI.closeDialog('addgrp');
doRecoverStage2(fdata.email.val,fdata.code.val);
return false;
},
onFinal: function() {
//doRegister();
}
});
}
}
};
buttons[langPack.core.iface.dialodCloseButton]=function() { UI.closeDialog('addgrp'); UI.setLocation("/"); load(); }
UI.createDialog(
UI.addFieldGroup([
UI.addField({val: langPack.core.iface.users.recoveryFormText}),
UI.addField({title: langPack.core.iface.users.email, type: "input", item: "reg_email", reqx:true}),
UI.addField({title: langPack.core.iface.confCode, type: "input", item: "reg_code",reqx:false,regx: "^[0-9]{4}$", regxTitle: langPack.core.iface.confCodeFmtErr}),
]),
langPack.core.iface.dialogReсoveryTitle,
buttons,
365,1,'addgrp');
if (UI.parceURL().args.address != undefined && UI.parceURL().args.code != undefined) {
$("#reg_email").val(decodeURI(UI.parceURL().args.address));
$("#reg_code").val(UI.parceURL().args.code);
UI.setLocation("/");
}
UI.openDialog('addgrp');
}
function doRecoverStage2(address,code) {
var buttons={};
buttons[langPack.core.iface.dialogRecoveryButton]=async function() {
let fdata=UI.collectForm("addgrp", true,false, false,true);
if (fdata.validateErrCount==0) {
if (fdata.pass1.val != fdata.pass2.val) {
$("#rev_pass1").addClass("alert").attr("title",langPack.core.iface.passNotMatch);
return;
}
API.exec({
errDict: langPack.core.iface.register.errors,
requestType: "POST",
data: {
email: address,
code: code,
newPasswd: fdata.pass1.val,
},
method: "auth/register/setNewPassword",
onSuccess: function(json) {
loginSuccessCallback(json);
return false;
},
onFinal: function() {
//doRegister();
},
noblabk: false
});
}
};
buttons[langPack.core.iface.dialodCloseButton]=function() { UI.closeDialog('addgrp'); UI.setLocation("/"); load(); }
UI.createDialog(
UI.addFieldGroup([
UI.addField({val: langPack.core.iface.users.enterNewPasswordText}),
UI.addField({title: langPack.core.iface.password, type: "passwordNew", item: "rev_pass1",reqx:true, disabled: false, newPasswdGenCallback: function(passwd) {$("#rev_pass2").val(passwd).addClass("changed"); }}),
UI.addField({title: langPack.core.iface.passConfirm, type: "password", item: "rev_pass2",reqx:true, disabled: false}),
]),
langPack.core.iface.dialogReсoveryTitle,
buttons,
275,1,'addgrp');
UI.openDialog('addgrp');
}
async function validatePreReg(fdata) {
let rStatus=false;
try {
await API.exec({
errDict: langPack.core.iface.register.errors,
requestType: "POST",
data: {
email: fdata.email.val,
regCode: fdata.code.val,
login: fdata.login.val,
authType: fdata.authtype.val,
},
method: "auth/register/preCheck",
onSuccess: function(json) {
rStatus=true;
return false;
}
});
} catch (e) {}
return rStatus;
}
async function getOAuthURL(prid,noblank) {
let rvUrl=undefined;
try {
if (noblank==undefined) { noblank=true; }
await API.exec("GET", "auth/oauth/"+prid,{}, function onSuccess(json) {
rvUrl=json.data.url;
},noblank);
} catch (e) {}
return rvUrl;
}
function doRegister(regCode) {
var buttons={};
buttons[langPack.core.iface.dialogRegisterButton]=async function() {
let fdata=UI.collectForm("addgrp", true,false, false,true);
if (fdata.validateErrCount==0) {
if (fdata.authtype.val !== 'password') {
let preCheckStatus= await validatePreReg(fdata);
if (!preCheckStatus) { return; }
sessionStorage.setItem("foxPreRegisterData",JSON.stringify({
email: fdata.email.val,
regCode: fdata.code.val,
login: fdata.login.val,
authType: fdata.authtype.val,
}));
let authType=fdata.authtype.val.split("_")[0];
let authKey=fdata.authtype.val.split("_")[1];
if (authType=='oauth') {
let url=await getOAuthURL(authKey);
document.location.href=url;
}
} else {
if (fdata.pass1.val != fdata.pass2.val) {
$("#reg_pass1").addClass("alert").attr("title",langPack.core.iface.passNotMatch);
return;
}
API.exec({
errDict: langPack.core.iface.register.errors,
requestType: "POST",
data: {
email: fdata.email.val,
regCode: fdata.code.val,
fullName: fdata.fullname.val,
login: fdata.login.val,
password: fdata.pass1.val,
authType: fdata.authtype.val,
},
method: "auth/register/register",
onSuccess: function(json) {
loginSuccessCallback(json);
return false;
},
onFinal: function() {
//doRegister();
}
});
}
}
};
buttons[langPack.core.iface.dialodCloseButton]=function() { UI.closeDialog('addgrp'); UI.setLocation("/"); load(); }
let authProfiles=[{val: '', title: "--"+langPack.core.iface.authTypeSelectorStub+"--"},{val: 'password',title: langPack.core.iface.authTypePasswd}];
$.each(API.settings.get("oauthProfiles"), function(key,val) {
authProfiles.push({val: "oauth_"+val.id, title: langPack.core.iface.authTypeExt+" "+val.name});
});
UI.createDialog(
UI.addFieldGroup([
UI.addField({title: langPack.core.iface.users.email, type: "input", item: "reg_email", reqx:true}),
UI.addField({title: langPack.core.iface.users.regCode, type: "input", item: "reg_code",reqx:false}),
UI.addField({title: langPack.core.iface.loginWith, type: "select", item: "reg_authtype",reqx:true, args: authProfiles, onChange: function(ref) {
if ($(ref.currentTarget).val()=='password') {
$("#reg_fullname").prop("disabled",false);
$("#reg_login").prop("disabled",false);
$("#reg_pass1").prop("disabled",false);
$("#reg_pass2").prop("disabled",false);
} else {
$("#reg_fullname").prop("disabled",true).val("");
$("#reg_login").prop("disabled",true).val("");
$("#reg_pass1").prop("disabled",true).val("");
$("#reg_pass2").prop("disabled",true).val("");
}
}}),
UI.addField({title: langPack.core.iface.users.fullName, type: "input", item: "reg_fullname",reqx: true, disabled: true}),
UI.addField({title: langPack.core.iface.users.login, type: "input", item: "reg_login",reqx:true, disabled: true}),
UI.addField({title: langPack.core.iface.password, type: "passwordNew", item: "reg_pass1",reqx:true, disabled: true, newPasswdGenCallback: function(passwd) {$("#reg_pass2").val(passwd).addClass("changed"); }}),
UI.addField({title: langPack.core.iface.passConfirm, type: "password", item: "reg_pass2",reqx:true, disabled: true}),
]),
langPack.core.iface.dialogRegisterTitle,
buttons,
515,1,'addgrp');
let fprd=sessionStorage.getItem("foxPreRegisterData")
if (fprd) {
fprd=JSON.parse(fprd);
$("#reg_email").val(fprd.email);
$("#reg_code").val(fprd.regCode);
$("#reg_authtype").val(fprd.authType);
}
if (typeof(regCode)=="string") {
$("#reg_code").val(regCode);
}
UI.openDialog('addgrp');
}