add private and public endpoint

This commit is contained in:
Flam3rboy 2021-09-25 23:55:19 +02:00
parent 1c49d82400
commit 4b2e93c84b
6 changed files with 27 additions and 67 deletions

View File

@ -5,14 +5,14 @@ import { route } from "@fosscord/api";
const router = Router(); const router = Router();
router.get("/", route({}), (req: Request, res: Response) => { router.get("/", route({}), (req: Request, res: Response) => {
const { endpoint } = Config.get().gateway; const { endpointPublic } = Config.get().gateway;
res.json({ url: endpoint || process.env.GATEWAY || "ws://localhost:3002" }); res.json({ url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002" });
}); });
router.get("/bot", route({}), (req: Request, res: Response) => { router.get("/bot", route({}), (req: Request, res: Response) => {
const { endpoint } = Config.get().gateway; const { endpointPublic } = Config.get().gateway;
res.json({ res.json({
url: endpoint || process.env.GATEWAY || "ws://localhost:3002", url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002",
shards: 1, shards: 1,
session_start_limit: { session_start_limit: {
total: 1000, total: 1000,

View File

@ -1,53 +0,0 @@
import { Config } from "@fosscord/util";
import FormData from "form-data";
import { HTTPError } from "lambert-server";
import fetch from "node-fetch";
export async function uploadFile(path: string, file: Express.Multer.File) {
const form = new FormData();
form.append("file", file.buffer, {
contentType: file.mimetype,
filename: file.originalname
});
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, {
headers: {
signature: Config.get().security.requestSignature,
...form.getHeaders()
},
method: "POST",
body: form
});
const result = await response.json();
if (response.status !== 200) throw result;
return result;
}
export async function handleFile(path: string, body?: string): Promise<string | undefined> {
if (!body || !body.startsWith("data:")) return body;
try {
const mimetype = body.split(":")[1].split(";")[0];
const buffer = Buffer.from(body.split(",")[1], "base64");
// @ts-ignore
const { id } = await uploadFile(path, { buffer, mimetype, originalname: "banner" });
return id;
} catch (error) {
console.error(error);
throw new HTTPError("Invalid " + path);
}
}
export async function deleteFile(path: string) {
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, {
headers: {
signature: Config.get().security.requestSignature
},
method: "DELETE"
});
const result = await response.json();
if (response.status !== 200) throw result;
return result;
}

View File

@ -24,16 +24,24 @@ const gateway = new GatewayServer({ server, port, production });
async function main() { async function main() {
await initDatabase(); await initDatabase();
await Config.init(); await Config.init();
// only set endpointPublic, if not already set
await Config.set({ await Config.set({
cdn: { cdn: {
endpointClient: "${location.host}", endpointClient: "${location.host}",
endpoint: `http://localhost:${port}`, endpointPrivate: `http://localhost:${port}`,
...(!Config.get().cdn.endpointPublic && {
endpointPublic: `http://localhost:${port}`,
}),
}, },
gateway: { gateway: {
endpointClient: '${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}', endpointClient:
endpoint: `ws://localhost:${port}`, '${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}',
endpointPrivate: `ws://localhost:${port}`,
...(!Config.get().gateway.endpointPublic && {
endpointPublic: `http://localhost:${port}`,
}),
}, },
}); } as any);
await Promise.all([api.start(), cdn.start(), gateway.start()]); await Promise.all([api.start(), cdn.start(), gateway.start()]);
console.log(`[Server] listening on port ${port}`); console.log(`[Server] listening on port ${port}`);

View File

@ -9,16 +9,20 @@ export function initStats() {
console.log(`[Process] running with pid: ${process.pid}`); console.log(`[Process] running with pid: ${process.pid}`);
setInterval(async () => { setInterval(async () => {
const [cpuUsed, memory, network] = await Promise.all([osu.cpu.usage(), osu.mem.info(), osu.netstat.inOut()]); const [cpuUsed, memory, network] = await Promise.all([
osu.cpu.usage(),
osu.mem.info(),
osu.netstat.inOut(),
]);
var networkUsage = ""; var networkUsage = "";
if (typeof network === "object") { if (typeof network === "object") {
networkUsage = `| [Network]: in ${network.total.inputMb}mb | out ${network.total.outputMb}mb`; networkUsage = `| [Network]: in ${network.total.inputMb}mb | out ${network.total.outputMb}mb`;
} }
console.log( console.log(
`[CPU] ${cpuUsed.toFixed(2)}% | [Memory] ${Math.round( `[CPU] ${cpuUsed.toPrecision(3)}% | [Memory] ${Math.round(
process.memoryUsage().rss / 1024 / 1024 process.memoryUsage().rss / 1024 / 1024
)}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}` )}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}`
); );
}, 1000 * 30); }, 1000 * 5);
} }

View File

@ -44,7 +44,8 @@ router.post(
if (ANIMATED_MIME_TYPES.includes(type.mime)) hash = `a_${hash}`; // animated icons have a_ infront of the hash if (ANIMATED_MIME_TYPES.includes(type.mime)) hash = `a_${hash}`; // animated icons have a_ infront of the hash
const path = `avatars/${user_id}/${hash}`; const path = `avatars/${user_id}/${hash}`;
const endpoint = Config.get().cdn.endpoint || "http://localhost:3003"; const endpoint =
Config.get().cdn.endpointPublic || "http://localhost:3003";
await storage.set(path, buffer); await storage.set(path, buffer);

View File

@ -11,7 +11,7 @@ export async function uploadFile(path: string, file: Express.Multer.File) {
filename: file.originalname, filename: file.originalname,
}); });
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { const response = await fetch(`${Config.get().cdn.endpointPrivate || "http://localhost:3003"}${path}`, {
headers: { headers: {
signature: Config.get().security.requestSignature, signature: Config.get().security.requestSignature,
...form.getHeaders(), ...form.getHeaders(),
@ -41,7 +41,7 @@ export async function handleFile(path: string, body?: string): Promise<string |
} }
export async function deleteFile(path: string) { export async function deleteFile(path: string) {
const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { const response = await fetch(`${Config.get().cdn.endpointPrivate || "http://localhost:3003"}${path}`, {
headers: { headers: {
signature: Config.get().security.requestSignature, signature: Config.get().security.requestSignature,
}, },