workadventure/pusher/src/Services/AdminApi.ts

129 lines
4.2 KiB
TypeScript
Raw Normal View History

2021-06-24 10:09:10 +02:00
import { ADMIN_API_TOKEN, ADMIN_API_URL } from "../Enum/EnvironmentVariable";
import Axios from "axios";
2021-06-24 10:09:10 +02:00
import { GameRoomPolicyTypes } from "_Model/PusherRoom";
import { CharacterTexture } from "./AdminApi/CharacterTexture";
import { MapDetailsData } from "./AdminApi/MapDetailsData";
import { RoomRedirect } from "./AdminApi/RoomRedirect";
export interface AdminApiData {
roomUrl: string;
email: string | null;
2021-06-24 10:09:10 +02:00
mapUrlStart: string;
tags: string[];
policy_type: number;
userUuid: string;
messages?: unknown[];
textures: CharacterTexture[];
}
2021-01-15 03:19:58 +01:00
export interface AdminBannedData {
2021-06-24 10:09:10 +02:00
is_banned: boolean;
message: string;
2021-01-15 03:19:58 +01:00
}
export interface FetchMemberDataByUuidResponse {
userUuid: string;
tags: string[];
2021-06-24 10:09:10 +02:00
visitCardUrl: string | null;
textures: CharacterTexture[];
messages: unknown[];
2021-03-01 22:32:50 +01:00
anonymous?: boolean;
}
class AdminApi {
async fetchMapDetails(playUri: string): Promise<MapDetailsData | RoomRedirect> {
if (!ADMIN_API_URL) {
2021-06-24 10:09:10 +02:00
return Promise.reject(new Error("No admin backoffice set!"));
}
const params: { playUri: string } = {
playUri,
};
2021-06-24 10:09:10 +02:00
const res = await Axios.get(ADMIN_API_URL + "/api/map", {
headers: { Authorization: `${ADMIN_API_TOKEN}` },
params,
});
return res.data;
}
async fetchMemberDataByUuid(
userIdentifier: string | null,
roomId: string,
ipAddress: string
): Promise<FetchMemberDataByUuidResponse> {
if (!ADMIN_API_URL) {
2021-06-24 10:09:10 +02:00
return Promise.reject(new Error("No admin backoffice set!"));
}
2021-06-24 10:09:10 +02:00
const res = await Axios.get(ADMIN_API_URL + "/api/room/access", {
params: { userIdentifier, roomId, ipAddress },
2021-06-24 10:09:10 +02:00
headers: { Authorization: `${ADMIN_API_TOKEN}` },
});
2021-03-01 22:32:50 +01:00
return res.data;
}
async fetchMemberDataByToken(organizationMemberToken: string): Promise<AdminApiData> {
if (!ADMIN_API_URL) {
2021-06-24 10:09:10 +02:00
return Promise.reject(new Error("No admin backoffice set!"));
}
//todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case.
2021-06-24 10:09:10 +02:00
const res = await Axios.get(ADMIN_API_URL + "/api/login-url/" + organizationMemberToken, {
headers: { Authorization: `${ADMIN_API_TOKEN}` },
});
return res.data;
}
async fetchCheckUserByToken(organizationMemberToken: string): Promise<AdminApiData> {
if (!ADMIN_API_URL) {
2021-06-24 10:09:10 +02:00
return Promise.reject(new Error("No admin backoffice set!"));
}
//todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case.
2021-06-24 10:09:10 +02:00
const res = await Axios.get(ADMIN_API_URL + "/api/check-user/" + organizationMemberToken, {
headers: { Authorization: `${ADMIN_API_TOKEN}` },
});
return res.data;
}
2021-06-24 10:09:10 +02:00
reportPlayer(
reportedUserUuid: string,
reportedUserComment: string,
reporterUserUuid: string,
reportWorldSlug: string
) {
return Axios.post(
`${ADMIN_API_URL}/api/report`,
{
reportedUserUuid,
reportedUserComment,
reporterUserUuid,
2021-06-24 10:09:10 +02:00
reportWorldSlug,
},
{
2021-06-24 10:09:10 +02:00
headers: { Authorization: `${ADMIN_API_TOKEN}` },
}
);
}
2021-01-15 03:19:58 +01:00
async verifyBanUser(userUuid: string, ipAddress: string, roomUrl: string): Promise<AdminBannedData> {
2021-01-15 03:19:58 +01:00
if (!ADMIN_API_URL) {
2021-06-24 10:09:10 +02:00
return Promise.reject(new Error("No admin backoffice set!"));
2021-01-15 03:19:58 +01:00
}
//todo: this call can fail if the corresponding world is not activated or if the token is invalid. Handle that case.
2021-06-24 10:09:10 +02:00
return Axios.get(
ADMIN_API_URL +
"/api/ban" +
2021-06-24 10:09:10 +02:00
"?ipAddress=" +
encodeURIComponent(ipAddress) +
2021-06-24 10:09:10 +02:00
"&token=" +
encodeURIComponent(userUuid) +
"&roomUrl=" +
encodeURIComponent(roomUrl),
2021-06-24 10:09:10 +02:00
{ headers: { Authorization: `${ADMIN_API_TOKEN}` } }
2021-01-15 03:19:58 +01:00
).then((data) => {
return data.data;
});
}
}
export const adminApi = new AdminApi();