| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- $(() => {
- class AccessManager {
- #linkStoredAccesses = new Set();
- #isAdmin = false;
- constructor() {
- this.#linkStoredAccesses.clear();
- let linkStoredAccesses = [];
- try {
- linkStoredAccesses = (JSON.parse(localStorage?.getItem("accessLinks") || "[]") || []);
- } catch (err) {
- console.error(err);
- }
- linkStoredAccesses.forEach(i => this.#linkStoredAccesses.add(i));
- }
- #UpdateStorage() {
- let arr = Array.from(this.#linkStoredAccesses).reduce((acc, i) => { acc[i.key] = i; return acc; }, {});
- arr = Object.keys(arr).map(i => arr[i]);
- this.#linkStoredAccesses = new Set(arr);
- localStorage?.setItem("accessLinks", JSON.stringify(arr));
- }
- Logout(code) {
- let storedLink = false;
- this.#linkStoredAccesses.forEach(i => {
- if (i.key === code) {
- this.#linkStoredAccesses.delete(i);
- storedLink = true;
- }
- });
- if (storedLink)
- this.#UpdateStorage();
- return LoadingTasks.push(() => {
- return new Promise(ok => {
- $.ajax({
- url: `/api/access/${code}`,
- type: "DELETE",
- success: async data => {
- window.ReloadAccessList(data);
- await window.indexedData.removeAll();
- await MediaStorage.Instance.rebuildMetaList();
- ok();
- },
- error: err => ok(false),
- });
- });
- });
- }
- IsAdmin() {
- return this.#isAdmin;
- }
- LinkLogin(linkList) {
- return new Promise(ok => {
- $.ajax({
- url: "/api/access/link",
- type: "POST",
- data: { linkIds: JSON.stringify(Array.from(linkList)) },
- success: async data => {
- for (let i in data)
- data[i].linkId && this.#linkStoredAccesses.add({key: i, value: data[i].linkId });
- this.#isAdmin = data.isAdmin;
- this.#UpdateStorage();
- window.ReloadAccessList(data);
- ok();
- },
- error: err => ok(false),
- });
- });
- }
- SendTotpCodeToEmail(email) {
- return new Promise(ok => {
- $.ajax({
- url: "/api/access/totp/send",
- type: "POST",
- data: { email: email },
- success: () => ok(),
- error: () => ok()
- });
- });
- }
- LoginUserEmailAndTotp(email, code) {
- return new Promise((ok, ko) => {
- $.ajax({
- url: "/api/access/totp/validate",
- type: "POST",
- data: { email: email, code: code },
- success: async data => {
- this.#isAdmin = data.isAdmin;
- window.ReloadAccessList(data);
- ok();
- },
- error: err => ko(err.responseText)
- });
- });
- }
- LoginUserPass(username, password) {
- return new Promise((ok, ko) => {
- $.ajax({
- url: "/api/access/login",
- type: "POST",
- data: { username: username, password: password },
- success: async data => {
- this.#isAdmin = data.isAdmin;
- window.ReloadAccessList(data);
- ok();
- },
- error: err => {
- ko(err.responseText);
- }
- });
- });
- }
- async RebuildAccess() {
- if (this.#linkStoredAccesses.size) {
- return LoadingTasks.push(() => {
- return this.LinkLogin(Array.from(this.#linkStoredAccesses).map(x => x.value));
- });
- } else {
- return LoadingTasks.push(() => {
- return new Promise(ok => {
- $.get("/api/access/list", data => {
- for (let i in data) {
- data[i].linkId && this.#linkStoredAccesses.add({key: i, value: data[i].linkId });
- }
- this.#isAdmin = data.isAdmin;
- this.#UpdateStorage();
- window.ReloadAccessList(data);
- MediaStorage.Instance.rebuildMetaList().finally(ok);
- });
- });
- });
- }
- }
- }
- window.AccessManager = new AccessManager();
- });
|