Files
pleno-vue/src/components/session/token/superUserObject.vue
T

168 lines
6.8 KiB
Vue

<script>
import { authenticatedRequest } from "@/components/session/authenticatedRequest.vue";
import { parseError } from "@/components/request/HandleGlobalError.vue";
import { clearEdgeGatewayWorkspaceCache } from "@/services/edgeGateways.js";
import { DatabaseSystemObject } from "@/components/session/token/superUser/systemDatabase.vue";
import { Cron } from "@/components/session/token/superUser/cron.vue";
import { Economic } from "@/components/session/token/superUser/modules/Economic/Economic.vue";
import { reCAPTCHA } from "@/components/session/token/superUser/modules/reCAPTCHA/reCAPTCHA.vue";
import { Email } from "@/components/session/token/superUser/modules/Email/Email.vue";
import { Backups } from "@/components/session/token/superUser/modules/Backups/Backups.vue";
import { MotorAPI } from "@/components/session/token/superUser/modules/motorapi/MotorAPI.vue";
import { Stripe } from "@/components/session/token/superUser/modules/stripe/Stripe.vue";
import { FXRatesAPI } from "@/components/session/token/superUser/modules/fxratesapi/FXRatesAPI.vue";
import { WeatherAPI } from "@/components/session/token/superUser/modules/weatherapi/WeatherAPI.vue";
import { Workfeed } from "@/components/session/token/superUser/modules/workfeed/Workfeed.vue";
import { GatewayAPI } from "@/components/session/token/superUser/modules/gatewayapi/GatewayAPI.vue";
import { XLVask } from "@/components/session/token/superUser/modules/xlvask/XLVask.vue";
import { Entra } from "@/components/session/token/superUser/modules/entra/Entra.vue";
import { Limble } from "@/components/session/token/superUser/modules/limble/Limble.vue";
import { OcrSpace } from "@/components/session/token/superUser/modules/ocrSpace/OcrSpace.vue";
import { OpenAI } from "@/components/session/token/superUser/modules/openAI/OpenAI.vue";
import { LicensePlateRecognizer } from "@/components/session/token/superUser/modules/licensePlateRecognizer/LicensePlateRecognizer.vue";
import { VirkData} from "@/components/session/token/superUser/modules/virkdata/VirkData.vue";
import { Shelly } from "@/components/session/token/superUser/modules/shelly/Shelly.vue";
import { SelfServe } from "@/components/session/token/superUser/modules/selfserve/SelfServe.vue";
import { Bird } from "@/components/session/token/superUser/modules/bird/Bird.vue";
import { EdgeGateway } from "@/components/session/token/superUser/modules/edgegateway/EdgeGateway.vue";
import { Failover } from "@/components/session/token/superUser/modules/failover/Failover.vue";
import { Coolify } from "@/components/session/token/superUser/modules/coolify/Coolify.vue";
import { ReleaseManager } from "@/components/session/token/superUser/modules/releasemanager/ReleaseManager.vue";
import { Slack } from "@/components/session/token/superUser/modules/slack/Slack.vue";
let qrCodeModulePromise;
const loadQRCodeModule = async () => {
if (!qrCodeModulePromise) {
qrCodeModulePromise = import("qrcode");
}
return qrCodeModulePromise;
};
/**
* The superuser object
*/
export const SuperUserObject = {
system: {
get database() { return DatabaseSystemObject; },
},
modules: {
get economic() { return Economic; },
get reCAPTCHA() { return reCAPTCHA; },
get email() { return Email; },
get backups() { return Backups; },
get motorapi() { return MotorAPI; },
get stripe() { return Stripe; },
get fxratesapi() { return FXRatesAPI; },
get weatherapi() { return WeatherAPI; },
get workfeed() { return Workfeed; },
get gatewayapi() { return GatewayAPI; },
get xlvask() { return XLVask; },
get entra() { return Entra; },
get limble() { return Limble; },
get ocrspace() { return OcrSpace; },
get openai() { return OpenAI; },
get licenseplaterecognizer() { return LicensePlateRecognizer; },
get virkdata() { return VirkData; },
get shelly() { return Shelly; },
get selfserve() { return SelfServe; },
get bird() { return Bird; },
get edgegateway() { return EdgeGateway; },
get failover() { return Failover; },
get coolify() { return Coolify; },
get releasemanager() { return ReleaseManager; },
get slack() { return Slack; },
},
/** Intimidate a user */
intimidate: {
/**
* Get an impersonation (session) token for a user
* @param userId
* @returns {Promise<string>} The impersonation token
*/
getImpersonationToken: async (userId) => {
return await authenticatedRequest("/su/intimidate", "POST", {user_id: userId})
.then(
(response) => {
// Return the token
return response.data.data.token;
}
)
.catch(
(error) => {
parseError(error, 'auth');
}
);
},
/**
* Intimidate a user
* @param userId
* @returns {Promise<void>}
*/
intimidateUser: async (userId) => {
return await authenticatedRequest("/su/intimidate", "POST", {user_id: userId})
.then(
(response) => {
// Save the current token, so we can restore it after the user has been intimidated
const currentToken = localStorage.getItem("token");
localStorage.setItem("superuser_token", currentToken);
// Set the token in the local storage
clearEdgeGatewayWorkspaceCache();
localStorage.setItem("token", response.data.data.token);
// Redirect the user to the dashboard
window.location = "/";
}
)
.catch(
(error) => {
parseError(error, 'auth');
}
);
},
/**
* Can the current superuser intimidate another superuser?
* @returns {boolean}
*/
canImpersonateAdmin: () => {
// TODO: Implement this function
return true;
},
/**
* Show a QR code for logging in as a user
* @param link
* @returns {Promise<string>} The QR code URL
*/
showImpersonationQRCode: async (link) => {
const { toDataURL } = await loadQRCodeModule();
return {
value: await toDataURL(link),
};
},
/**
* Go back from intimidating a user
*/
goBack: () => {
// Get the superuser token
const superuserToken = localStorage.getItem("superuser_token");
// Set the token in the local storage
clearEdgeGatewayWorkspaceCache();
localStorage.setItem("token", superuserToken);
// Clear the superuser token
localStorage.removeItem("superuser_token");
// Redirect the user to the dashboard
window.location = "/";
},
/**
* Check if the superuser is currently intimidating a user
* @returns {boolean}
*/
isIntimidated: () => {
return localStorage.getItem("superuser_token") !== null;
}
},
get cron() { return Cron; }
};
</script>