juice-shop
322 строки · 13.5 Кб
1/*
2* Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3* SPDX-License-Identifier: MIT
4*/
5
6import { BrowserModule } from '@angular/platform-browser'7import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'8import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http'9import { CookieModule, CookieService } from 'ngx-cookie'10import { ReactiveFormsModule, FormsModule } from '@angular/forms'11import { Routing } from './app.routing'12import { OverlayContainer } from '@angular/cdk/overlay'13import { TranslateLoader, TranslateModule } from '@ngx-translate/core'14import { TranslateHttpLoader } from '@ngx-translate/http-loader'15import { QRCodeModule } from 'anuglar2-qrcode'16import { ClipboardModule } from 'ngx-clipboard'17import { FileUploadModule } from 'ng2-file-upload'18import { SlideshowModule } from 'ng-simple-slideshow'19import { AppComponent } from './app.component'20import { AboutComponent } from './about/about.component'21import { AdministrationComponent } from './administration/administration.component'22import { BasketComponent } from './basket/basket.component'23import { LoginComponent } from './login/login.component'24import { NavbarComponent } from './navbar/navbar.component'25import { WelcomeComponent } from './welcome/welcome.component'26import { WelcomeBannerComponent } from './welcome-banner/welcome-banner.component'27import { SearchResultComponent } from './search-result/search-result.component'28import { ForgotPasswordComponent } from './forgot-password/forgot-password.component'29import { RegisterComponent } from './register/register.component'30import { ContactComponent } from './contact/contact.component'31import { ChangePasswordComponent } from './change-password/change-password.component'32import { ProductDetailsComponent } from './product-details/product-details.component'33import { ComplaintComponent } from './complaint/complaint.component'34import { ChatbotComponent } from './chatbot/chatbot.component'35import { TrackResultComponent } from './track-result/track-result.component'36import { RecycleComponent } from './recycle/recycle.component'37import { QrCodeComponent } from './qr-code/qr-code.component'38import { UserDetailsComponent } from './user-details/user-details.component'39import { ServerStartedNotificationComponent } from './server-started-notification/server-started-notification.component'40import {41ChallengeSolvedNotificationComponent
42} from './challenge-solved-notification/challenge-solved-notification.component'43import { OAuthComponent } from './oauth/oauth.component'44import { NFTUnlockComponent } from './nft-unlock/nft-unlock.component'45import { TokenSaleComponent } from './token-sale/token-sale.component'46import { ProductReviewEditComponent } from './product-review-edit/product-review-edit.component'47import { TwoFactorAuthEnterComponent } from './two-factor-auth-enter/two-factor-auth-enter.component'48import { PrivacySecurityComponent } from './privacy-security/privacy-security.component'49import { ErrorPageComponent } from './error-page/error-page.component'50import { NgMatSearchBarModule } from 'ng-mat-search-bar'51import { RequestInterceptor } from './Services/request.interceptor'52import { ProductService } from './Services/product.service'53import { ConfigurationService } from './Services/configuration.service'54import { AdministrationService } from './Services/administration.service'55import { SecurityQuestionService } from './Services/security-question.service'56import { UserService } from './Services/user.service'57import { SecurityAnswerService } from './Services/security-answer.service'58import { FeedbackService } from './Services/feedback.service'59import { CaptchaService } from './Services/captcha.service'60import { WindowRefService } from './Services/window-ref.service'61import { ProductReviewService } from './Services/product-review.service'62import { ComplaintService } from './Services/complaint.service'63import { ChatbotService } from './Services/chatbot.service'64import { TrackOrderService } from './Services/track-order.service'65import { RecycleService } from './Services/recycle.service'66import { BasketService } from './Services/basket.service'67import { ChallengeService } from './Services/challenge.service'68import { DataSubjectService } from './Services/data-subject.service'69import { ImageCaptchaService } from './Services/image-captcha.service'70import { KeysService } from './Services/keys.service'71import { AddressService } from './Services/address.service'72import { QuantityService } from './Services/quantity.service'73import { FlexLayoutModule } from '@angular/flex-layout'74import { BrowserAnimationsModule } from '@angular/platform-browser/animations'75import { MatToolbarModule } from '@angular/material/toolbar'76import { MatIconModule } from '@angular/material/icon'77import { MatFormFieldModule } from '@angular/material/form-field'78import { MatSelectModule } from '@angular/material/select'79import { MatButtonModule } from '@angular/material/button'80import { MatSidenavModule } from '@angular/material/sidenav'81import { MatTableModule } from '@angular/material/table'82import { MatPaginatorModule } from '@angular/material/paginator'83import { MatCardModule } from '@angular/material/card'84import { MatInputModule } from '@angular/material/input'85import { MatCheckboxModule } from '@angular/material/checkbox'86import { MatDialogModule } from '@angular/material/dialog'87import { MatDividerModule } from '@angular/material/divider'88import { MatDatepickerModule } from '@angular/material/datepicker'89import { MatNativeDateModule } from '@angular/material/core'90import { MatExpansionModule } from '@angular/material/expansion'91import { MatProgressBarModule } from '@angular/material/progress-bar'92import { MatTooltipModule } from '@angular/material/tooltip'93import { MatMenuModule } from '@angular/material/menu'94import { MatListModule } from '@angular/material/list'95import { SidenavComponent } from './sidenav/sidenav.component'96import { MatButtonToggleModule } from '@angular/material/button-toggle'97import { LayoutModule } from '@angular/cdk/layout'98import { MatGridListModule } from '@angular/material/grid-list'99import { MatSnackBarModule } from '@angular/material/snack-bar'100import { MatRadioModule } from '@angular/material/radio'101import { MatBadgeModule } from '@angular/material/badge'102import { HighlightModule, HIGHLIGHT_OPTIONS } from 'ngx-highlightjs'103import { ScoreBoardModule } from './score-board/score-board.module'104import { TwoFactorAuthComponent } from './two-factor-auth/two-factor-auth.component'105import { DataExportComponent } from './data-export/data-export.component'106import { LastLoginIpComponent } from './last-login-ip/last-login-ip.component'107import { PrivacyPolicyComponent } from './privacy-policy/privacy-policy.component'108import { AddressCreateComponent } from './address-create/address-create.component'109import { AddressSelectComponent } from './address-select/address-select.component'110import { PaymentService } from './Services/payment.service'111import { PaymentComponent } from './payment/payment.component'112import { PaymentMethodComponent } from './payment-method/payment-method.component'113import { SavedPaymentMethodsComponent } from './saved-payment-methods/saved-payment-methods.component'114import { AccountingComponent } from './accounting/accounting.component'115import { OrderSummaryComponent } from './order-summary/order-summary.component'116import { PurchaseBasketComponent } from './purchase-basket/purchase-basket.component'117import { AddressComponent } from './address/address.component'118import { SavedAddressComponent } from './saved-address/saved-address.component'119import { ChallengeStatusBadgeComponent } from './challenge-status-badge/challenge-status-badge.component'120import { OrderCompletionComponent } from './order-completion/order-completion.component'121import { WalletComponent } from './wallet/wallet.component'122import { WalletService } from './Services/wallet.service'123import { OrderHistoryComponent } from './order-history/order-history.component'124import { OrderHistoryService } from './Services/order-history.service'125import { DeliveryMethodComponent } from './delivery-method/delivery-method.component'126import { DeliveryService } from './Services/delivery.service'127import { PhotoWallComponent } from './photo-wall/photo-wall.component'128import { PhotoWallService } from './Services/photo-wall.service'129import { DeluxeUserComponent } from './deluxe-user/deluxe-user.component'130import { AccountingGuard, AdminGuard, DeluxeGuard, LoginGuard } from './app.guard'131import { MatPasswordStrengthModule } from '@angular-material-extensions/password-strength'132import { MatSlideToggleModule } from '@angular/material/slide-toggle'133import { FeedbackDetailsComponent } from './feedback-details/feedback-details.component'134import { MatSliderModule } from '@angular/material/slider'135import { MatTabsModule } from '@angular/material/tabs'136import { MatChipsModule } from '@angular/material/chips'137import { CodeSnippetComponent } from './code-snippet/code-snippet.component'138import { CodeAreaComponent } from './code-area/code-area.component'139import { NgxTextDiffModule } from 'ngx-text-diff'140import { CodeFixesComponent } from './code-fixes/code-fixes.component'141
142export function HttpLoaderFactory (http: HttpClient) {143return new TranslateHttpLoader(http, './assets/i18n/', '.json')144}
145
146@NgModule({147declarations: [148AppComponent,149AboutComponent,150AdministrationComponent,151BasketComponent,152LoginComponent,153NavbarComponent,154WelcomeComponent,155WelcomeBannerComponent,156SearchResultComponent,157ForgotPasswordComponent,158RegisterComponent,159ContactComponent,160ChangePasswordComponent,161ProductDetailsComponent,162ComplaintComponent,163ChatbotComponent,164TrackResultComponent,165RecycleComponent,166QrCodeComponent,167UserDetailsComponent,168ServerStartedNotificationComponent,169ChallengeSolvedNotificationComponent,170OAuthComponent,171TokenSaleComponent,172NFTUnlockComponent,173ProductReviewEditComponent,174TwoFactorAuthEnterComponent,175SidenavComponent,176PrivacySecurityComponent,177ErrorPageComponent,178TwoFactorAuthComponent,179DataExportComponent,180LastLoginIpComponent,181PrivacyPolicyComponent,182OrderCompletionComponent,183AddressCreateComponent,184AddressSelectComponent,185AddressComponent,186SavedAddressComponent,187PaymentComponent,188PaymentMethodComponent,189SavedPaymentMethodsComponent,190AccountingComponent,191OrderSummaryComponent,192PurchaseBasketComponent,193PrivacyPolicyComponent,194ChallengeStatusBadgeComponent,195WalletComponent,196OrderHistoryComponent,197DeliveryMethodComponent,198PhotoWallComponent,199DeluxeUserComponent,200FeedbackDetailsComponent,201CodeSnippetComponent,202CodeAreaComponent,203CodeFixesComponent
204],205imports: [206BrowserModule,207Routing,208TranslateModule.forRoot(209{210loader: {211provide: TranslateLoader,212useFactory: HttpLoaderFactory,213deps: [HttpClient]214}215}216),217CookieModule.forRoot(),218MatPasswordStrengthModule.forRoot(),219FlexLayoutModule,220HttpClientModule,221ReactiveFormsModule,222BrowserAnimationsModule,223SlideshowModule,224QRCodeModule,225FileUploadModule,226ClipboardModule,227MatToolbarModule,228MatIconModule,229FormsModule,230MatFormFieldModule,231MatSelectModule,232MatButtonModule,233MatSidenavModule,234MatTableModule,235MatPaginatorModule,236MatCardModule,237MatInputModule,238MatCheckboxModule,239MatDialogModule,240MatDividerModule,241MatDatepickerModule,242MatNativeDateModule,243MatExpansionModule,244MatProgressBarModule,245MatTooltipModule,246MatMenuModule,247MatListModule,248MatButtonToggleModule,249LayoutModule,250MatGridListModule,251NgMatSearchBarModule,252MatBadgeModule,253MatRadioModule,254MatSnackBarModule,255MatSliderModule,256MatTabsModule,257MatSlideToggleModule,258MatChipsModule,259NgxTextDiffModule,260HighlightModule,261ScoreBoardModule
262],263schemas: [CUSTOM_ELEMENTS_SCHEMA],264providers: [265{266provide: HTTP_INTERCEPTORS,267useClass: RequestInterceptor,268multi: true269},270{271provide: HIGHLIGHT_OPTIONS,272useValue: {273coreLibraryLoader: async () => await import('highlight.js/lib/core'),274lineNumbersLoader: async () => await import('highlightjs-line-numbers.js'),275languages: {276typescript: async () => await import('highlight.js/lib/languages/typescript'),277javascript: async () => await import('highlight.js/lib/languages/javascript'),278yaml: async () => await import('highlight.js/lib/languages/yaml')279}280}281},282ProductService,283ConfigurationService,284AdministrationService,285SecurityQuestionService,286DataSubjectService,287UserService,288SecurityAnswerService,289CaptchaService,290FeedbackService,291WindowRefService,292ProductReviewService,293ComplaintService,294ChatbotService,295TrackOrderService,296RecycleService,297BasketService,298ChallengeService,299CookieService,300AdminGuard,301LoginGuard,302PaymentService,303AccountingGuard,304DeluxeGuard,305ImageCaptchaService,306KeysService,307AddressService,308QuantityService,309WalletService,310OrderHistoryService,311DeliveryService,312PhotoWallService
313],314bootstrap: [AppComponent]315})316export class AppModule {317constructor (public configurationService: ConfigurationService, public overlayContainer: OverlayContainer) {318configurationService.getApplicationConfiguration().subscribe((conf) => {319overlayContainer.getContainerElement().classList.add(conf.application.theme + '-theme')320})321}322}
323