All files / server/src/utils authHeader.ts

95.23% Statements 20/21
87.5% Branches 7/8
100% Functions 2/2
95.23% Lines 20/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57        39x       901x   901x 25x 25x       876x   876x   876x 9x     9x     867x 867x     39x     450x   450x 113x       445x     337x           445x       445x    
import { getJwtResponse } from "server/utils/jwt";
import { logger } from "server/utils/logger";
import { UserGroup } from "shared/types/models/user";
 
export const getAuthorizedUsername = (
  authHeader: string | undefined,
  requiredUserGroup: UserGroup | UserGroup[],
): string | null => {
  logger.debug(`Auth: Require jwt for user group ${String(requiredUserGroup)}`);
 
  if (authHeader?.split(" ", 1)[0] !== "Bearer") {
    logger.info("Auth: No auth header");
    return null;
  }
 
  // Strip 'bearer' from authHeader
  const jwt = authHeader.split("Bearer ", 2)[1];
 
  const jwtResponse = getJwtResponse(jwt, requiredUserGroup);
 
  if (jwtResponse.status === "error") {
    logger.info(
      `Auth: Invalid jwt for user group '${String(requiredUserGroup)}'`,
    );
    return null;
  }
 
  logger.debug(`Auth: Valid jwt for user group ${String(requiredUserGroup)}`);
  return jwtResponse.body.username;
};
 
export const getAuthorizedUserGroup = (
  authHeader: string | undefined,
): UserGroup | null => {
  logger.debug("Auth: Get userGroup for user");
 
  if (authHeader?.split(" ", 1)[0] !== "Bearer") {
    return null;
  }
 
  // Strip 'bearer' from authHeader
  const jwt = authHeader.split("Bearer ", 2)[1];
 
  // Any userGroup is fine, we want to know what the group is
  const jwtResponse = getJwtResponse(jwt, [
    UserGroup.ADMIN,
    UserGroup.HELPER,
    UserGroup.USER,
  ]);
 
  Iif (jwtResponse.status === "error") {
    return null;
  }
 
  return jwtResponse.body.userGroup;
};