From d6069ee586dd7c1d55349e16dc4434af4e72e5d1 Mon Sep 17 00:00:00 2001 From: zkldi <20380519+zkldi@users.noreply.github.com> Date: Thu, 18 Nov 2021 09:33:55 +0000 Subject: [PATCH] Add POST /viewed --- .../_playtype/folders/_folderID/router.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts index 981af9858..58dfc6c7e 100644 --- a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts +++ b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts @@ -6,6 +6,7 @@ import { GetGamePTConfig, ScoreDocument } from "tachi-common"; import { GetFolderCharts, GetPBsOnFolder } from "utils/folder"; import { ParseStrPositiveInt } from "utils/string-checks"; import { GetFolderFromParam } from "../../../../../../../games/_game/_playtype/folders/middleware"; +import { RequireSelfRequestFromUser } from "../../../../../middleware"; const router: Router = Router({ mergeParams: true }); @@ -34,6 +35,41 @@ router.get("/", async (req, res) => { }); }); +/** + * Add a folder to the list of recently-viewed folders. This can only + * be performed by a session-level token, to stop rogue API keys from causing + * trouble. Also, it's a post request, to avoid funny SSRF stuff. + * + * @name POST /api/v1/users/:userID/games/:game/:playtype/folders/:folderID/viewed + */ +router.post("/viewed", RequireSelfRequestFromUser, async (req, res) => { + const user = req[SYMBOL_TachiData]!.requestedUser!; + const folder = req[SYMBOL_TachiData]!.folderDoc!; + + await db["recent-folder-views"].update( + { + userID: user.id, + game: folder.game, + playtype: folder.playtype, + folderID: folder.folderID, + }, + { + $set: { + lastViewed: Date.now(), + }, + }, + { + upsert: true, + } + ); + + return res.status(200).json({ + success: true, + description: `Recorded a view on ${folder.title}.`, + body: {}, + }); +}); + // note: this path is disgustingly long. :( /** * Returns the users scores in order of when they met this criteria.