lobe-chat

Форк
0
/
jwt.test.ts 
62 строки · 2.0 Кб
1
import { describe, expect, it, vi } from 'vitest';
2

3
import { NON_HTTP_PREFIX } from '@/const/auth';
4

5
import { getJWTPayload } from './jwt';
6

7
let enableClerkMock = false;
8
let enableNextAuthMock = false;
9

10
vi.mock('@/const/auth', async (importOriginal) => {
11
  const data = await importOriginal();
12

13
  return {
14
    ...(data as any),
15
    get enableClerk() {
16
      return enableClerkMock;
17
    },
18
    get enableNextAuth() {
19
      return enableNextAuthMock;
20
    },
21
  };
22
});
23

24
vi.mock('@/config/app', () => ({
25
  getAppConfig: vi.fn(),
26
}));
27

28
describe('getJWTPayload', () => {
29
  it('should parse JWT payload for non-HTTPS token', async () => {
30
    const token = `${NON_HTTP_PREFIX}.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ`;
31
    const payload = await getJWTPayload(token);
32
    expect(payload).toEqual({
33
      sub: '1234567890',
34
      name: 'John Doe',
35
      iat: 1516239022,
36
    });
37
  });
38

39
  it('should verify and parse JWT payload for HTTPS token', async () => {
40
    const token =
41
      'eyJhbGciOiJIUzI1NiJ9.eyJhY2Nlc3NDb2RlIjoiIiwidXNlcklkIjoiMDAxMzYyYzMtNDhjNS00NjM1LWJkM2ItODM3YmZmZjU4ZmMwIiwiYXBpS2V5IjoiYWJjIiwiZW5kcG9pbnQiOiJhYmMiLCJpYXQiOjE3MTY4MDIyMjUsImV4cCI6MTAwMDAwMDAwMDE3MTY4MDIwMDB9.FF0FxsE8Cajs-_hv5GD0TNUDwvekAkI9l_LL_IOPdGQ';
42
    const payload = await getJWTPayload(token);
43
    expect(payload).toEqual({
44
      accessCode: '',
45
      apiKey: 'abc',
46
      endpoint: 'abc',
47
      exp: 10000000001716802000,
48
      iat: 1716802225,
49
      userId: '001362c3-48c5-4635-bd3b-837bfff58fc0',
50
    });
51
  });
52

53
  it('should not verify success and parse JWT payload for dated token', async () => {
54
    const token =
55
      'eyJhbGciOiJIUzI1NiJ9.eyJhY2Nlc3NDb2RlIjoiIiwidXNlcklkIjoiYWY3M2JhODktZjFhMy00YjliLWEwM2QtZGViZmZlMzE4NmQxIiwiYXBpS2V5IjoiYWJjIiwiZW5kcG9pbnQiOiJhYmMiLCJpYXQiOjE3MTY3OTk5ODAsImV4cCI6MTcxNjgwMDA4MH0.8AGFsLcwyrQG82kVUYOGFXHIwihm2n16ctyArKW9100';
56
    try {
57
      await getJWTPayload(token);
58
    } catch (e) {
59
      expect(e).toEqual(new TypeError('"exp" claim timestamp check failed'));
60
    }
61
  });
62
});
63

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.