|
1 | 1 | require_relative "../code/failure" |
2 | 2 | require_relative "../utils/base_response" |
3 | 3 |
|
4 | | -class JwtAuthFilter |
5 | | - def initialize(app) |
6 | | - @app = app |
7 | | - end |
| 4 | +module Filter |
| 5 | + class JwtAuthFilter |
| 6 | + def initialize(app) |
| 7 | + @app = app |
| 8 | + end |
8 | 9 |
|
9 | | - def call(env) |
10 | | - request = Rack::Request.new(env) |
11 | | - token = request.get_header("HTTP_AUTHORIZATION")&.split(" ")&.last |
| 10 | + def call(env) |
| 11 | + request = Rack::Request.new(env) |
| 12 | + token = request.get_header("HTTP_AUTHORIZATION")&.split(" ")&.last |
12 | 13 |
|
13 | | - unless request.url.include? "/api-docs" |
14 | | - if token.nil? |
15 | | - return [ |
16 | | - Failure::NO_TOKEN_IN_HEADER.status_code, |
17 | | - { "Content-Type" => "application/json" }, |
18 | | - [ BaseResponse.of_failure(Failure::NO_TOKEN_IN_HEADER).to_json ] |
19 | | - ] |
20 | | - else |
21 | | - begin |
22 | | - validate_jwt(env, token) |
23 | | - rescue JWT::ExpiredSignature => e |
| 14 | + unless request.url.include? "/api-docs" |
| 15 | + if token.nil? |
24 | 16 | return [ |
25 | | - Failure::INVALID_TOKEN_IN_HEADER.status_code, |
| 17 | + Failure::NO_TOKEN_IN_HEADER.status_code, |
26 | 18 | { "Content-Type" => "application/json" }, |
27 | | - [ BaseResponse.of_failure(Failure::INVALID_TOKEN_IN_HEADER).to_json ] |
| 19 | + [ BaseResponse.of_failure(Failure::NO_TOKEN_IN_HEADER).to_json ] |
28 | 20 | ] |
| 21 | + else |
| 22 | + begin |
| 23 | + validate_jwt(env, token) |
| 24 | + rescue JWT::ExpiredSignature => e |
| 25 | + return [ |
| 26 | + Failure::INVALID_TOKEN_IN_HEADER.status_code, |
| 27 | + { "Content-Type" => "application/json" }, |
| 28 | + [ BaseResponse.of_failure(Failure::INVALID_TOKEN_IN_HEADER).to_json ] |
| 29 | + ] |
| 30 | + end |
29 | 31 | end |
30 | 32 | end |
| 33 | + @app.call(env) |
31 | 34 | end |
32 | | - @app.call(env) |
33 | | - end |
34 | 35 |
|
35 | | - private |
36 | | - def validate_jwt(env, token) |
37 | | - payload, = JWT.decode(token, ENV["JWT_SECRET"], true, { algorithm: "HS256" }) |
38 | | - env["user_id"] = payload["id"] |
39 | | - env["user_role"] = payload["role"] |
| 36 | + private |
| 37 | + def validate_jwt(env, token) |
| 38 | + payload, = JWT.decode(token, ENV["JWT_SECRET"], true, { algorithm: "HS256" }) |
| 39 | + env["user_id"] = payload["id"] |
| 40 | + env["user_role"] = payload["role"] |
| 41 | + end |
40 | 42 | end |
41 | 43 | end |
0 commit comments