web-base/react/shared/api.js

206 lines
5.7 KiB
JavaScript
Raw Normal View History

2022-11-30 16:42:24 +01:00
import {Locale} from "./locale";
2020-06-14 12:38:35 +02:00
export default class API {
constructor() {
2020-06-14 22:35:01 +02:00
this.loggedIn = false;
this.user = { };
}
csrfToken() {
return this.loggedIn ? this.user.session.csrf_token : null;
}
async apiCall(method, params) {
params = params || { };
params.csrf_token = this.csrfToken();
let response = await fetch("/api/" + method, {
method: 'post',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(params)
});
2020-06-23 01:03:35 +02:00
let res = await response.json();
if (!res.success && res.msg === "You are not logged in.") {
document.location.reload();
}
return res;
2020-06-14 12:38:35 +02:00
}
2022-11-29 14:17:11 +01:00
/** Info **/
async info() {
return this.apiCall("info");
}
/** UserAPI **/
async login(username, password, rememberMe=false) {
return this.apiCall("user/login", { username: username, password: password, stayLoggedIn: rememberMe })
}
2020-06-14 12:38:35 +02:00
async fetchUser() {
2020-06-14 22:35:01 +02:00
let response = await fetch("/api/user/info");
let data = await response.json();
2022-11-29 14:17:11 +01:00
if (data) {
this.user = data["user"];
this.loggedIn = data["loggedIn"];
}
return data;
2020-06-14 12:38:35 +02:00
}
2020-07-02 00:47:45 +02:00
async editUser(id, username, email, password, groups, confirmed) {
2022-11-29 14:17:11 +01:00
return this.apiCall("user/edit", {
id: id, username: username, email: email,
password: password, groups: groups, confirmed: confirmed
});
2020-06-23 20:57:54 +02:00
}
2020-06-14 12:38:35 +02:00
async logout() {
2020-06-14 22:35:01 +02:00
return this.apiCall("user/logout");
2020-06-14 12:38:35 +02:00
}
2020-06-15 00:00:15 +02:00
2020-06-23 16:26:04 +02:00
async getUser(id) {
return this.apiCall("user/get", { id: id });
}
async deleteUser(id) {
return this.apiCall("user/delete", { id: id });
}
async fetchUsers(pageNum = 1, count = 20) {
return this.apiCall("user/fetch", { page: pageNum, count: count });
2020-06-15 20:07:43 +02:00
}
2020-06-15 21:14:59 +02:00
async fetchGroups(pageNum = 1, count = 20) {
return this.apiCall("groups/fetch", { page: pageNum, count: count });
2020-06-15 21:14:59 +02:00
}
2020-06-17 14:30:37 +02:00
async inviteUser(username, email) {
return this.apiCall("user/invite", { username: username, email: email });
}
async createUser(username, email, password, confirmPassword) {
return this.apiCall("user/create", { username: username, email: email, password: password, confirmPassword: confirmPassword });
}
2020-06-17 23:50:08 +02:00
2022-11-29 14:17:11 +01:00
/** Stats **/
2020-06-17 23:50:08 +02:00
async getStats() {
return this.apiCall("stats");
}
2020-06-19 13:13:13 +02:00
2022-11-29 14:17:11 +01:00
/** RoutesAPI **/
2020-06-19 13:13:13 +02:00
async getRoutes() {
return this.apiCall("routes/fetch");
}
2020-06-19 16:37:44 +02:00
async saveRoutes(routes) {
2020-06-24 01:09:08 +02:00
return this.apiCall("routes/save", { routes: routes });
}
2022-11-29 14:17:11 +01:00
/** GroupAPI **/
2020-06-24 01:09:08 +02:00
async createGroup(name, color) {
return this.apiCall("groups/create", { name: name, color: color });
2020-06-19 16:37:44 +02:00
}
2020-06-24 01:23:37 +02:00
async deleteGroup(id) {
2022-06-20 19:52:31 +02:00
return this.apiCall("groups/delete", { id: id });
2020-06-24 01:23:37 +02:00
}
2020-06-26 01:47:43 +02:00
2022-11-29 14:17:11 +01:00
/** SettingsAPI **/
2020-06-26 01:47:43 +02:00
async getSettings(key = "") {
return this.apiCall("settings/get", { key: key });
}
2020-06-26 14:58:17 +02:00
async saveSettings(settings) {
return this.apiCall("settings/set", { settings: settings });
}
2022-11-29 14:17:11 +01:00
/** MailAPI **/
2020-06-26 14:58:17 +02:00
async sendTestMail(receiver) {
2020-06-27 22:47:12 +02:00
return this.apiCall("mail/test", { receiver: receiver });
}
2022-11-29 14:17:11 +01:00
/** PermissionAPI **/
2020-06-27 22:47:12 +02:00
async fetchPermissions() {
return this.apiCall("permission/fetch");
}
async savePermissions(permissions) {
return this.apiCall("permission/save", { permissions: permissions });
2020-06-26 14:58:17 +02:00
}
2020-07-01 21:10:25 +02:00
2022-11-29 14:17:11 +01:00
/** VisitorsAPI **/
2020-07-01 21:10:25 +02:00
async getVisitors(type, date) {
return this.apiCall("visitors/stats", { type: type, date: date });
}
2022-11-29 14:17:11 +01:00
/** LanguageAPI **/
async getLanguages() {
return this.apiCall("language/get");
}
2022-11-30 16:42:24 +01:00
async setLanguage(params) {
let res = await this.apiCall("language/set", params);
if (res.success) {
Locale.getInstance().setLocale(res.language.code);
}
return res;
}
2022-11-29 14:17:11 +01:00
async setLanguageByCode(code) {
2022-11-30 16:42:24 +01:00
return this.setLanguage({ code: code });
2022-11-29 14:17:11 +01:00
}
async setLanguageByName(name) {
2022-11-30 16:42:24 +01:00
return this.setLanguage({ name: name });
}
async getLanguageEntries(modules, code=null, useCache=true) {
if (!Array.isArray(modules)) {
modules = [modules];
}
let locale = Locale.getInstance();
if (code === null) {
code = locale.currentLocale;
if (code === null && this.loggedIn) {
code = this.user.language.code;
}
}
if (code === null) {
return { success: false, msg: "No locale selected currently" };
}
let languageEntries = {};
if (useCache) {
// remove cached modules from request array
for (const module of [...modules]) {
let moduleEntries = locale.getModule(code, module);
if (moduleEntries) {
modules.splice(modules.indexOf(module), 1);
languageEntries = {...languageEntries, [module]: moduleEntries};
}
}
}
if (modules.length > 0) {
let data = await this.apiCall("language/getEntries", { code: code, modules: modules });
if (useCache) {
if (data && data.success) {
// insert into cache
for (const [module, entries] of Object.entries(data.entries)) {
locale.loadModule(code, module, entries);
}
data.entries = {...data.entries, ...languageEntries};
data.cached = false;
}
}
return data;
} else {
return { success: true, msg: "", entries: languageEntries, code: code, cached: true };
}
2022-11-29 14:17:11 +01:00
}
2020-06-14 12:38:35 +02:00
};