juice-shop

Форк
0
/
two-factor-auth-service.ts 
59 строк · 1.9 Кб
1
/*
2
 * Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3
 * SPDX-License-Identifier: MIT
4
 */
5

6
import { Injectable } from '@angular/core'
7
import { HttpClient } from '@angular/common/http'
8
import { catchError, map } from 'rxjs/operators'
9
import { environment } from '../../environments/environment'
10
import { type Observable } from 'rxjs'
11

12
interface TwoFactorVerifyResponse {
13
  authentication: AuthenticationPayload
14
}
15

16
interface AuthenticationPayload {
17
  token: string
18
  bid: number
19
  umail: string
20
}
21

22
interface TwoFactorAuthStatusPayload {
23
  setup: boolean
24
  secret?: string
25
  setupToken?: string
26
  email?: string
27
}
28

29
@Injectable({
30
  providedIn: 'root'
31
})
32
export class TwoFactorAuthService {
33
  constructor (private readonly http: HttpClient) {}
34

35
  verify (totpToken: string): Observable<AuthenticationPayload> {
36
    return this.http.post<TwoFactorVerifyResponse>(`${environment.hostServer}/rest/2fa/verify`, {
37
      tmpToken: localStorage.getItem('totp_tmp_token'),
38
      totpToken
39
    }).pipe(map((response: TwoFactorVerifyResponse) => response.authentication), catchError((error) => { throw error }))
40
  }
41

42
  status (): Observable<TwoFactorAuthStatusPayload> {
43
    return this.http.get<TwoFactorAuthStatusPayload>(`${environment.hostServer}/rest/2fa/status`)
44
      .pipe(map((response: TwoFactorAuthStatusPayload) => response), catchError((error) => { throw error }))
45
  }
46

47
  setup (password: string, initialToken: string, setupToken?: string): Observable<void> {
48
    return this.http.post(`${environment.hostServer}/rest/2fa/setup`, {
49
      password,
50
      setupToken,
51
      initialToken
52
    }).pipe(map(() => undefined), catchError((error) => { throw error }))
53
  }
54

55
  disable (password: string): Observable<void> {
56
    return this.http.post(`${environment.hostServer}/rest/2fa/disable`, { password })
57
      .pipe(map(() => undefined), catchError((error) => { throw error }))
58
  }
59
}
60

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

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

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

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