391 lines
12 KiB
JavaScript
391 lines
12 KiB
JavaScript
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');
|
||
} |