index.ts 1023 B

12345678910111213141516171819202122232425262728293031
  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 = (scopes?: Scope[], opts?: {acceptLegacy: boolean})
  9. => (req: AccessTokenParserReq, res: Response, next: NextFunction) => Promise<void>
  10. export const accessTokenParser: AccessTokenParser = (scopes, opts) => {
  11. return async(req, res, next): Promise<void> => {
  12. // TODO: comply HTTP header of RFC6750 / Authorization: Bearer
  13. if (scopes == null || scopes.length === 0) {
  14. logger.warn('scopes is empty');
  15. return next();
  16. }
  17. await parserForAccessToken(scopes)(req, res);
  18. if (opts?.acceptLegacy) {
  19. await parserForApiToken(req, res);
  20. }
  21. return next();
  22. };
  23. };