You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					59 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					59 lines
				
				2.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.buildAuthenticatedRouter = void 0;
							 | 
						||
| 
								 | 
							
								const tslib_1 = require("tslib");
							 | 
						||
| 
								 | 
							
								const logout_handler_1 = require("./authentication/logout.handler");
							 | 
						||
| 
								 | 
							
								const buildRouter_1 = require("./buildRouter");
							 | 
						||
| 
								 | 
							
								const login_handler_1 = require("./authentication/login.handler");
							 | 
						||
| 
								 | 
							
								const protected_routes_handler_1 = require("./authentication/protected-routes.handler");
							 | 
						||
| 
								 | 
							
								const cookie_1 = tslib_1.__importDefault(require("@fastify/cookie"));
							 | 
						||
| 
								 | 
							
								const formbody_1 = tslib_1.__importDefault(require("@fastify/formbody"));
							 | 
						||
| 
								 | 
							
								const session_1 = tslib_1.__importDefault(require("@fastify/session"));
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @typedef {Function} Authenticate
							 | 
						||
| 
								 | 
							
								 * @memberof module:@adminjs/fastify
							 | 
						||
| 
								 | 
							
								 * @description
							 | 
						||
| 
								 | 
							
								 * function taking 2 arguments email and password
							 | 
						||
| 
								 | 
							
								 * @param {string} [email]         email given in the form
							 | 
						||
| 
								 | 
							
								 * @param {string} [password]      password given in the form
							 | 
						||
| 
								 | 
							
								 * @return {CurrentAdmin | null}      returns current admin or null
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Builds the Express Router which is protected by a session auth
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Normally fastify-session holds session in memory, which is
							 | 
						||
| 
								 | 
							
								 * not optimized for production usage and, in development, it causes
							 | 
						||
| 
								 | 
							
								 * logging out after every page refresh (if you use nodemon).
							 | 
						||
| 
								 | 
							
								 * @static
							 | 
						||
| 
								 | 
							
								 * @memberof module:@adminjs/fastify
							 | 
						||
| 
								 | 
							
								 * @example
							 | 
						||
| 
								 | 
							
								 * const ADMIN = {
							 | 
						||
| 
								 | 
							
								 *   email: 'test@example.com',
							 | 
						||
| 
								 | 
							
								 *   password: 'password',
							 | 
						||
| 
								 | 
							
								 * }
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * AdminJSFastify.buildAuthenticatedRouter(adminJs, {
							 | 
						||
| 
								 | 
							
								 *   authenticate: async (email, password) => {
							 | 
						||
| 
								 | 
							
								 *     if (ADMIN.password === password && ADMIN.email === email) {
							 | 
						||
| 
								 | 
							
								 *       return ADMIN
							 | 
						||
| 
								 | 
							
								 *     }
							 | 
						||
| 
								 | 
							
								 *     return null
							 | 
						||
| 
								 | 
							
								 *   },
							 | 
						||
| 
								 | 
							
								 *   cookieName: 'adminjs',
							 | 
						||
| 
								 | 
							
								 *   cookiePassword: 'somePassword',
							 | 
						||
| 
								 | 
							
								 * }, [router])
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								const buildAuthenticatedRouter = async (admin, auth, fastifyApp, sessionOptions) => {
							 | 
						||
| 
								 | 
							
								    var _a, _b;
							 | 
						||
| 
								 | 
							
								    await fastifyApp.register(cookie_1.default, {
							 | 
						||
| 
								 | 
							
								        secret: auth.cookiePassword,
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    await fastifyApp.register(session_1.default, Object.assign({ secret: auth.cookiePassword, cookieName: (_a = auth.cookieName) !== null && _a !== void 0 ? _a : 'adminjs', cookie: (_b = sessionOptions === null || sessionOptions === void 0 ? void 0 : sessionOptions.cookie) !== null && _b !== void 0 ? _b : { secure: false } }, (sessionOptions !== null && sessionOptions !== void 0 ? sessionOptions : {})));
							 | 
						||
| 
								 | 
							
								    await fastifyApp.register(formbody_1.default);
							 | 
						||
| 
								 | 
							
								    await (0, buildRouter_1.buildRouter)(admin, fastifyApp);
							 | 
						||
| 
								 | 
							
								    (0, protected_routes_handler_1.withProtectedRoutesHandler)(fastifyApp, admin);
							 | 
						||
| 
								 | 
							
								    (0, login_handler_1.withLogin)(fastifyApp, admin, auth);
							 | 
						||
| 
								 | 
							
								    (0, logout_handler_1.withLogout)(fastifyApp, admin);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								exports.buildAuthenticatedRouter = buildAuthenticatedRouter;
							 |