summaryrefslogtreecommitdiff
path: root/cli/bench/testdata/npm/hono/dist/middleware/jwt/index.js
blob: 6f486560b46d24199869d0f6570fd18d08c94065 (plain)
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
58
59
60
61
62
63
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.jwt = void 0;
const jwt_1 = require("../../utils/jwt");
const jwt = (options) => {
    if (!options) {
        throw new Error('JWT auth middleware requires options for "secret');
    }
    if (!crypto.subtle || !crypto.subtle.importKey) {
        throw new Error('`crypto.subtle.importKey` is undefined. JWT auth middleware requires it.');
    }
    return async (ctx, next) => {
        const credentials = ctx.req.headers.get('Authorization');
        let token;
        if (credentials) {
            const parts = credentials.split(/\s+/);
            if (parts.length !== 2) {
                ctx.res = new Response('Unauthorized', {
                    status: 401,
                    headers: {
                        'WWW-Authenticate': `Bearer realm="${ctx.req.url}",error="invalid_request",error_description="invalid credentials structure"`,
                    },
                });
                return;
            }
            else {
                token = parts[1];
            }
        }
        else if (options.cookie) {
            token = ctx.req.cookie(options.cookie);
        }
        if (!token) {
            ctx.res = new Response('Unauthorized', {
                status: 401,
                headers: {
                    'WWW-Authenticate': `Bearer realm="${ctx.req.url}",error="invalid_request",error_description="no authorization included in request"`,
                },
            });
            return;
        }
        let authorized = false;
        let msg = '';
        try {
            authorized = await jwt_1.Jwt.verify(token, options.secret, options.alg);
        }
        catch (e) {
            msg = `${e}`;
        }
        if (!authorized) {
            ctx.res = new Response('Unauthorized', {
                status: 401,
                statusText: msg,
                headers: {
                    'WWW-Authenticate': `Bearer realm="${ctx.req.url}",error="invalid_token",error_description="token verification failure"`,
                },
            });
            return;
        }
        await next();
    };
};
exports.jwt = jwt;