2019-06-26 22:09:01 +02:00

85 lines
2.5 KiB
TypeScript

window.$ = require("jquery");
{
const request = require('request');
const util = require('util');
const request_post = util.promisify(request.post);
const api_url = "https://web.teaspeak.de/";
const btn_login = $("#btn_login");
btn_login.on('click', () => {
btn_login
.prop("disabled", true)
.empty()
.append($(document.createElement("i")).addClass("fa fa-circle-o-notch fa-spin"));
submit_login($("#user").val() as string, $("#pass").val() as string).then(data => {
$("#login").hide(500);
$("#success").show(500);
const ipc = require("electron").ipcRenderer;
ipc.send('teaforo-callback', data);
}).catch(error => {
console.log("Failed: " + error);
loginFailed(error);
});
});
async function submit_login(user: string, pass: string) : Promise<UserData> {
const {error, response, body} = await request_post(api_url + "auth.php", {
timeout: 5000,
form: {
action: "login",
user: user,
pass: pass
}
});
console.log("Error: %o", error);
console.log("response: %o", response);
console.log("body: %o", body);
const data = JSON.parse(body);
if(!data["success"]) throw data["msg"];
let user_data: UserData = {} as any;
user_data.session_id = data["sessionId"];
user_data.username = data["user_name"];
user_data.application_data = data["user_data"];
user_data.application_data_sign = data["user_sign"];
return user_data;
}
function loginFailed(err: string = "") {
btn_login
.prop("disabled", false)
.empty()
.append($(document.createElement("a")).text("Login"));
let errTag = $(".box .error");
if(err !== "") {
errTag.text(err).show(500);
} else errTag.hide(500);
}
//<i class="fa fa-circle-o-notch fa-spin" id="login-loader"></i>
$("#user").on('keydown', event => {
if(event.key == "Enter") $("#pass").focus();
});
$("#pass").on('keydown', event => {
if(event.key == "Enter") $("#btn_login").trigger("click");
});
//Patch for the external URL
$('body').on('click', 'a', (event) => {
event.preventDefault();
let link = (<any>event.target).href;
require("electron").shell.openExternal(link);
});
}