@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 3.79 kB
Source Map (JSON)
{"version":3,"file":"authorize-stream.mjs","names":["constants","mediaShareLinkServices.authorizeShare"],"sources":["../../../../../src/libs/http/controllers/share/authorize-stream.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { minutesToMilliseconds } from \"date-fns\";\nimport { setCookie } from \"hono/cookie\";\nimport { createFactory } from \"hono/factory\";\nimport { describeRoute } from \"hono-openapi\";\nimport constants from \"../../../../constants/constants.js\";\nimport { controllerSchemas } from \"../../../../schemas/share.js\";\nimport { mediaShareLinkServices } from \"../../../../services/index.js\";\nimport { LucidAPIError } from \"../../../../utils/errors/index.js\";\nimport { isRequestSecure } from \"../../../../utils/helpers/index.js\";\nimport serviceWrapper from \"../../../../utils/services/service-wrapper.js\";\nimport createAuthCookieName from \"../../../../utils/share-link/auth-cookie.js\";\nimport rateLimiter from \"../../middleware/rate-limiter.js\";\nimport validate from \"../../middleware/validate.js\";\nimport openAPI from \"../../openapi/index.js\";\nimport createServiceContext from \"../../utils/create-service-context.js\";\n\nconst factory = createFactory();\n\n/**\n * Authorize access to a password-protected share link by validating the provided password\n * and setting a session cookie if valid.\n */\nconst authorizeStreamController = factory.createHandlers(\n\tdescribeRoute({\n\t\tdescription: \"Validate share password and set a session cookie.\",\n\t\ttags: [\"share\"],\n\t\tsummary: \"Authorize Stream\",\n\t\tresponses: openAPI.responses(),\n\t\tparameters: openAPI.parameters({\n\t\t\tparams: controllerSchemas.authorizeShare.params,\n\t\t}),\n\t\trequestBody: openAPI.requestBody(controllerSchemas.authorizeShare.body),\n\t}),\n\trateLimiter({\n\t\tmode: \"ip\",\n\t\tscope: constants.rateLimit.scopes.low.scopeKey,\n\t\tlimit: constants.rateLimit.scopes.low.limit,\n\t\twindowMs: minutesToMilliseconds(1),\n\t}),\n\tvalidate(\"param\", controllerSchemas.authorizeShare.params),\n\tvalidate(\"json\", controllerSchemas.authorizeShare.body),\n\tasync (c) => {\n\t\tconst { token } = c.req.valid(\"param\");\n\t\tconst { password } = c.req.valid(\"json\");\n\t\tconst context = createServiceContext(c);\n\n\t\tconst authorizeRes = await serviceWrapper(\n\t\t\tmediaShareLinkServices.authorizeShare,\n\t\t\t{ transaction: false },\n\t\t)(context, { token, providedPassword: password });\n\t\tif (authorizeRes.error) throw new LucidAPIError(authorizeRes.error);\n\n\t\tconst cookieName = createAuthCookieName(token);\n\t\tsetCookie(c, cookieName, randomUUID(), {\n\t\t\tmaxAge: constants.shareLinkExpiration,\n\t\t\thttpOnly: true,\n\t\t\tsecure: isRequestSecure(c),\n\t\t\tsameSite: \"strict\",\n\t\t\tpath: `/${constants.directories.base}`,\n\t\t});\n\n\t\treturn c.json({ success: true }, 200);\n\t},\n);\n\nexport default authorizeStreamController;\n"],"mappings":"20BAuBA,MAAM,EANU,EAMwB,CAAC,CAAC,eACzC,EAAc,CACb,YAAa,oDACb,KAAM,CAAC,OAAO,EACd,QAAS,mBACT,UAAW,EAAQ,UAAU,EAC7B,WAAY,EAAQ,WAAW,CAC9B,OAAQ,EAAkB,eAAe,MAC1C,CAAC,EACD,YAAa,EAAQ,YAAY,EAAkB,eAAe,IAAI,CACvE,CAAC,EACD,EAAY,CACX,KAAM,KACN,MAAOA,EAAU,UAAU,OAAO,IAAI,SACtC,MAAOA,EAAU,UAAU,OAAO,IAAI,MACtC,SAAU,EAAsB,CAAC,CAClC,CAAC,EACD,EAAS,QAAS,EAAkB,eAAe,MAAM,EACzD,EAAS,OAAQ,EAAkB,eAAe,IAAI,EACtD,KAAO,IAAM,CACZ,GAAM,CAAE,SAAU,EAAE,IAAI,MAAM,OAAO,EAC/B,CAAE,YAAa,EAAE,IAAI,MAAM,MAAM,EACjC,EAAU,EAAqB,CAAC,EAEhC,EAAe,MAAM,EAC1BC,EACA,CAAE,YAAa,EAAM,CACtB,CAAC,CAAC,EAAS,CAAE,QAAO,iBAAkB,CAAS,CAAC,EAChD,GAAI,EAAa,MAAO,MAAM,IAAI,EAAc,EAAa,KAAK,EAWlE,OARA,EAAU,EADS,EAAqB,CAClB,EAAG,EAAW,EAAG,CACtC,OAAQD,EAAU,oBAClB,SAAU,GACV,OAAQ,EAAgB,CAAC,EACzB,SAAU,SACV,KAAM,IAAIA,EAAU,YAAY,MACjC,CAAC,EAEM,EAAE,KAAK,CAAE,QAAS,EAAK,EAAG,GAAG,CACrC,CACD"}