206 lines
46 KiB
JavaScript
206 lines
46 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/).
|
|
*/
|
|
(() => {
|
|
var exports = {};
|
|
exports.id = "app/api/groups/route";
|
|
exports.ids = ["app/api/groups/route"];
|
|
exports.modules = {
|
|
|
|
/***/ "../../client/components/action-async-storage.external":
|
|
/*!*******************************************************************************!*\
|
|
!*** external "next/dist/client/components/action-async-storage.external.js" ***!
|
|
\*******************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("next/dist/client/components/action-async-storage.external.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../../client/components/request-async-storage.external":
|
|
/*!********************************************************************************!*\
|
|
!*** external "next/dist/client/components/request-async-storage.external.js" ***!
|
|
\********************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("next/dist/client/components/request-async-storage.external.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "../../client/components/static-generation-async-storage.external":
|
|
/*!******************************************************************************************!*\
|
|
!*** external "next/dist/client/components/static-generation-async-storage.external.js" ***!
|
|
\******************************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("next/dist/client/components/static-generation-async-storage.external.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js":
|
|
/*!*************************************************************************!*\
|
|
!*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***!
|
|
\*************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "next/dist/compiled/next-server/app-route.runtime.dev.js":
|
|
/*!**************************************************************************!*\
|
|
!*** external "next/dist/compiled/next-server/app-route.runtime.dev.js" ***!
|
|
\**************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("next/dist/compiled/next-server/app-route.runtime.dev.js");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "assert":
|
|
/*!*************************!*\
|
|
!*** external "assert" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("assert");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "buffer":
|
|
/*!*************************!*\
|
|
!*** external "buffer" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("buffer");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "crypto":
|
|
/*!*************************!*\
|
|
!*** external "crypto" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("crypto");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "events":
|
|
/*!*************************!*\
|
|
!*** external "events" ***!
|
|
\*************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("events");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "http":
|
|
/*!***********************!*\
|
|
!*** external "http" ***!
|
|
\***********************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("http");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "https":
|
|
/*!************************!*\
|
|
!*** external "https" ***!
|
|
\************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("https");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "querystring":
|
|
/*!******************************!*\
|
|
!*** external "querystring" ***!
|
|
\******************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("querystring");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "url":
|
|
/*!**********************!*\
|
|
!*** external "url" ***!
|
|
\**********************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("url");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "util":
|
|
/*!***********************!*\
|
|
!*** external "util" ***!
|
|
\***********************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("util");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "zlib":
|
|
/*!***********************!*\
|
|
!*** external "zlib" ***!
|
|
\***********************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("zlib");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fgroups%2Froute&page=%2Fapi%2Fgroups%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fgroups%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!":
|
|
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fgroups%2Froute&page=%2Fapi%2Fgroups%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fgroups%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***!
|
|
\**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ patchFetch: () => (/* binding */ patchFetch),\n/* harmony export */ requestAsyncStorage: () => (/* binding */ requestAsyncStorage),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ serverHooks: () => (/* binding */ serverHooks),\n/* harmony export */ staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-route/module.compiled */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js\");\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/server/lib/patch-fetch */ \"(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Users_alma_Downloads_neah_front_app_api_groups_route_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/api/groups/route.ts */ \"(rsc)/./app/api/groups/route.ts\");\n\n\n\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppRouteRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_ROUTE,\n page: \"/api/groups/route\",\n pathname: \"/api/groups\",\n filename: \"route\",\n bundlePath: \"app/api/groups/route\"\n },\n resolvedPagePath: \"/Users/alma/Downloads/neah/front/app/api/groups/route.ts\",\n nextConfigOutput,\n userland: _Users_alma_Downloads_neah_front_app_api_groups_route_ts__WEBPACK_IMPORTED_MODULE_3__\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks } = routeModule;\nconst originalPathname = \"/api/groups/route\";\nfunction patchFetch() {\n return (0,next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__.patchFetch)({\n serverHooks,\n staticGenerationAsyncStorage\n });\n}\n\n\n//# sourceMappingURL=app-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZhcGklMkZncm91cHMlMkZyb3V0ZSZwYWdlPSUyRmFwaSUyRmdyb3VwcyUyRnJvdXRlJmFwcFBhdGhzPSZwYWdlUGF0aD1wcml2YXRlLW5leHQtYXBwLWRpciUyRmFwaSUyRmdyb3VwcyUyRnJvdXRlLnRzJmFwcERpcj0lMkZVc2VycyUyRmFsbWElMkZEb3dubG9hZHMlMkZuZWFoJTJGZnJvbnQlMkZhcHAmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZyb290RGlyPSUyRlVzZXJzJTJGYWxtYSUyRkRvd25sb2FkcyUyRm5lYWglMkZmcm9udCZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXNHO0FBQ3ZDO0FBQ2M7QUFDUTtBQUNyRjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0hBQW1CO0FBQzNDO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsWUFBWTtBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlFQUFpRTtBQUN6RTtBQUNBO0FBQ0EsV0FBVyw0RUFBVztBQUN0QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ3VIOztBQUV2SCIsInNvdXJjZXMiOlsid2VicGFjazovL25lYWgvPzVjYzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUm91dGVSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1yb3V0ZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBwYXRjaEZldGNoIGFzIF9wYXRjaEZldGNoIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3BhdGNoLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiL1VzZXJzL2FsbWEvRG93bmxvYWRzL25lYWgvZnJvbnQvYXBwL2FwaS9ncm91cHMvcm91dGUudHNcIjtcbi8vIFdlIGluamVjdCB0aGUgbmV4dENvbmZpZ091dHB1dCBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgbmV4dENvbmZpZ091dHB1dCA9IFwiXCJcbmNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IEFwcFJvdXRlUm91dGVNb2R1bGUoe1xuICAgIGRlZmluaXRpb246IHtcbiAgICAgICAga2luZDogUm91dGVLaW5kLkFQUF9ST1VURSxcbiAgICAgICAgcGFnZTogXCIvYXBpL2dyb3Vwcy9yb3V0ZVwiLFxuICAgICAgICBwYXRobmFtZTogXCIvYXBpL2dyb3Vwc1wiLFxuICAgICAgICBmaWxlbmFtZTogXCJyb3V0ZVwiLFxuICAgICAgICBidW5kbGVQYXRoOiBcImFwcC9hcGkvZ3JvdXBzL3JvdXRlXCJcbiAgICB9LFxuICAgIHJlc29sdmVkUGFnZVBhdGg6IFwiL1VzZXJzL2FsbWEvRG93bmxvYWRzL25lYWgvZnJvbnQvYXBwL2FwaS9ncm91cHMvcm91dGUudHNcIixcbiAgICBuZXh0Q29uZmlnT3V0cHV0LFxuICAgIHVzZXJsYW5kXG59KTtcbi8vIFB1bGwgb3V0IHRoZSBleHBvcnRzIHRoYXQgd2UgbmVlZCB0byBleHBvc2UgZnJvbSB0aGUgbW9kdWxlLiBUaGlzIHNob3VsZFxuLy8gYmUgZWxpbWluYXRlZCB3aGVuIHdlJ3ZlIG1vdmVkIHRoZSBvdGhlciByb3V0ZXMgdG8gdGhlIG5ldyBmb3JtYXQuIFRoZXNlXG4vLyBhcmUgdXNlZCB0byBob29rIGludG8gdGhlIHJvdXRlLlxuY29uc3QgeyByZXF1ZXN0QXN5bmNTdG9yYWdlLCBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLCBzZXJ2ZXJIb29rcyB9ID0gcm91dGVNb2R1bGU7XG5jb25zdCBvcmlnaW5hbFBhdGhuYW1lID0gXCIvYXBpL2dyb3Vwcy9yb3V0ZVwiO1xuZnVuY3Rpb24gcGF0Y2hGZXRjaCgpIHtcbiAgICByZXR1cm4gX3BhdGNoRmV0Y2goe1xuICAgICAgICBzZXJ2ZXJIb29rcyxcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZVxuICAgIH0pO1xufVxuZXhwb3J0IHsgcm91dGVNb2R1bGUsIHJlcXVlc3RBc3luY1N0b3JhZ2UsIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UsIHNlcnZlckhvb2tzLCBvcmlnaW5hbFBhdGhuYW1lLCBwYXRjaEZldGNoLCAgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fgroups%2Froute&page=%2Fapi%2Fgroups%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fgroups%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./app/api/auth/[...nextauth]/route.ts":
|
|
/*!*********************************************!*\
|
|
!*** ./app/api/auth/[...nextauth]/route.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 */ GET: () => (/* binding */ handler),\n/* harmony export */ POST: () => (/* binding */ handler),\n/* harmony export */ authOptions: () => (/* binding */ authOptions)\n/* harmony export */ });\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next-auth */ \"(rsc)/./node_modules/next-auth/index.js\");\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_auth__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_auth_providers_keycloak__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next-auth/providers/keycloak */ \"(rsc)/./node_modules/next-auth/providers/keycloak.js\");\n\n\nconst authOptions = {\n providers: [\n (0,next_auth_providers_keycloak__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n clientId: process.env.KEYCLOAK_CLIENT_ID,\n clientSecret: process.env.KEYCLOAK_CLIENT_SECRET,\n issuer: process.env.KEYCLOAK_ISSUER\n })\n ],\n callbacks: {\n async jwt ({ token, account, profile }) {\n if (account) {\n token.accessToken = account.access_token;\n token.refreshToken = account.refresh_token;\n token.accessTokenExpires = account.expires_at * 1000;\n token.role = profile?.groups || [];\n return token;\n }\n // Return previous token if not expired\n if (Date.now() < token.accessTokenExpires) {\n return token;\n }\n try {\n const response = await fetch(`${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/token`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET,\n refresh_token: token.refreshToken\n })\n });\n const tokens = await response.json();\n if (!response.ok) throw tokens;\n return {\n ...token,\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? token.refreshToken,\n accessTokenExpires: Date.now() + tokens.expires_in * 1000\n };\n } catch (error) {\n console.error(\"Error refreshing token:\", error);\n return {\n ...token,\n error: \"RefreshAccessTokenError\"\n };\n }\n },\n async session ({ session, token }) {\n if (token.error) {\n throw new Error(\"RefreshAccessTokenError\");\n }\n session.accessToken = token.accessToken;\n session.user = {\n ...session.user,\n id: token.sub,\n first_name: token.first_name,\n last_name: token.last_name,\n username: token.username,\n role: token.role || []\n };\n return session;\n }\n },\n events: {\n async signOut ({ token }) {\n if (token.refreshToken) {\n try {\n await fetch(`${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/logout`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: new URLSearchParams({\n client_id: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET,\n refresh_token: token.refreshToken\n })\n });\n } catch (error) {\n console.error(\"Error during logout:\", error);\n }\n }\n }\n }\n};\nconst handler = next_auth__WEBPACK_IMPORTED_MODULE_0___default()(authOptions);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBc0Q7QUFDTTtBQUVyRCxNQUFNRSxjQUErQjtJQUMxQ0MsV0FBVztRQUNURix3RUFBZ0JBLENBQUM7WUFDZkcsVUFBVUMsUUFBUUMsR0FBRyxDQUFDQyxrQkFBa0I7WUFDeENDLGNBQWNILFFBQVFDLEdBQUcsQ0FBQ0csc0JBQXNCO1lBQ2hEQyxRQUFRTCxRQUFRQyxHQUFHLENBQUNLLGVBQWU7UUFDckM7S0FDRDtJQUNEQyxXQUFXO1FBQ1QsTUFBTUMsS0FBSSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO1lBQ25DLElBQUlELFNBQVM7Z0JBQ1hELE1BQU1HLFdBQVcsR0FBR0YsUUFBUUcsWUFBWTtnQkFDeENKLE1BQU1LLFlBQVksR0FBR0osUUFBUUssYUFBYTtnQkFDMUNOLE1BQU1PLGtCQUFrQixHQUFHTixRQUFRTyxVQUFVLEdBQUk7Z0JBQ2pEUixNQUFNUyxJQUFJLEdBQUdQLFNBQVNRLFVBQVUsRUFBRTtnQkFDbEMsT0FBT1Y7WUFDVDtZQUVBLHVDQUF1QztZQUN2QyxJQUFJVyxLQUFLQyxHQUFHLEtBQU1aLE1BQU1PLGtCQUFrQixFQUFhO2dCQUNyRCxPQUFPUDtZQUNUO1lBRUEsSUFBSTtnQkFDRixNQUFNYSxXQUFXLE1BQU1DLE1BQ3JCLENBQUMsRUFBRXZCLFFBQVFDLEdBQUcsQ0FBQ3VCLGlCQUFpQixDQUFDLFFBQVEsRUFBRXhCLFFBQVFDLEdBQUcsQ0FBQ3dCLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUNyRztvQkFDRUMsUUFBUTtvQkFDUkMsU0FBUzt3QkFDUCxnQkFBZ0I7b0JBQ2xCO29CQUNBQyxNQUFNLElBQUlDLGdCQUFnQjt3QkFDeEJDLFlBQVk7d0JBQ1pDLFdBQVcvQixRQUFRQyxHQUFHLENBQUNDLGtCQUFrQjt3QkFDekM4QixlQUFlaEMsUUFBUUMsR0FBRyxDQUFDRyxzQkFBc0I7d0JBQ2pEVyxlQUFlTixNQUFNSyxZQUFZO29CQUNuQztnQkFDRjtnQkFHRixNQUFNbUIsU0FBUyxNQUFNWCxTQUFTWSxJQUFJO2dCQUVsQyxJQUFJLENBQUNaLFNBQVNhLEVBQUUsRUFBRSxNQUFNRjtnQkFFeEIsT0FBTztvQkFDTCxHQUFHeEIsS0FBSztvQkFDUkcsYUFBYXFCLE9BQU9wQixZQUFZO29CQUNoQ0MsY0FBY21CLE9BQU9sQixhQUFhLElBQUlOLE1BQU1LLFlBQVk7b0JBQ3hERSxvQkFBb0JJLEtBQUtDLEdBQUcsS0FBS1ksT0FBT0csVUFBVSxHQUFHO2dCQUN2RDtZQUNGLEVBQUUsT0FBT0MsT0FBTztnQkFDZEMsUUFBUUQsS0FBSyxDQUFDLDJCQUEyQkE7Z0JBQ3pDLE9BQU87b0JBQUUsR0FBRzVCLEtBQUs7b0JBQUU0QixPQUFPO2dCQUEwQjtZQUN0RDtRQUNGO1FBRUEsTUFBTUUsU0FBUSxFQUFFQSxPQUFPLEVBQUU5QixLQUFLLEVBQUU7WUFDOUIsSUFBSUEsTUFBTTRCLEtBQUssRUFBRTtnQkFDZixNQUFNLElBQUlHLE1BQU07WUFDbEI7WUFFQUQsUUFBUTNCLFdBQVcsR0FBR0gsTUFBTUcsV0FBVztZQUN2QzJCLFFBQVFFLElBQUksR0FBRztnQkFDYixHQUFHRixRQUFRRSxJQUFJO2dCQUNmQyxJQUFJakMsTUFBTWtDLEdBQUc7Z0JBQ2JDLFlBQVluQyxNQUFNbUMsVUFBVTtnQkFDNUJDLFdBQVdwQyxNQUFNb0MsU0FBUztnQkFDMUJDLFVBQVVyQyxNQUFNcUMsUUFBUTtnQkFDeEI1QixNQUFNVCxNQUFNUyxJQUFJLElBQUksRUFBRTtZQUN4QjtZQUNBLE9BQU9xQjtRQUNUO0lBQ0Y7SUFDQVEsUUFBUTtRQUNOLE1BQU1DLFNBQVEsRUFBRXZDLEtBQUssRUFBRTtZQUNyQixJQUFJQSxNQUFNSyxZQUFZLEVBQUU7Z0JBQ3RCLElBQUk7b0JBQ0YsTUFBTVMsTUFDSixDQUFDLEVBQUV2QixRQUFRQyxHQUFHLENBQUN1QixpQkFBaUIsQ0FBQyxRQUFRLEVBQUV4QixRQUFRQyxHQUFHLENBQUN3QixjQUFjLENBQUMsK0JBQStCLENBQUMsRUFDdEc7d0JBQ0VDLFFBQVE7d0JBQ1JDLFNBQVM7NEJBQ1AsZ0JBQWdCO3dCQUNsQjt3QkFDQUMsTUFBTSxJQUFJQyxnQkFBZ0I7NEJBQ3hCRSxXQUFXL0IsUUFBUUMsR0FBRyxDQUFDQyxrQkFBa0I7NEJBQ3pDOEIsZUFBZWhDLFFBQVFDLEdBQUcsQ0FBQ0csc0JBQXNCOzRCQUNqRFcsZUFBZU4sTUFBTUssWUFBWTt3QkFDbkM7b0JBQ0Y7Z0JBRUosRUFBRSxPQUFPdUIsT0FBTztvQkFDZEMsUUFBUUQsS0FBSyxDQUFDLHdCQUF3QkE7Z0JBQ3hDO1lBQ0Y7UUFDRjtJQUNGO0FBQ0YsRUFBRTtBQUVGLE1BQU1ZLFVBQVV0RCxnREFBUUEsQ0FBQ0U7QUFDa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZWFoLy4vYXBwL2FwaS9hdXRoL1suLi5uZXh0YXV0aF0vcm91dGUudHM/YzhhNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTmV4dEF1dGgsIHsgTmV4dEF1dGhPcHRpb25zIH0gZnJvbSBcIm5leHQtYXV0aFwiO1xuaW1wb3J0IEtleWNsb2FrUHJvdmlkZXIgZnJvbSBcIm5leHQtYXV0aC9wcm92aWRlcnMva2V5Y2xvYWtcIjtcblxuZXhwb3J0IGNvbnN0IGF1dGhPcHRpb25zOiBOZXh0QXV0aE9wdGlvbnMgPSB7XG4gIHByb3ZpZGVyczogW1xuICAgIEtleWNsb2FrUHJvdmlkZXIoe1xuICAgICAgY2xpZW50SWQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9JRCEsXG4gICAgICBjbGllbnRTZWNyZXQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9TRUNSRVQhLFxuICAgICAgaXNzdWVyOiBwcm9jZXNzLmVudi5LRVlDTE9BS19JU1NVRVIhLFxuICAgIH0pLFxuICBdLFxuICBjYWxsYmFja3M6IHtcbiAgICBhc3luYyBqd3QoeyB0b2tlbiwgYWNjb3VudCwgcHJvZmlsZSB9KSB7XG4gICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICB0b2tlbi5hY2Nlc3NUb2tlbiA9IGFjY291bnQuYWNjZXNzX3Rva2VuO1xuICAgICAgICB0b2tlbi5yZWZyZXNoVG9rZW4gPSBhY2NvdW50LnJlZnJlc2hfdG9rZW47XG4gICAgICAgIHRva2VuLmFjY2Vzc1Rva2VuRXhwaXJlcyA9IGFjY291bnQuZXhwaXJlc19hdCEgKiAxMDAwO1xuICAgICAgICB0b2tlbi5yb2xlID0gcHJvZmlsZT8uZ3JvdXBzIHx8IFtdO1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiBwcmV2aW91cyB0b2tlbiBpZiBub3QgZXhwaXJlZFxuICAgICAgaWYgKERhdGUubm93KCkgPCAodG9rZW4uYWNjZXNzVG9rZW5FeHBpcmVzIGFzIG51bWJlcikpIHtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICAgIGdyYW50X3R5cGU6IFwicmVmcmVzaF90b2tlblwiLFxuICAgICAgICAgICAgICBjbGllbnRfaWQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9JRCEsXG4gICAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9TRUNSRVQhLFxuICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0b2tlbi5yZWZyZXNoVG9rZW4gYXMgc3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyB0b2tlbnM7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50b2tlbixcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5zLmFjY2Vzc190b2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHRva2Vucy5yZWZyZXNoX3Rva2VuID8/IHRva2VuLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZXM6IERhdGUubm93KCkgKyB0b2tlbnMuZXhwaXJlc19pbiAqIDEwMDAsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVmcmVzaGluZyB0b2tlbjpcIiwgZXJyb3IpO1xuICAgICAgICByZXR1cm4geyAuLi50b2tlbiwgZXJyb3I6IFwiUmVmcmVzaEFjY2Vzc1Rva2VuRXJyb3JcIiB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzZXNzaW9uKHsgc2Vzc2lvbiwgdG9rZW4gfSkge1xuICAgICAgaWYgKHRva2VuLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlZnJlc2hBY2Nlc3NUb2tlbkVycm9yXCIpO1xuICAgICAgfVxuXG4gICAgICBzZXNzaW9uLmFjY2Vzc1Rva2VuID0gdG9rZW4uYWNjZXNzVG9rZW4gYXMgc3RyaW5nO1xuICAgICAgc2Vzc2lvbi51c2VyID0ge1xuICAgICAgICAuLi5zZXNzaW9uLnVzZXIsXG4gICAgICAgIGlkOiB0b2tlbi5zdWIsXG4gICAgICAgIGZpcnN0X25hbWU6IHRva2VuLmZpcnN0X25hbWUsXG4gICAgICAgIGxhc3RfbmFtZTogdG9rZW4ubGFzdF9uYW1lLFxuICAgICAgICB1c2VybmFtZTogdG9rZW4udXNlcm5hbWUsXG4gICAgICAgIHJvbGU6IHRva2VuLnJvbGUgfHwgW10sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgfSxcbiAgfSxcbiAgZXZlbnRzOiB7XG4gICAgYXN5bmMgc2lnbk91dCh7IHRva2VuIH0pIHtcbiAgICAgIGlmICh0b2tlbi5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmZXRjaChcbiAgICAgICAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvbG9nb3V0YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgICAgIGNsaWVudF9pZDogcHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQ0xJRU5UX0lEISxcbiAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiBwcm9jZXNzLmVudi5LRVlDTE9BS19DTElFTlRfU0VDUkVUISxcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0b2tlbi5yZWZyZXNoVG9rZW4gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgbG9nb3V0OlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcblxuY29uc3QgaGFuZGxlciA9IE5leHRBdXRoKGF1dGhPcHRpb25zKTtcbmV4cG9ydCB7IGhhbmRsZXIgYXMgR0VULCBoYW5kbGVyIGFzIFBPU1QgfTtcbiJdLCJuYW1lcyI6WyJOZXh0QXV0aCIsIktleWNsb2FrUHJvdmlkZXIiLCJhdXRoT3B0aW9ucyIsInByb3ZpZGVycyIsImNsaWVudElkIiwicHJvY2VzcyIsImVudiIsIktFWUNMT0FLX0NMSUVOVF9JRCIsImNsaWVudFNlY3JldCIsIktFWUNMT0FLX0NMSUVOVF9TRUNSRVQiLCJpc3N1ZXIiLCJLRVlDTE9BS19JU1NVRVIiLCJjYWxsYmFja3MiLCJqd3QiLCJ0b2tlbiIsImFjY291bnQiLCJwcm9maWxlIiwiYWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJyZWZyZXNoVG9rZW4iLCJyZWZyZXNoX3Rva2VuIiwiYWNjZXNzVG9rZW5FeHBpcmVzIiwiZXhwaXJlc19hdCIsInJvbGUiLCJncm91cHMiLCJEYXRlIiwibm93IiwicmVzcG9uc2UiLCJmZXRjaCIsIktFWUNMT0FLX0JBU0VfVVJMIiwiS0VZQ0xPQUtfUkVBTE0iLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIlVSTFNlYXJjaFBhcmFtcyIsImdyYW50X3R5cGUiLCJjbGllbnRfaWQiLCJjbGllbnRfc2VjcmV0IiwidG9rZW5zIiwianNvbiIsIm9rIiwiZXhwaXJlc19pbiIsImVycm9yIiwiY29uc29sZSIsInNlc3Npb24iLCJFcnJvciIsInVzZXIiLCJpZCIsInN1YiIsImZpcnN0X25hbWUiLCJsYXN0X25hbWUiLCJ1c2VybmFtZSIsImV2ZW50cyIsInNpZ25PdXQiLCJoYW5kbGVyIiwiR0VUIiwiUE9TVCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./app/api/auth/[...nextauth]/route.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(rsc)/./app/api/groups/route.ts":
|
|
/*!*********************************!*\
|
|
!*** ./app/api/groups/route.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 */ GET: () => (/* binding */ GET),\n/* harmony export */ POST: () => (/* binding */ POST)\n/* harmony export */ });\n/* harmony import */ var next_auth_next__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next-auth/next */ \"(rsc)/./node_modules/next-auth/next/index.js\");\n/* harmony import */ var _app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/app/api/auth/[...nextauth]/route */ \"(rsc)/./app/api/auth/[...nextauth]/route.ts\");\n/* harmony import */ var next_server__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/server */ \"(rsc)/./node_modules/next/dist/api/server.js\");\n\n\n\nasync function getAdminToken() {\n try {\n const tokenResponse = await fetch(`${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/token`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: new URLSearchParams({\n grant_type: \"client_credentials\",\n client_id: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET\n })\n });\n const data = await tokenResponse.json();\n // Log the response for debugging\n console.log(\"Token Response:\", {\n status: tokenResponse.status,\n ok: tokenResponse.ok,\n data: data\n });\n if (!tokenResponse.ok || !data.access_token) {\n // Log the error details\n console.error(\"Token Error Details:\", {\n status: tokenResponse.status,\n data: data\n });\n return null;\n }\n return data.access_token;\n } catch (error) {\n console.error(\"Token Error:\", error);\n return null;\n }\n}\nasync function GET() {\n try {\n const session = await (0,next_auth_next__WEBPACK_IMPORTED_MODULE_0__.getServerSession)(_app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_1__.authOptions);\n if (!session) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n message: \"Non autoris\\xe9\"\n }, {\n status: 401\n });\n }\n const token = await getAdminToken();\n if (!token) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n message: \"Erreur d'authentification\"\n }, {\n status: 401\n });\n }\n const response = await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups`, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n if (!response.ok) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n message: \"\\xc9chec de la r\\xe9cup\\xe9ration des groupes\"\n }, {\n status: response.status\n });\n }\n const groups = await response.json();\n // Return empty array if no groups\n if (!Array.isArray(groups)) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json([]);\n }\n const groupsWithCounts = await Promise.all(groups.map(async (group)=>{\n try {\n const countResponse = await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${group.id}/members/count`, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n });\n let count = 0;\n if (countResponse.ok) {\n count = await countResponse.json();\n }\n return {\n id: group.id,\n name: group.name,\n path: group.path,\n membersCount: count\n };\n } catch (error) {\n return {\n id: group.id,\n name: group.name,\n path: group.path,\n membersCount: 0\n };\n }\n }));\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json(groupsWithCounts);\n } catch (error) {\n console.error(\"Groups API Error:\", error);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n message: \"Une erreur est survenue\"\n }, {\n status: 500\n });\n }\n}\nasync function POST(req) {\n try {\n const session = await (0,next_auth_next__WEBPACK_IMPORTED_MODULE_0__.getServerSession)(_app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_1__.authOptions);\n if (!session) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n message: \"Non autoris\\xe9\"\n }, {\n status: 401\n });\n }\n const { name } = await req.json();\n if (!name?.trim()) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n message: \"Le nom du groupe est requis\"\n }, {\n status: 400\n });\n }\n const token = await getAdminToken();\n const response = await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n name\n })\n });\n if (!response.ok) {\n throw new Error(\"\\xc9chec de la cr\\xe9ation du groupe\");\n }\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n id: Date.now().toString(),\n name,\n path: `/${name}`,\n membersCount: 0\n });\n } catch (error) {\n console.error(\"Create Group Error:\", error);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n message: error instanceof Error ? error.message : \"Une erreur est survenue\"\n }, {\n status: 500\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TU8sUUFBUSxNQUFNM0I7UUFFcEIsTUFBTTRCLFdBQVcsTUFBTTFCLE1BQ3JCLENBQUMsRUFBRUMsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUVGLFFBQVFDLEdBQUcsQ0FBQ0UsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUNwRjtZQUNFQyxRQUFRO1lBQ1JDLFNBQVM7Z0JBQ1BxQixlQUFlLENBQUMsT0FBTyxFQUFFRixNQUFNLENBQUM7Z0JBQ2hDLGdCQUFnQjtZQUNsQjtZQUNBbEIsTUFBTXNDLEtBQUtDLFNBQVMsQ0FBQztnQkFBRVA7WUFBSztRQUM5QjtRQUdGLElBQUksQ0FBQ2IsU0FBU1AsRUFBRSxFQUFFO1lBQ2hCLE1BQU0sSUFBSTRCLE1BQU07UUFDbEI7UUFFQSxPQUFPbEQscURBQVlBLENBQUNrQixJQUFJLENBQUM7WUFDdkJzQixJQUFJVyxLQUFLQyxHQUFHLEdBQUdDLFFBQVE7WUFDdkJYO1lBQ0FDLE1BQU0sQ0FBQyxDQUFDLEVBQUVELEtBQUssQ0FBQztZQUNoQkUsY0FBYztRQUNoQjtJQUNGLEVBQUUsT0FBT3BCLE9BQU87UUFDZEwsUUFBUUssS0FBSyxDQUFDLHVCQUF1QkE7UUFDckMsT0FBT3hCLHFEQUFZQSxDQUFDa0IsSUFBSSxDQUN0QjtZQUFFUyxTQUFTSCxpQkFBaUIwQixRQUFRMUIsTUFBTUcsT0FBTyxHQUFHO1FBQTBCLEdBQzlFO1lBQUVOLFFBQVE7UUFBSTtJQUVsQjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmVhaC8uL2FwcC9hcGkvZ3JvdXBzL3JvdXRlLnRzP2Q0YzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0U2VydmVyU2Vzc2lvbiB9IGZyb20gXCJuZXh0LWF1dGgvbmV4dFwiO1xuaW1wb3J0IHsgYXV0aE9wdGlvbnMgfSBmcm9tIFwiQC9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZVwiO1xuaW1wb3J0IHsgTmV4dFJlc3BvbnNlIH0gZnJvbSBcIm5leHQvc2VydmVyXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFkbWluVG9rZW4oKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYCR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQkFTRV9VUkx9L3JlYWxtcy8ke3Byb2Nlc3MuZW52LktFWUNMT0FLX1JFQUxNfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgICAgICBjbGllbnRfaWQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9JRCEsXG4gICAgICAgICAgY2xpZW50X3NlY3JldDogcHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQ0xJRU5UX1NFQ1JFVCEsXG4gICAgICAgIH0pLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdG9rZW5SZXNwb25zZS5qc29uKCk7XG5cbiAgICAvLyBMb2cgdGhlIHJlc3BvbnNlIGZvciBkZWJ1Z2dpbmdcbiAgICBjb25zb2xlLmxvZygnVG9rZW4gUmVzcG9uc2U6Jywge1xuICAgICAgc3RhdHVzOiB0b2tlblJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG9rOiB0b2tlblJlc3BvbnNlLm9rLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0pO1xuXG4gICAgaWYgKCF0b2tlblJlc3BvbnNlLm9rIHx8ICFkYXRhLmFjY2Vzc190b2tlbikge1xuICAgICAgLy8gTG9nIHRoZSBlcnJvciBkZXRhaWxzXG4gICAgICBjb25zb2xlLmVycm9yKCdUb2tlbiBFcnJvciBEZXRhaWxzOicsIHtcbiAgICAgICAgc3RhdHVzOiB0b2tlblJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YS5hY2Nlc3NfdG9rZW47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignVG9rZW4gRXJyb3I6JywgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBHRVQoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFNlcnZlclNlc3Npb24oYXV0aE9wdGlvbnMpO1xuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgbWVzc2FnZTogXCJOb24gYXV0b3Jpc8OpXCIgfSwgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldEFkbWluVG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oeyBtZXNzYWdlOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb25cIiB9LCB7IHN0YXR1czogNDAxIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICBgJHtwcm9jZXNzLmVudi5LRVlDTE9BS19CQVNFX1VSTH0vYWRtaW4vcmVhbG1zLyR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfUkVBTE19L2dyb3Vwc2AsXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgbWVzc2FnZTogXCLDiWNoZWMgZGUgbGEgcsOpY3Vww6lyYXRpb24gZGVzIGdyb3VwZXNcIiB9LCB7IHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwcyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIC8vIFJldHVybiBlbXB0eSBhcnJheSBpZiBubyBncm91cHNcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ3JvdXBzKSkge1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKFtdKTtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cHNXaXRoQ291bnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBncm91cHMubWFwKGFzeW5jIChncm91cDogYW55KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY291bnRSZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgICAgYCR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQkFTRV9VUkx9L2FkbWluL3JlYWxtcy8ke3Byb2Nlc3MuZW52LktFWUNMT0FLX1JFQUxNfS9ncm91cHMvJHtncm91cC5pZH0vbWVtYmVycy9jb3VudGAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIFxuICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgaWYgKGNvdW50UmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIGNvdW50ID0gYXdhaXQgY291bnRSZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBncm91cC5pZCxcbiAgICAgICAgICAgIG5hbWU6IGdyb3VwLm5hbWUsXG4gICAgICAgICAgICBwYXRoOiBncm91cC5wYXRoLFxuICAgICAgICAgICAgbWVtYmVyc0NvdW50OiBjb3VudCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICAgICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgICAgICAgcGF0aDogZ3JvdXAucGF0aCxcbiAgICAgICAgICAgIG1lbWJlcnNDb3VudDogMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oZ3JvdXBzV2l0aENvdW50cyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignR3JvdXBzIEFQSSBFcnJvcjonLCBlcnJvcik7XG4gICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgbWVzc2FnZTogXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZVwiIH0sIHsgc3RhdHVzOiA1MDAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIFBPU1QocmVxOiBSZXF1ZXN0KSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFNlcnZlclNlc3Npb24oYXV0aE9wdGlvbnMpO1xuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgbWVzc2FnZTogXCJOb24gYXV0b3Jpc8OpXCIgfSwgeyBzdGF0dXM6IDQwMSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGF3YWl0IHJlcS5qc29uKCk7XG4gICAgaWYgKCFuYW1lPy50cmltKCkpIHtcbiAgICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbihcbiAgICAgICAgeyBtZXNzYWdlOiBcIkxlIG5vbSBkdSBncm91cGUgZXN0IHJlcXVpc1wiIH0sXG4gICAgICAgIHsgc3RhdHVzOiA0MDAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldEFkbWluVG9rZW4oKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICBgJHtwcm9jZXNzLmVudi5LRVlDTE9BS19CQVNFX1VSTH0vYWRtaW4vcmVhbG1zLyR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfUkVBTE19L2dyb3Vwc2AsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBuYW1lIH0pLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ8OJY2hlYyBkZSBsYSBjcsOpYXRpb24gZHUgZ3JvdXBlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgXG4gICAgICBpZDogRGF0ZS5ub3coKS50b1N0cmluZygpLCBcbiAgICAgIG5hbWUsIFxuICAgICAgcGF0aDogYC8ke25hbWV9YCwgXG4gICAgICBtZW1iZXJzQ291bnQ6IDAgXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignQ3JlYXRlIEdyb3VwIEVycm9yOicsIGVycm9yKTtcbiAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oXG4gICAgICB7IG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZVwiIH0sXG4gICAgICB7IHN0YXR1czogNTAwIH1cbiAgICApO1xuICB9XG59ICJdLCJuYW1lcyI6WyJnZXRTZXJ2ZXJTZXNzaW9uIiwiYXV0aE9wdGlvbnMiLCJOZXh0UmVzcG9uc2UiLCJnZXRBZG1pblRva2VuIiwidG9rZW5SZXNwb25zZSIsImZldGNoIiwicHJvY2VzcyIsImVudiIsIktFWUNMT0FLX0JBU0VfVVJMIiwiS0VZQ0xPQUtfUkVBTE0iLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIlVSTFNlYXJjaFBhcmFtcyIsImdyYW50X3R5cGUiLCJjbGllbnRfaWQiLCJLRVlDTE9BS19DTElFTlRfSUQiLCJjbGllbnRfc2VjcmV0IiwiS0VZQ0xPQUtfQ0xJRU5UX1NFQ1JFVCIsImRhdGEiLCJqc29uIiwiY29uc29sZSIsImxvZyIsInN0YXR1cyIsIm9rIiwiYWNjZXNzX3Rva2VuIiwiZXJyb3IiLCJHRVQiLCJzZXNzaW9uIiwibWVzc2FnZSIsInRva2VuIiwicmVzcG9uc2UiLCJBdXRob3JpemF0aW9uIiwiZ3JvdXBzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ3JvdXBzV2l0aENvdW50cyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJncm91cCIsImNvdW50UmVzcG9uc2UiLCJpZCIsImNvdW50IiwibmFtZSIsInBhdGgiLCJtZW1iZXJzQ291bnQiLCJQT1NUIiwicmVxIiwidHJpbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJFcnJvciIsIkRhdGUiLCJub3ciLCJ0b1N0cmluZyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./app/api/groups/route.ts\n");
|
|
|
|
/***/ })
|
|
|
|
};
|
|
;
|
|
|
|
// load runtime
|
|
var __webpack_require__ = require("../../../webpack-runtime.js");
|
|
__webpack_require__.C(exports);
|
|
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/jose","vendor-chunks/next-auth","vendor-chunks/openid-client","vendor-chunks/@babel","vendor-chunks/oauth","vendor-chunks/preact","vendor-chunks/uuid","vendor-chunks/yallist","vendor-chunks/preact-render-to-string","vendor-chunks/cookie","vendor-chunks/oidc-token-hash","vendor-chunks/@panva"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fgroups%2Froute&page=%2Fapi%2Fgroups%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fgroups%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!")));
|
|
module.exports = __webpack_exports__;
|
|
|
|
})(); |