spomeni/.next_old/server/static/webpack/middleware.8aa9df7462bda35c.hot-update.js

22 lines
9.7 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
self["webpackHotUpdate_N_E"]("middleware",{
/***/ "(middleware)/./src/lib/admin-session.ts":
/*!**********************************!*\
!*** ./src/lib/admin-session.ts ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COOKIE_NAME_ADMIN: () => (/* binding */ COOKIE_NAME_ADMIN),\n/* harmony export */ cookieOptions: () => (/* binding */ cookieOptions),\n/* harmony export */ createAdminSession: () => (/* binding */ createAdminSession),\n/* harmony export */ getAdminSession: () => (/* binding */ getAdminSession),\n/* harmony export */ verifyAdminSession: () => (/* binding */ verifyAdminSession)\n/* harmony export */ });\n/* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/headers */ \"(middleware)/./node_modules/next/dist/esm/api/headers.js\");\n\nconst COOKIE_NAME = \"admin_session\";\nconst SEP = \".\";\nfunction getSecret() {\n const secret = process.env.ADMIN_SESSION_SECRET;\n if (!secret) throw new Error(\"ADMIN_SESSION_SECRET env var is not set\");\n return secret;\n}\nasync function sign(payload) {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\"raw\", encoder.encode(getSecret()), {\n name: \"HMAC\",\n hash: \"SHA-256\"\n }, false, [\n \"sign\"\n ]);\n const sig = await crypto.subtle.sign(\"HMAC\", key, encoder.encode(payload));\n return btoa(String.fromCharCode(...new Uint8Array(sig)));\n}\nasync function createAdminSession(data) {\n const payload = btoa(JSON.stringify(data));\n return payload + SEP + await sign(payload);\n}\nasync function verifyAdminSession(token) {\n const sepIdx = token.lastIndexOf(SEP);\n if (sepIdx === -1) return null;\n const payload = token.slice(0, sepIdx);\n const sig = token.slice(sepIdx + 1);\n const expectedSig = await sign(payload);\n if (sig.length !== expectedSig.length) return null;\n try {\n if (!constantTimeEqual(sig, expectedSig)) return null;\n } catch {\n return null;\n }\n try {\n return JSON.parse(atob(payload));\n } catch {\n return null;\n }\n}\nfunction constantTimeEqual(a, b) {\n if (a.length !== b.length) return false;\n let result = 0;\n for(let i = 0; i < a.length; i++){\n result |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return result === 0;\n}\nconst COOKIE_NAME_ADMIN = COOKIE_NAME;\nfunction cookieOptions(value) {\n return {\n name: COOKIE_NAME,\n value,\n httpOnly: true,\n secure: \"development\" === \"production\",\n sameSite: \"lax\",\n path: \"/admin\"\n };\n}\nasync function getAdminSession() {\n const store = await (0,next_headers__WEBPACK_IMPORTED_MODULE_0__.cookies)();\n const token = store.get(COOKIE_NAME)?.value;\n if (!token) return null;\n return verifyAdminSession(token);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKG1pZGRsZXdhcmUpLy4vc3JjL2xpYi9hZG1pbi1zZXNzaW9uLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF1QztBQUV2QyxNQUFNQyxjQUFjO0FBQ3BCLE1BQU1DLE1BQU07QUFFWixTQUFTQztJQUNQLE1BQU1DLFNBQVNDLFFBQVFDLEdBQUcsQ0FBQ0Msb0JBQW9CO0lBQy9DLElBQUksQ0FBQ0gsUUFBUSxNQUFNLElBQUlJLE1BQU07SUFDN0IsT0FBT0o7QUFDVDtBQUVBLGVBQWVLLEtBQUtDLE9BQWU7SUFDakMsTUFBTUMsVUFBVSxJQUFJQztJQUNwQixNQUFNQyxNQUFNLE1BQU1DLE9BQU9DLE1BQU0sQ0FBQ0MsU0FBUyxDQUN2QyxPQUNBTCxRQUFRTSxNQUFNLENBQUNkLGNBQ2Y7UUFBRWUsTUFBTTtRQUFRQyxNQUFNO0lBQVUsR0FDaEMsT0FDQTtRQUFDO0tBQU87SUFFVixNQUFNQyxNQUFNLE1BQU1OLE9BQU9DLE1BQU0sQ0FBQ04sSUFBSSxDQUFDLFFBQVFJLEtBQUtGLFFBQVFNLE1BQU0sQ0FBQ1A7SUFDakUsT0FBT1csS0FBS0MsT0FBT0MsWUFBWSxJQUFJLElBQUlDLFdBQVdKO0FBQ3BEO0FBT08sZUFBZUssbUJBQW1CQyxJQUFrQjtJQUN6RCxNQUFNaEIsVUFBVVcsS0FBS00sS0FBS0MsU0FBUyxDQUFDRjtJQUNwQyxPQUFPaEIsVUFBVVIsTUFBTyxNQUFNTyxLQUFLQztBQUNyQztBQUVPLGVBQWVtQixtQkFBbUJDLEtBQWE7SUFDcEQsTUFBTUMsU0FBU0QsTUFBTUUsV0FBVyxDQUFDOUI7SUFDakMsSUFBSTZCLFdBQVcsQ0FBQyxHQUFHLE9BQU87SUFDMUIsTUFBTXJCLFVBQVVvQixNQUFNRyxLQUFLLENBQUMsR0FBR0Y7SUFDL0IsTUFBTVgsTUFBTVUsTUFBTUcsS0FBSyxDQUFDRixTQUFTO0lBQ2pDLE1BQU1HLGNBQWMsTUFBTXpCLEtBQUtDO0lBQy9CLElBQUlVLElBQUllLE1BQU0sS0FBS0QsWUFBWUMsTUFBTSxFQUFFLE9BQU87SUFDOUMsSUFBSTtRQUNGLElBQUksQ0FBQ0Msa0JBQWtCaEIsS0FBS2MsY0FBYyxPQUFPO0lBQ25ELEVBQUUsT0FBTTtRQUNOLE9BQU87SUFDVDtJQUNBLElBQUk7UUFDRixPQUFPUCxLQUFLVSxLQUFLLENBQUNDLEtBQUs1QjtJQUN6QixFQUFFLE9BQU07UUFDTixPQUFPO0lBQ1Q7QUFDRjtBQUVBLFNBQVMwQixrQkFBa0JHLENBQVMsRUFBRUMsQ0FBUztJQUM3QyxJQUFJRCxFQUFFSixNQUFNLEtBQUtLLEVBQUVMLE1BQU0sRUFBRSxPQUFPO0lBQ2xDLElBQUlNLFNBQVM7SUFDYixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUgsRUFBRUosTUFBTSxFQUFFTyxJQUFLO1FBQ2pDRCxVQUFVRixFQUFFSSxVQUFVLENBQUNELEtBQUtGLEVBQUVHLFVBQVUsQ0FBQ0Q7SUFDM0M7SUFDQSxPQUFPRCxXQUFXO0FBQ3BCO0FBRU8sTUFBTUcsb0JBQW9CM0MsWUFBWTtBQUV0QyxTQUFTNEMsY0FBY0MsS0FBYTtJQUN6QyxPQUFPO1FBQ0w1QixNQUFNakI7UUFDTjZDO1FBQ0FDLFVBQVU7UUFDVkMsUUFBUTNDLGtCQUF5QjtRQUNqQzRDLFVBQVU7UUFDVkMsTUFBTTtJQUNSO0FBQ0Y7QUFFTyxlQUFlQztJQUNwQixNQUFNQyxRQUFRLE1BQU1wRCxxREFBT0E7SUFDM0IsTUFBTThCLFFBQVFzQixNQUFNQyxHQUFHLENBQUNwRCxjQUFjNkM7SUFDdEMsSUFBSSxDQUFDaEIsT0FBTyxPQUFPO0lBQ25CLE9BQU9ELG1CQUFtQkM7QUFDNUIiLCJzb3VyY2VzIjpbIi9hcHAvc3JjL2xpYi9hZG1pbi1zZXNzaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvb2tpZXMgfSBmcm9tIFwibmV4dC9oZWFkZXJzXCI7XG5cbmNvbnN0IENPT0tJRV9OQU1FID0gXCJhZG1pbl9zZXNzaW9uXCI7XG5jb25zdCBTRVAgPSBcIi5cIjtcblxuZnVuY3Rpb24gZ2V0U2VjcmV0KCk6IHN0cmluZyB7XG4gIGNvbnN0IHNlY3JldCA9IHByb2Nlc3MuZW52LkFETUlOX1NFU1NJT05fU0VDUkVUO1xuICBpZiAoIXNlY3JldCkgdGhyb3cgbmV3IEVycm9yKFwiQURNSU5fU0VTU0lPTl9TRUNSRVQgZW52IHZhciBpcyBub3Qgc2V0XCIpO1xuICByZXR1cm4gc2VjcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaWduKHBheWxvYWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgY29uc3Qga2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgXCJyYXdcIixcbiAgICBlbmNvZGVyLmVuY29kZShnZXRTZWNyZXQoKSksXG4gICAgeyBuYW1lOiBcIkhNQUNcIiwgaGFzaDogXCJTSEEtMjU2XCIgfSxcbiAgICBmYWxzZSxcbiAgICBbXCJzaWduXCJdLFxuICApO1xuICBjb25zdCBzaWcgPSBhd2FpdCBjcnlwdG8uc3VidGxlLnNpZ24oXCJITUFDXCIsIGtleSwgZW5jb2Rlci5lbmNvZGUocGF5bG9hZCkpO1xuICByZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLm5ldyBVaW50OEFycmF5KHNpZykpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZG1pblNlc3Npb24ge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICByb2xlOiBcIlNVUEVSX0FETUlOXCIgfCBcIkFETUlOXCI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBZG1pblNlc3Npb24oZGF0YTogQWRtaW5TZXNzaW9uKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcGF5bG9hZCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICByZXR1cm4gcGF5bG9hZCArIFNFUCArIChhd2FpdCBzaWduKHBheWxvYWQpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUFkbWluU2Vzc2lvbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxBZG1pblNlc3Npb24gfCBudWxsPiB7XG4gIGNvbnN0IHNlcElkeCA9IHRva2VuLmxhc3RJbmRleE9mKFNFUCk7XG4gIGlmIChzZXBJZHggPT09IC0xKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcGF5bG9hZCA9IHRva2VuLnNsaWNlKDAsIHNlcElkeCk7XG4gIGNvbnN0IHNpZyA9IHRva2VuLnNsaWNlKHNlcElkeCArIDEpO1xuICBjb25zdCBleHBlY3RlZFNpZyA9IGF3YWl0IHNpZ24ocGF5bG9hZCk7XG4gIGlmIChzaWcubGVuZ3RoICE9PSBleHBlY3RlZFNpZy5sZW5ndGgpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGlmICghY29uc3RhbnRUaW1lRXF1YWwoc2lnLCBleHBlY3RlZFNpZykpIHJldHVybiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGF0b2IocGF5bG9hZCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdGFudFRpbWVFcXVhbChhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGxldCByZXN1bHQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHQgfD0gYS5jaGFyQ29kZUF0KGkpIF4gYi5jaGFyQ29kZUF0KGkpO1xuICB9XG4gIHJldHVybiByZXN1bHQgPT09IDA7XG59XG5cbmV4cG9ydCBjb25zdCBDT09LSUVfTkFNRV9BRE1JTiA9IENPT0tJRV9OQU1FO1xuXG5leHBvcnQgZnVuY3Rpb24gY29va2llT3B0aW9ucyh2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogQ09PS0lFX05BTUUsXG4gICAgdmFsdWUsXG4gICAgaHR0cE9ubHk6IHRydWUsXG4gICAgc2VjdXJlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIsXG4gICAgc2FtZVNpdGU6IFwibGF4XCIgYXMgY29uc3QsXG4gICAgcGF0aDogXCIvYWRtaW5cIixcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFkbWluU2Vzc2lvbigpOiBQcm9taXNlPEFkbWluU2Vzc2lvbiB8IG51bGw+IHtcbiAgY29uc3Qgc3RvcmUgPSBhd2FpdCBjb29raWVzKCk7XG4gIGNvbnN0IHRva2VuID0gc3RvcmUuZ2V0KENPT0tJRV9OQU1FKT8udmFsdWU7XG4gIGlmICghdG9rZW4pIHJldHVybiBudWxsO1xuICByZXR1cm4gdmVyaWZ5QWRtaW5TZXNzaW9uKHRva2VuKTtcbn1cbiJdLCJuYW1lcyI6WyJjb29raWVzIiwiQ09PS0lFX05BTUUiLCJTRVAiLCJnZXRTZWNyZXQiLCJzZWNyZXQiLCJwcm9jZXNzIiwiZW52IiwiQURNSU5fU0VTU0lPTl9TRUNSRVQiLCJFcnJvciIsInNpZ24iLCJwYXlsb2FkIiwiZW5jb2RlciIsIlRleHRFbmNvZGVyIiwia2V5IiwiY3J5cHRvIiwic3VidGxlIiwiaW1wb3J0S2V5IiwiZW5jb2RlIiwibmFtZSIsImhhc2giLCJzaWciLCJidG9hIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiVWludDhBcnJheSIsImNyZWF0ZUFkbWluU2Vzc2lvbiIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwidmVyaWZ5QWRtaW5TZXNzaW9uIiwidG9rZW4iLCJzZXBJZHgiLCJsYXN0SW5kZXhPZiIsInNsaWNlIiwiZXhwZWN0ZWRTaWciLCJsZW5ndGgiLCJjb25zdGFudFRpbWVFcXVhbCIsInBhcnNlIiwiYXRvYiIsImEiLCJiIiwicmVzdWx0IiwiaSIsImNoYXJDb2RlQXQiLCJDT09LSUVfTkFNRV9BRE1JTiIsImNvb2tpZU9wdGlvbnMiLCJ2YWx1ZSIsImh0dHBPbmx5Iiwic2VjdXJlIiwic2FtZVNpdGUiLCJwYXRoIiwiZ2V0QWRtaW5TZXNzaW9uIiwic3RvcmUiLCJnZXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(middleware)/./src/lib/admin-session.ts\n");
/***/ })
});