t00-multiuser/server/controller/ApiController.ts

66 lines
No EOL
2 KiB
TypeScript

import ApiLoginModel from "../models/api/ApiLoginModel";
import Config from "../objects/Config";
import UserService from "../services/UserService";
import Controller from "./Controller";
// for Git server lookup
let cachedVersion = "";
let cachedClient = "";
let cacheExpiry = 0;
export default class ApiController extends Controller {
public async Login_Post_AllowAnonymous(apiLoginModel: ApiLoginModel) {
this.res.header("access-control-allow-origin", "*");
if (typeof(apiLoginModel.username) !== "string" || typeof(apiLoginModel.password) !== "string") {
return this.badRequest();
}
const user = await UserService.AuthenticateUser(apiLoginModel.username, apiLoginModel.password);
if (user) {
return this.ok(user.APIKey);
}
return this.unauthorised("Username or Password incorrect");
}
public async Version_Post_AllowAnonymous() {
this.res.header("access-control-allow-origin", "*");
if (Date.now() < cacheExpiry) {
this.ok(cachedVersion);
} else {
const response = await fetch(`http://${Config.githost}/tgpholly/t00-multiuser/raw/branch/master/client/Terminal-00-Multiuser.user.js?${Date.now()}`);
if (response.status === 200) {
const content = cachedClient = await response.text();
if (content.includes("@version")) {
cachedVersion = content.split("@version")[1].split("\n")[0].trim().split(".").join("");
cacheExpiry = Date.now() + 30000;
return this.ok(cachedVersion);
} else {
return this.ok("0");
}
} else {
return this.ok("0");
}
}
}
public async LatestClient_Get() {
if (Date.now() < cacheExpiry) {
this.ok(cachedClient);
} else {
fetch(`http://${Config.githost}/tgpholly/t00-multiuser/raw/branch/master/client/Terminal-00-Multiuser.user.js?${Date.now()}`)
.then(async response => {
if (response.status === 200) {
cachedClient = await response.text();
return this.ok(cachedClient);
} else {
return this.badRequest();
}
}).catch(() => {
return this.badRequest();
});
}
}
}