juice-shop

Форк
0
/
administration.component.ts 
109 строк · 3.7 Кб
1
/*
2
 * Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3
 * SPDX-License-Identifier: MIT
4
 */
5

6
import { UserDetailsComponent } from '../user-details/user-details.component'
7
import { FeedbackDetailsComponent } from '../feedback-details/feedback-details.component'
8
import { MatDialog } from '@angular/material/dialog'
9
import { FeedbackService } from '../Services/feedback.service'
10
import { MatTableDataSource } from '@angular/material/table'
11
import { UserService } from '../Services/user.service'
12
import { Component, type OnInit, ViewChild } from '@angular/core'
13
import { DomSanitizer } from '@angular/platform-browser'
14
import { library } from '@fortawesome/fontawesome-svg-core'
15
import { faArchive, faEye, faHome, faTrashAlt, faUser } from '@fortawesome/free-solid-svg-icons'
16
import { MatPaginator } from '@angular/material/paginator'
17

18
library.add(faUser, faEye, faHome, faArchive, faTrashAlt)
19

20
@Component({
21
  selector: 'app-administration',
22
  templateUrl: './administration.component.html',
23
  styleUrls: ['./administration.component.scss']
24
})
25
export class AdministrationComponent implements OnInit {
26
  public userDataSource: any
27
  public userDataSourceHidden: any
28
  public userColumns = ['user', 'email', 'user_detail']
29
  public feedbackDataSource: any
30
  public feedbackColumns = ['user', 'comment', 'rating', 'remove']
31
  public error: any
32
  public resultsLengthUser = 0
33
  public resultsLengthFeedback = 0
34
  @ViewChild('paginatorUsers') paginatorUsers: MatPaginator
35
  @ViewChild('paginatorFeedb') paginatorFeedb: MatPaginator
36
  constructor (private readonly dialog: MatDialog, private readonly userService: UserService, private readonly feedbackService: FeedbackService,
37
    private readonly sanitizer: DomSanitizer) {}
38

39
  ngOnInit () {
40
    this.findAllUsers()
41
    this.findAllFeedbacks()
42
  }
43

44
  findAllUsers () {
45
    this.userService.find().subscribe((users) => {
46
      this.userDataSource = users
47
      this.userDataSourceHidden = users
48
      for (const user of this.userDataSource) {
49
        user.email = this.sanitizer.bypassSecurityTrustHtml(`<span class="${this.doesUserHaveAnActiveSession(user) ? 'confirmation' : 'error'}">${user.email}</span>`)
50
      }
51
      this.userDataSource = new MatTableDataSource(this.userDataSource)
52
      this.userDataSource.paginator = this.paginatorUsers
53
      this.resultsLengthUser = users.length
54
    }, (err) => {
55
      this.error = err
56
      console.log(this.error)
57
    })
58
  }
59

60
  findAllFeedbacks () {
61
    this.feedbackService.find().subscribe((feedbacks) => {
62
      this.feedbackDataSource = feedbacks
63
      for (const feedback of this.feedbackDataSource) {
64
        feedback.comment = this.sanitizer.bypassSecurityTrustHtml(feedback.comment)
65
      }
66
      this.feedbackDataSource = new MatTableDataSource(this.feedbackDataSource)
67
      this.feedbackDataSource.paginator = this.paginatorFeedb
68
      this.resultsLengthFeedback = feedbacks.length
69
    }, (err) => {
70
      this.error = err
71
      console.log(this.error)
72
    })
73
  }
74

75
  deleteFeedback (id: number) {
76
    this.feedbackService.del(id).subscribe(() => {
77
      this.findAllFeedbacks()
78
    }, (err) => {
79
      this.error = err
80
      console.log(this.error)
81
    })
82
  }
83

84
  showUserDetail (id: number) {
85
    this.dialog.open(UserDetailsComponent, {
86
      data: {
87
        id
88
      }
89
    })
90
  }
91

92
  showFeedbackDetails (feedback: any, id: number) {
93
    this.dialog.open(FeedbackDetailsComponent, {
94
      data: {
95
        feedback,
96
        id
97
      }
98
    })
99
  }
100

101
  times (numberOfTimes: number) {
102
    return Array(numberOfTimes).fill('★')
103
  }
104

105
  doesUserHaveAnActiveSession (user: { email: string, lastLoginTime: number }) {
106
    const SIX_HOURS_IN_SECONDS = 60 * 60 * 6
107
    return user.lastLoginTime && user.lastLoginTime > ((Date.now() / 1000) - SIX_HOURS_IN_SECONDS)
108
  }
109
}
110

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

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

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

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