summary refs log tree commit diff
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/assets/autoRegister.js57
-rw-r--r--api/assets/dff87c953f43b561d71fbcfe8a93a79a.png0
-rw-r--r--api/assets/preload-plugins/autoRegister.js62
-rw-r--r--api/assets/user.css1
-rw-r--r--api/client_test/index.html28
-rw-r--r--api/package-lock.json2
-rw-r--r--api/src/middlewares/Authentication.ts3
-rw-r--r--api/src/routes/guilds/templates/index.ts8
-rw-r--r--api/src/routes/policies/instance/domains.ts18
-rw-r--r--api/src/routes/policies/instance/index.ts12
-rw-r--r--api/src/routes/policies/instance/limits.ts11
-rw-r--r--api/src/routes/track.ts11
12 files changed, 151 insertions, 62 deletions
diff --git a/api/assets/autoRegister.js b/api/assets/autoRegister.js
deleted file mode 100644

index 29f93370..00000000 --- a/api/assets/autoRegister.js +++ /dev/null
@@ -1,57 +0,0 @@ - // 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/dff87c953f43b561d71fbcfe8a93a79a.png b/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png new file mode 100644
index 00000000..e69de29b --- /dev/null +++ b/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png
diff --git a/api/assets/preload-plugins/autoRegister.js b/api/assets/preload-plugins/autoRegister.js new file mode 100644
index 00000000..bb0b903d --- /dev/null +++ b/api/assets/preload-plugins/autoRegister.js
@@ -0,0 +1,62 @@ +// Auto register guest account: +const prefix = [ + "mysterious", + "adventurous", + "courageous", + "precious", + "cynical", + "flamer ", + "despicable", + "suspicious", + "gorgeous", + "impeccable", + "lovely", + "stunning", + "keyed", + "phoned", + "glorious", + "amazing", + "strange", + "arcane" +]; +const suffix = [ + "Anonymous", + "Boy", + "Lurker", + "Keyhitter", + "User", + "Enjoyer", + "Hunk", + "Coolstar", + "Wrestling", + "TylerTheCreator", + "Ad", + "Gamer", + "Games", + "Programmer" +]; + +Array.prototype.random = function () { + return this[Math.floor(Math.random() * this.length)]; +}; + +function _generateName() { + return `${prefix.random()}${suffix.random()}`; +} + +var 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/user.css b/api/assets/user.css new file mode 100644
index 00000000..a7e5c4f3 --- /dev/null +++ b/api/assets/user.css
@@ -0,0 +1 @@ +/* Your custom CSS goes here, enjoy! */ \ No newline at end of file diff --git a/api/client_test/index.html b/api/client_test/index.html
index 92499034..0b3a775a 100644 --- a/api/client_test/index.html +++ b/api/client_test/index.html
@@ -4,6 +4,10 @@ <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Discord Test Client</title> + <link rel="stylesheet" href="/assets/fosscord.css" /> + <link id="logincss" rel="stylesheet" href="/assets/fosscord-login.css" /> + <link id="customcss" rel="stylesheet" href="/assets/user.css" /> + <!-- preload plugin marker --> </head> <body> @@ -38,12 +42,34 @@ 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}` + ); + + setInterval(() => { + var token = JSON.parse(localStorage.getItem("token")); + if (token) { + document.querySelector("#logincss").remove(); + } + }, 1000); + + const settings = JSON.parse(localStorage.getItem("UserSettingsStore")); + if (settings && settings.locale.length <= 2) { + // 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> <script src="/assets/9b2b7f0632acd0c5e781.js"></script> + <!-- plugin marker --> </body> </html> diff --git a/api/package-lock.json b/api/package-lock.json
index e8ebd5bf..a4ad6b2b 100644 --- a/api/package-lock.json +++ b/api/package-lock.json
@@ -84,6 +84,7 @@ "pg": "^8.7.1", "proxy-agent": "^5.0.0", "reflect-metadata": "^0.1.13", + "sqlite3": "^5.0.2", "typeorm": "^0.2.38", "typescript": "^4.4.2", "typescript-json-schema": "^0.50.1" @@ -16162,6 +16163,7 @@ "pg": "^8.7.1", "proxy-agent": "^5.0.0", "reflect-metadata": "^0.1.13", + "sqlite3": "^5.0.2", "ts-node": "^10.2.1", "typeorm": "^0.2.38", "typescript": "^4.4.2", diff --git a/api/src/middlewares/Authentication.ts b/api/src/middlewares/Authentication.ts
index 59a181e6..8fbdd2b7 100644 --- a/api/src/middlewares/Authentication.ts +++ b/api/src/middlewares/Authentication.ts
@@ -11,6 +11,9 @@ export const NO_AUTHORIZATION_ROUTES = [ "/experiments", "/-/readyz", "/-/healthz", + "/science", + "/track", + "/policies/instance", /\/guilds\/\d+\/widget\.(json|png)/ ]; diff --git a/api/src/routes/guilds/templates/index.ts b/api/src/routes/guilds/templates/index.ts
index dd906198..3d922e85 100644 --- a/api/src/routes/guilds/templates/index.ts +++ b/api/src/routes/guilds/templates/index.ts
@@ -1,11 +1,9 @@ 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"; - +const router: Router = Router(); export interface GuildTemplateCreateSchema { name: string; @@ -13,10 +11,11 @@ export interface GuildTemplateCreateSchema { } router.get("/:code", route({}), async (req: Request, res: Response) => { + const { allowDiscordTemplates, allowRaws, enabled } = Config.get().templates; if (!enabled) res.json({ code: 403, message: "Template creation & usage is disabled on this instance." }).sendStatus(403); const { code } = req.params; - + 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]; @@ -39,6 +38,7 @@ router.get("/:code", route({}), async (req: Request, res: Response) => { }); router.post("/:code", route({ body: "GuildTemplateCreateSchema" }), async (req: Request, res: Response) => { + const { enabled, allowTemplateCreation, allowDiscordTemplates, allowRaws } = Config.get().templates; 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); diff --git a/api/src/routes/policies/instance/domains.ts b/api/src/routes/policies/instance/domains.ts new file mode 100644
index 00000000..20cd07ba --- /dev/null +++ b/api/src/routes/policies/instance/domains.ts
@@ -0,0 +1,18 @@ +import { Router, Request, Response } from "express"; +import { route } from "@fosscord/api"; +import { Config } from "@fosscord/util"; +import { config } from "dotenv" +const router = Router(); + +router.get("/",route({}), async (req: Request, res: Response) => { + const { cdn, gateway } = Config.get(); + + const IdentityForm = { + cdn: cdn.endpointPublic || process.env.CDN || "http://localhost:3001", + gateway: gateway.endpointPublic || process.env.GATEWAY || "ws://localhost:3002" + }; + + res.json(IdentityForm); +}); + +export default router; diff --git a/api/src/routes/policies/instance/index.ts b/api/src/routes/policies/instance/index.ts new file mode 100644
index 00000000..e3da014f --- /dev/null +++ b/api/src/routes/policies/instance/index.ts
@@ -0,0 +1,12 @@ +import { Router, Request, Response } from "express"; +import { route } from "@fosscord/api"; +import { Config } from "@fosscord/util"; +const router = Router(); + + +router.get("/",route({}), async (req: Request, res: Response) => { + const { general } = Config.get(); + res.json(general); +}); + +export default router; diff --git a/api/src/routes/policies/instance/limits.ts b/api/src/routes/policies/instance/limits.ts new file mode 100644
index 00000000..7de1476b --- /dev/null +++ b/api/src/routes/policies/instance/limits.ts
@@ -0,0 +1,11 @@ +import { Router, Request, Response } from "express"; +import { route } from "@fosscord/api"; +import { Config } from "@fosscord/util"; +const router = Router(); + +router.get("/",route({}), async (req: Request, res: Response) => { + const { limits } = Config.get(); + res.json(limits); +}); + +export default router; diff --git a/api/src/routes/track.ts b/api/src/routes/track.ts new file mode 100644
index 00000000..8556a3ad --- /dev/null +++ b/api/src/routes/track.ts
@@ -0,0 +1,11 @@ +import { Router, Response, Request } from "express"; +import { route } from "@fosscord/api"; + +const router = Router(); + +router.post("/", route({}), (req: Request, res: Response) => { + // TODO: + res.sendStatus(204); +}); + +export default router;