summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--api/assets/autoRegister.js57
-rw-r--r--api/assets/checkLocale.js47
-rw-r--r--api/client_test/index.html107
-rw-r--r--api/src/Server.ts2
-rw-r--r--api/src/routes/guilds/templates/index.ts26
-rw-r--r--bundle/scripts/build.js4
-rw-r--r--bundle/src/start.ts7
-rw-r--r--bundle/src/stats.ts2
-rw-r--r--util/src/entities/Config.ts12
9 files changed, 152 insertions, 112 deletions
diff --git a/api/assets/autoRegister.js b/api/assets/autoRegister.js
new file mode 100644

index 00000000..29f93370 --- /dev/null +++ b/api/assets/autoRegister.js
@@ -0,0 +1,57 @@ + // Auto register guest account: + const prefix = [ + "mysterious", + "adventurous", + "courageous", + "precious", + "cynical", + "despicable", + "suspicious", + "gorgeous", + "lovely", + "stunning", + "based", + "keyed", + "ratioed", + "twink", + "phoned" + ]; + const suffix = [ + "Anonymous", + "Lurker", + "User", + "Enjoyer", + "Hunk", + "Top", + "Bottom", + "Sub", + "Coolstar", + "Wrestling", + "TylerTheCreator", + "Ad" + ]; + + Array.prototype.random = function () { + return this[Math.floor(Math.random() * this.length)]; + }; + + function _generateName() { + return `${prefix.random()}${suffix.random()}`; + } + + const token = JSON.parse(localStorage.getItem("token")); + if (!token && location.pathname !== "/login" && location.pathname !== "/register") { + fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/auth/register`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ username: `${_generateName()}`, consent: true }) //${Date.now().toString().slice(-4)} + }) + .then((x) => x.json()) + .then((x) => { + localStorage.setItem("token", `"${x.token}"`); + if (!window.localStorage) { + // client already loaded -> need to reload to apply the newly registered user token + location.reload(); + } + }); + } diff --git a/api/assets/checkLocale.js b/api/assets/checkLocale.js new file mode 100644
index 00000000..016d66c8 --- /dev/null +++ b/api/assets/checkLocale.js
@@ -0,0 +1,47 @@ + const localStorage = window.localStorage; + // TODO: remote auth + // window.GLOBAL_ENV.REMOTE_AUTH_ENDPOINT = window.GLOBAL_ENV.GATEWAY_ENDPOINT.replace(/wss?:/, ""); + localStorage.setItem("gatewayURL", window.GLOBAL_ENV.GATEWAY_ENDPOINT); + localStorage.setItem( + "DeveloperOptionsStore", + `{"trace":false,"canary":false,"logGatewayEvents":true,"logOverlayEvents":true,"logAnalyticsEvents":true,"sourceMapsEnabled":false,"axeEnabled":false}` + ); + + const supportedLocales = [ + "bg", + "cs", + "da", + "de", + "el", + "en-GB", + "es-ES", + "fi", + "fr", + "hi", + "hr", + "hu", + "it", + "ja", + "ko", + "lt", + "nl", + "no", + "pl", + "pt-BR", + "ro", + "ru", + "sv-SE", + "th", + "tr", + "uk", + "vi", + "zh-CN", + "zh-TW" + ]; + + const settings = JSON.parse(localStorage.getItem("UserSettingsStore")); + if (settings && !supportedLocales.includes(settings.locale)) { + // fix client locale wrong and client not loading at all + settings.locale = "en-US"; + localStorage.setItem("UserSettingsStore", JSON.stringify(settings)); + } \ No newline at end of file diff --git a/api/client_test/index.html b/api/client_test/index.html
index a68b191a..92499034 100644 --- a/api/client_test/index.html +++ b/api/client_test/index.html
@@ -38,112 +38,9 @@ ALGOLIA_KEY: "aca0d7082e4e63af5ba5917d5e96bed0" }; GLOBAL_ENV.MEDIA_PROXY_ENDPOINT = location.protocol + "//" + GLOBAL_ENV.CDN_HOST; - const localStorage = window.localStorage; - // TODO: remote auth - // window.GLOBAL_ENV.REMOTE_AUTH_ENDPOINT = window.GLOBAL_ENV.GATEWAY_ENDPOINT.replace(/wss?:/, ""); - localStorage.setItem("gatewayURL", window.GLOBAL_ENV.GATEWAY_ENDPOINT); - localStorage.setItem( - "DeveloperOptionsStore", - `{"trace":false,"canary":false,"logGatewayEvents":true,"logOverlayEvents":true,"logAnalyticsEvents":true,"sourceMapsEnabled":false,"axeEnabled":false}` - ); - - // Auto register guest account: - const prefix = [ - "mysterious", - "adventurous", - "courageous", - "precious", - "cynical", - "despicable", - "suspicious", - "gorgeous", - "lovely", - "stunning", - "based", - "keyed", - "ratioed", - "twink", - "phoned" - ]; - const suffix = [ - "Anonymous", - "Lurker", - "User", - "Enjoyer", - "Hunk", - "Top", - "Bottom", - "Sub", - "Coolstar", - "Wrestling", - "TylerTheCreator", - "Ad" - ]; - - Array.prototype.random = function () { - return this[Math.floor(Math.random() * this.length)]; - }; - - function _generateName() { - return `${prefix.random()}${suffix.random()}`; - } - - const token = JSON.parse(localStorage.getItem("token")); - if (!token && location.pathname !== "/login" && location.pathname !== "/register") { - fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/auth/register`, { - method: "POST", - headers: { "content-type": "application/json" }, - body: JSON.stringify({ username: `${_generateName()}`, consent: true }) //${Date.now().toString().slice(-4)} - }) - .then((x) => x.json()) - .then((x) => { - localStorage.setItem("token", `"${x.token}"`); - if (!window.localStorage) { - // client already loaded -> need to reload to apply the newly registered user token - location.reload(); - } - }); - } - - const supportedLocales = [ - "bg", - "cs", - "da", - "de", - "el", - "en-GB", - "es-ES", - "fi", - "fr", - "hi", - "hr", - "hu", - "it", - "ja", - "ko", - "lt", - "nl", - "no", - "pl", - "pt-BR", - "ro", - "ru", - "sv-SE", - "th", - "tr", - "uk", - "vi", - "zh-CN", - "zh-TW" - ]; - - const settings = JSON.parse(localStorage.getItem("UserSettingsStore")); - if (settings && !supportedLocales.includes(settings.locale)) { - // fix client locale wrong and client not loading at all - settings.locale = "en-US"; - localStorage.setItem("UserSettingsStore", JSON.stringify(settings)); - } </script> + <script src="/assets/autoRegister.js"></script> + <script src="/assets/checkLocale.js"></script> <script src="/assets/479a2f1e7d625dc134b9.js"></script> <script src="/assets/a15fd133a1d2d77a2424.js"></script> <script src="/assets/97e6fa22aa08ee4daa5e.js"></script> diff --git a/api/src/Server.ts b/api/src/Server.ts
index a6887fd4..c16bac5c 100644 --- a/api/src/Server.ts +++ b/api/src/Server.ts
@@ -85,6 +85,8 @@ export class FosscordServer extends Server { }); this.app = app; + app.use("/api/v6", api); + app.use("/api/v7", api); app.use("/api/v8", api); app.use("/api/v9", api); app.use("/api", api); // allow unversioned requests diff --git a/api/src/routes/guilds/templates/index.ts b/api/src/routes/guilds/templates/index.ts
index 86316d23..dd906198 100644 --- a/api/src/routes/guilds/templates/index.ts +++ b/api/src/routes/guilds/templates/index.ts
@@ -1,8 +1,11 @@ import { Request, Response, Router } from "express"; const router: Router = Router(); import { Template, Guild, Role, Snowflake, Config, User, Member } from "@fosscord/util"; +const { enabled, allowTemplateCreation, allowDiscordTemplates, allowRaws } = Config.get().templates; import { route } from "@fosscord/api"; import { DiscordApiErrors } from "@fosscord/util"; +import fetch from "node-fetch"; + export interface GuildTemplateCreateSchema { name: string; @@ -10,14 +13,35 @@ export interface GuildTemplateCreateSchema { } router.get("/:code", route({}), async (req: Request, res: Response) => { + if (!enabled) res.json({ code: 403, message: "Template creation & usage is disabled on this instance." }).sendStatus(403); + const { code } = req.params; - const template = await Template.findOneOrFail({ code: code }); + if (code.startsWith("discord:")) { + if (!allowDiscordTemplates) return res.json({ code: 403, message: "Discord templates cannot be used on this instance." }).sendStatus(403); + const discordTemplateID = code.split("discord:", 2)[1]; + + const discordTemplateData = await fetch(`https://discord.com/api/v9/guilds/templates/${discordTemplateID}`, { + method: "get", + headers: { "Content-Type": "application/json" } + }); + return res.json(await discordTemplateData.json()); + } + if (code.startsWith("external:")) { + if (!allowRaws) return res.json({ code: 403, message: "Importing raws is disabled on this instance." }).sendStatus(403); + + return res.json(code.split("external:", 2)[1]); + } + + const template = await Template.findOneOrFail({ code: code }); res.json(template); }); router.post("/:code", route({ body: "GuildTemplateCreateSchema" }), async (req: Request, res: Response) => { + if (!enabled) return res.json({ code: 403, message: "Template creation & usage is disabled on this instance." }).sendStatus(403); + if (!allowTemplateCreation) return res.json({ code: 403, message: "Template creation is disabled on this instance." }).sendStatus(403); + const { code } = req.params; const body = req.body as GuildTemplateCreateSchema; diff --git a/bundle/scripts/build.js b/bundle/scripts/build.js
index ad00d47f..affd7892 100644 --- a/bundle/scripts/build.js +++ b/bundle/scripts/build.js
@@ -38,8 +38,8 @@ dirs.forEach((a) => { ); }); -console.log("Copying src files done"); -console.log("Compiling src files ..."); +console.log("[1/2] Copying src files done"); +console.log("[2/2] Compiling src files ..."); console.log( execSync( diff --git a/bundle/src/start.ts b/bundle/src/start.ts
index 4445fde6..8725ba61 100644 --- a/bundle/src/start.ts +++ b/bundle/src/start.ts
@@ -38,11 +38,12 @@ if (cluster.isMaster) { })` )} -Current commit: ${ +Commit Hash: ${ commit !== null ? `${cyan(commit)} (${yellow(commit.slice(0, 7))})` : "Unknown (Git cannot be found)" } +Cores: ${cyan(cores)} `) ); @@ -65,7 +66,7 @@ Current commit: ${ let delay = process.env.DATABASE?.includes("://") ? 0 : i * 1000; setTimeout(() => { cluster.fork(); - console.log(`[Process] worker ${i} started.`); + console.log(`[Process] worker ${cyan(i)} started.`); }, delay); } @@ -80,7 +81,7 @@ Current commit: ${ cluster.on("exit", (worker: any, code: any, signal: any) => { console.log( `[Worker] ${red( - `died with pid: ${worker.process.pid} , restarting ...` + `died with PID: ${worker.process.pid} , restarting ...` )}` ); cluster.fork(); diff --git a/bundle/src/stats.ts b/bundle/src/stats.ts
index 9bd9131e..8d87f9d9 100644 --- a/bundle/src/stats.ts +++ b/bundle/src/stats.ts
@@ -6,7 +6,7 @@ export function initStats() { console.log(`[Path] running in ${__dirname}`); console.log(`[CPU] ${osu.cpu.model()} Cores x${osu.cpu.count()}`); console.log(`[System] ${os.platform()} ${os.arch()}`); - console.log(`[Process] running with pid: ${process.pid}`); + console.log(`[Process] running with PID: ${process.pid}`); if (process.getuid && process.getuid() === 0) { console.warn( red( diff --git a/util/src/entities/Config.ts b/util/src/entities/Config.ts
index b3167ac7..cac5d4da 100644 --- a/util/src/entities/Config.ts +++ b/util/src/entities/Config.ts
@@ -160,6 +160,12 @@ export interface ConfigValue { kafka: { brokers: KafkaBroker[] | null; }; + templates: { + enabled: Boolean; + allowTemplateCreation: Boolean; + allowDiscordTemplates: Boolean; + allowRaws: Boolean; + } } export const DefaultConfigOptions: ConfigValue = { @@ -321,4 +327,10 @@ export const DefaultConfigOptions: ConfigValue = { kafka: { brokers: null, }, + templates: { + enabled: true, + allowTemplateCreation: true, + allowDiscordTemplates: true, + allowRaws: false + } };