index.ts 974 B

123456789101112131415161718192021222324252627282930313233343536
  1. import type { Scope } from '@growi/core/dist/interfaces';
  2. import type { NextFunction, Response } from 'express';
  3. import loggerFactory from '~/utils/logger';
  4. import { parserForAccessToken } from './access-token';
  5. import { parserForApiToken } from './api-token';
  6. import type { AccessTokenParserReq } from './interfaces';
  7. const logger = loggerFactory('growi:middleware:access-token-parser');
  8. export type AccessTokenParser = (
  9. scopes?: Scope[],
  10. opts?: { acceptLegacy: boolean },
  11. ) => (
  12. req: AccessTokenParserReq,
  13. res: Response,
  14. next: NextFunction,
  15. ) => Promise<void>;
  16. export const accessTokenParser: AccessTokenParser = (scopes, opts) => {
  17. return async (req, res, next): Promise<void> => {
  18. if (scopes == null || scopes.length === 0) {
  19. logger.warn('scopes is empty');
  20. return next();
  21. }
  22. await parserForAccessToken(scopes)(req, res);
  23. if (opts?.acceptLegacy) {
  24. await parserForApiToken(req, res);
  25. }
  26. return next();
  27. };
  28. };