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;
|