summary refs log tree commit diff
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2023-01-30 13:34:27 +1100
committerGitHub <noreply@github.com>2023-01-30 13:34:27 +1100
commit4906d9a78a17729949fa5e32d221b66f1d5b0f3f (patch)
treeef852b1f5f3e88a449428eeb7e10a43f92c7216c
parentImplement WebAuthn (#967) (diff)
downloadserver-4906d9a78a17729949fa5e32d221b66f1d5b0f3f.tar.xz
read-states/ack-bulk (#969)
-rw-r--r--assets/openapi.json107
-rw-r--r--assets/schemas.json37
-rw-r--r--src/api/routes/read-states/ack-bulk.ts41
-rw-r--r--src/util/schemas/AckBulkSchema.ts9
-rw-r--r--src/util/schemas/index.ts15
5 files changed, 209 insertions, 0 deletions
diff --git a/assets/openapi.json b/assets/openapi.json
index 0eafe6cb..7cb270b1 100644
--- a/assets/openapi.json
+++ b/assets/openapi.json
@@ -2316,6 +2316,41 @@
                     "days"
                 ]
             },
+            "AckBulkSchema": {
+                "type": "object",
+                "properties": {
+                    "read_states": {
+                        "type": "array",
+                        "items": [
+                            {
+                                "type": "object",
+                                "properties": {
+                                    "channel_id": {
+                                        "type": "string"
+                                    },
+                                    "message_id": {
+                                        "type": "string"
+                                    },
+                                    "read_state_type": {
+                                        "type": "integer"
+                                    }
+                                },
+                                "additionalProperties": false,
+                                "required": [
+                                    "channel_id",
+                                    "message_id",
+                                    "read_state_type"
+                                ]
+                            }
+                        ],
+                        "minItems": 1,
+                        "maxItems": 1
+                    }
+                },
+                "required": [
+                    "read_states"
+                ]
+            },
             "TransportMakeRequestResponse": {
                 "type": "object",
                 "properties": {
@@ -7030,6 +7065,78 @@
                     "read-states"
                 ]
             }
+        },
+        "/users/@me/mfa/webauthn/credentials/": {
+            "get": {
+                "security": [
+                    {
+                        "bearer": true
+                    }
+                ],
+                "tags": [
+                    "users"
+                ]
+            },
+            "post": {
+                "security": [
+                    {
+                        "bearer": true
+                    }
+                ],
+                "requestBody": {
+                    "required": true,
+                    "content": {
+                        "application/json": {
+                            "schema": {
+                                "$ref": "#/components/schemas/WebAuthnPostSchema"
+                            }
+                        }
+                    }
+                },
+                "tags": [
+                    "users"
+                ]
+            }
+        },
+        "/users/@me/mfa/webauthn/credentials/{key_id}/": {
+            "delete": {
+                "security": [
+                    {
+                        "bearer": true
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "key_id",
+                        "in": "path",
+                        "required": true,
+                        "schema": {
+                            "type": "string"
+                        },
+                        "description": "key_id"
+                    }
+                ],
+                "tags": [
+                    "users"
+                ]
+            }
+        },
+        "/auth/mfa/webauthn/": {
+            "post": {
+                "requestBody": {
+                    "required": true,
+                    "content": {
+                        "application/json": {
+                            "schema": {
+                                "$ref": "#/components/schemas/WebAuthnTotpSchema"
+                            }
+                        }
+                    }
+                },
+                "tags": [
+                    "auth"
+                ]
+            }
         }
     }
 }
\ No newline at end of file
diff --git a/assets/schemas.json b/assets/schemas.json
index c840b261..f40bcd79 100644
--- a/assets/schemas.json
+++ b/assets/schemas.json
@@ -1,4 +1,41 @@
 {
+    "AckBulkSchema": {
+        "type": "object",
+        "properties": {
+            "read_states": {
+                "type": "array",
+                "items": [
+                    {
+                        "type": "object",
+                        "properties": {
+                            "channel_id": {
+                                "type": "string"
+                            },
+                            "message_id": {
+                                "type": "string"
+                            },
+                            "read_state_type": {
+                                "type": "integer"
+                            }
+                        },
+                        "additionalProperties": false,
+                        "required": [
+                            "channel_id",
+                            "message_id",
+                            "read_state_type"
+                        ]
+                    }
+                ],
+                "minItems": 1,
+                "maxItems": 1
+            }
+        },
+        "additionalProperties": false,
+        "required": [
+            "read_states"
+        ],
+        "$schema": "http://json-schema.org/draft-07/schema#"
+    },
     "TransportMakeRequestResponse": {
         "type": "object",
         "properties": {
diff --git a/src/api/routes/read-states/ack-bulk.ts b/src/api/routes/read-states/ack-bulk.ts
new file mode 100644
index 00000000..f77ecedf
--- /dev/null
+++ b/src/api/routes/read-states/ack-bulk.ts
@@ -0,0 +1,41 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { AckBulkSchema, ReadState } from "@fosscord/util";
+const router = Router();
+
+router.post(
+	"/",
+	route({ body: "AckBulkSchema" }),
+	async (req: Request, res: Response) => {
+		const body = req.body as AckBulkSchema;
+
+		// TODO: what is read_state_type ?
+
+		await Promise.all([
+			// for every new state
+			...body.read_states.map(async (x) => {
+				// find an existing one
+				const ret =
+					(await ReadState.findOne({
+						where: {
+							user_id: req.user_id,
+							channel_id: x.channel_id,
+						},
+					})) ??
+					// if it doesn't exist, create it (not a promise)
+					ReadState.create({
+						user_id: req.user_id,
+						channel_id: x.channel_id,
+					});
+
+				ret.last_message_id = x.message_id;
+
+				return ret.save();
+			}),
+		]);
+
+		return res.status(204);
+	},
+);
+
+export default router;
diff --git a/src/util/schemas/AckBulkSchema.ts b/src/util/schemas/AckBulkSchema.ts
new file mode 100644
index 00000000..8e20723f
--- /dev/null
+++ b/src/util/schemas/AckBulkSchema.ts
@@ -0,0 +1,9 @@
+export interface AckBulkSchema {
+	read_states: [
+		{
+			channel_id: string;
+			message_id: string;
+			read_state_type: number; // WHat is this?
+		},
+	];
+}
diff --git a/src/util/schemas/index.ts b/src/util/schemas/index.ts
index 65e8b3cd..603141b5 100644
--- a/src/util/schemas/index.ts
+++ b/src/util/schemas/index.ts
@@ -69,6 +69,21 @@ export * from "./VanityUrlSchema";
 export * from "./VoiceIdentifySchema";
 export * from "./VoiceStateUpdateSchema";
 export * from "./VoiceVideoSchema";
+export * from "./IdentifySchema";
+export * from "./ActivitySchema";
+export * from "./LazyRequestSchema";
+export * from "./GuildUpdateSchema";
+export * from "./ChannelPermissionOverwriteSchema";
+export * from "./UserGuildSettingsSchema";
+export * from "./GatewayPayloadSchema";
+export * from "./RolePositionUpdateSchema";
+export * from "./ChannelReorderSchema";
+export * from "./UserSettingsSchema";
+export * from "./BotModifySchema";
+export * from "./ApplicationModifySchema";
+export * from "./ApplicationCreateSchema";
+export * from "./ApplicationAuthorizeSchema";
+export * from "./AckBulkSchema";
 export * from "./WebAuthnSchema";
 export * from "./WebhookCreateSchema";
 export * from "./WidgetModifySchema";