get-related-groups.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import type { IUserHasId } from '@growi/core';
  2. import { SCOPE } from '@growi/core/dist/interfaces';
  3. import { ErrorV3 } from '@growi/core/dist/models';
  4. import type { Request, RequestHandler } from 'express';
  5. import type Crowi from '~/server/crowi';
  6. import { accessTokenParser } from '~/server/middlewares/access-token-parser';
  7. import loggerFactory from '~/utils/logger';
  8. import type { ApiV3Response } from '../interfaces/apiv3-response';
  9. const logger = loggerFactory('growi:routes:apiv3:user:get-related-groups');
  10. type GetRelatedGroupsHandlerFactory = (crowi: Crowi) => RequestHandler[];
  11. interface Req extends Request {
  12. user: IUserHasId;
  13. }
  14. export const getRelatedGroupsHandlerFactory: GetRelatedGroupsHandlerFactory = (
  15. crowi,
  16. ) => {
  17. const loginRequiredStrictly = require('~/server/middlewares/login-required')(
  18. crowi,
  19. );
  20. return [
  21. accessTokenParser([SCOPE.READ.USER_SETTINGS.INFO], { acceptLegacy: true }),
  22. loginRequiredStrictly,
  23. async (req: Req, res: ApiV3Response) => {
  24. try {
  25. const relatedGroups =
  26. await crowi.pageGrantService?.getUserRelatedGroups(req.user);
  27. return res.apiv3({ relatedGroups });
  28. } catch (err) {
  29. logger.error(err);
  30. return res.apiv3Err(
  31. new ErrorV3('Error occurred while getting user related groups'),
  32. );
  33. }
  34. },
  35. ];
  36. };