Skip to content

Commit 3ba6149

Browse files
committed
refactor: 린팅 이슈 해결 및 통일성 강조
1 parent cc217da commit 3ba6149

File tree

1 file changed

+28
-27
lines changed

1 file changed

+28
-27
lines changed

src/middlewares/auth.middleware.ts

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -71,41 +71,42 @@ const verifyBearerTokens = () => {
7171
* Sentry 웹훅 요청의 시그니처 헤더를 검증합니다.
7272
* HMAC SHA256과 Sentry의 Client Secret를 사용하여 요청 본문을 해시화하고,
7373
* Sentry에서 제공하는 시그니처 헤더와 비교하여 요청의 무결성을 확인합니다.
74-
* @param {Request} request - Express 요청 객체
75-
* @returns {boolean} 헤더가 유효하면 true, 그렇지 않으면 false
7674
*/
77-
function verifySignature(request: Request, res: Response, next: NextFunction) {
78-
try {
79-
if(!process.env.SENTRY_CLIENT_SECRET) throw new Error("SENTRY_CLIENT_SECRET가 env에 없습니다");
80-
81-
const hmac = crypto.createHmac("sha256", process.env.SENTRY_CLIENT_SECRET);
82-
83-
// Raw body 사용 - Express에서 파싱되기 전의 원본 데이터 필요
84-
// request.rawBody가 없다면 fallback으로 JSON.stringify 사용 (완벽하지 않음)
85-
// @ts-expect-error - rawBody는 커스텀 미들웨어에서 추가되는 속성
86-
const bodyToVerify = request.rawBody || JSON.stringify(request.body);
87-
const sentrySignature = request.headers["sentry-hook-signature"];
88-
89-
if (!bodyToVerify) throw new Error("요청 본문이 없습니다.");
90-
if(!sentrySignature) throw new Error("시그니처 헤더가 없습니다.");
91-
92-
hmac.update(bodyToVerify, "utf8");
93-
const digest = hmac.digest("hex");
94-
95-
if(digest !== sentrySignature) throw new CustomError("유효하지 않은 시그니처 헤더입니다.", "INVALID_SIGNATURE", 400);
96-
97-
next();
98-
} catch (error) {
99-
logger.error('시그니처 검증 중 오류가 발생하였습니다. : ', error);
100-
next(error);
75+
function verifySentrySignature() {
76+
return (req: Request, res: Response, next: NextFunction) => {
77+
try {
78+
if (!process.env.SENTRY_CLIENT_SECRET) throw new Error("SENTRY_CLIENT_SECRET가 env에 없습니다");
79+
80+
const hmac = crypto.createHmac("sha256", process.env.SENTRY_CLIENT_SECRET);
81+
82+
// Raw body 사용 - Express에서 파싱되기 전의 원본 데이터 필요
83+
// req.rawBody가 없다면 fallback으로 JSON.stringify 사용 (완벽하지 않음)
84+
// @ts-expect-error - rawBody는 커스텀 미들웨어에서 추가되는 속성
85+
const bodyToVerify = req.rawBody || JSON.stringify(req.body);
86+
const sentrySignature = req.headers["sentry-hook-signature"];
87+
88+
if (!bodyToVerify) throw new Error("요청 본문이 없습니다.");
89+
if (!sentrySignature) throw new Error("시그니처 헤더가 없습니다.");
90+
91+
hmac.update(bodyToVerify, "utf8");
92+
const digest = hmac.digest("hex");
93+
94+
if (digest !== sentrySignature) throw new CustomError("유효하지 않은 시그니처 헤더입니다.", "INVALID_SIGNATURE", 400);
95+
96+
next();
97+
} catch (error) {
98+
logger.error('시그니처 검증 중 오류가 발생하였습니다. : ', error);
99+
next(error);
100+
}
101101
}
102102
}
103103

104104
/**
105105
* 사용자 인증을 위한 미들웨어 모음
106106
* @property {Function} verify
107+
* * @property {Function} verifySignature
107108
*/
108109
export const authMiddleware = {
109110
verify: verifyBearerTokens(),
110-
verifySignature,
111+
verifySignature: verifySentrySignature(),
111112
};

0 commit comments

Comments
 (0)