diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index c06501f70..f9644b2a0 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -1,5 +1,6 @@ import { join } from 'path'; +import { AuthDeviceModule } from '@ghostfolio/api/app/auth-device/auth-device.module'; import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ScheduleModule } from '@nestjs/schedule'; @@ -28,7 +29,6 @@ import { PortfolioModule } from './portfolio/portfolio.module'; import { RedisCacheModule } from './redis-cache/redis-cache.module'; import { SymbolModule } from './symbol/symbol.module'; import { UserModule } from './user/user.module'; -import { AuthDeviceModule } from '@ghostfolio/api/app/auth-device/auth-device.module'; @Module({ imports: [ diff --git a/apps/api/src/app/auth-device/auth-device.controller.ts b/apps/api/src/app/auth-device/auth-device.controller.ts index 2eca1e165..4c932bc5a 100644 --- a/apps/api/src/app/auth-device/auth-device.controller.ts +++ b/apps/api/src/app/auth-device/auth-device.controller.ts @@ -1,3 +1,10 @@ +import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; +import { + getPermissions, + hasPermission, + permissions +} from '@ghostfolio/common/permissions'; +import { RequestWithUser } from '@ghostfolio/common/types'; import { Controller, Delete, @@ -8,14 +15,7 @@ import { } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; -import { getReasonPhrase, StatusCodes } from 'http-status-codes'; -import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; -import { RequestWithUser } from '@ghostfolio/common/types'; -import { - getPermissions, - hasPermission, - permissions -} from '@ghostfolio/common/permissions'; +import { StatusCodes, getReasonPhrase } from 'http-status-codes'; @Controller('auth-device') export class AuthDeviceController { diff --git a/apps/api/src/app/auth-device/auth-device.module.ts b/apps/api/src/app/auth-device/auth-device.module.ts index a0e195dad..360930cf2 100644 --- a/apps/api/src/app/auth-device/auth-device.module.ts +++ b/apps/api/src/app/auth-device/auth-device.module.ts @@ -1,9 +1,9 @@ -import { Module } from '@nestjs/common'; -import { JwtModule } from '@nestjs/jwt'; -import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; import { AuthDeviceController } from '@ghostfolio/api/app/auth-device/auth-device.controller'; -import { PrismaService } from '@ghostfolio/api/services/prisma.service'; +import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration.service'; +import { PrismaService } from '@ghostfolio/api/services/prisma.service'; +import { Module } from '@nestjs/common'; +import { JwtModule } from '@nestjs/jwt'; @Module({ controllers: [AuthDeviceController], diff --git a/apps/api/src/app/auth-device/auth-device.service.ts b/apps/api/src/app/auth-device/auth-device.service.ts index 8f7d98ff6..6d26bfb86 100644 --- a/apps/api/src/app/auth-device/auth-device.service.ts +++ b/apps/api/src/app/auth-device/auth-device.service.ts @@ -1,6 +1,6 @@ -import { Injectable } from '@nestjs/common'; import { ConfigurationService } from '@ghostfolio/api/services/configuration.service'; import { PrismaService } from '@ghostfolio/api/services/prisma.service'; +import { Injectable } from '@nestjs/common'; import { AuthDevice, Prisma } from '@prisma/client'; @Injectable() diff --git a/apps/api/src/app/auth/auth.controller.ts b/apps/api/src/app/auth/auth.controller.ts index cbcccdaac..8e6ff846d 100644 --- a/apps/api/src/app/auth/auth.controller.ts +++ b/apps/api/src/app/auth/auth.controller.ts @@ -1,3 +1,4 @@ +import { WebAuthService } from '@ghostfolio/api/app/auth/web-auth.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration.service'; import { Body, @@ -11,9 +12,9 @@ import { UseGuards } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; -import { getReasonPhrase, StatusCodes } from 'http-status-codes'; +import { StatusCodes, getReasonPhrase } from 'http-status-codes'; + import { AuthService } from './auth.service'; -import { WebAuthService } from '@ghostfolio/api/app/auth/web-auth.service'; import { AssertionCredentialJSON, AttestationCredentialJSON diff --git a/apps/api/src/app/auth/auth.module.ts b/apps/api/src/app/auth/auth.module.ts index a54e8b771..9b8ac4c39 100644 --- a/apps/api/src/app/auth/auth.module.ts +++ b/apps/api/src/app/auth/auth.module.ts @@ -1,3 +1,5 @@ +import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; +import { WebAuthService } from '@ghostfolio/api/app/auth/web-auth.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration.service'; import { PrismaService } from '@ghostfolio/api/services/prisma.service'; import { Module } from '@nestjs/common'; @@ -8,8 +10,6 @@ import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { GoogleStrategy } from './google.strategy'; import { JwtStrategy } from './jwt.strategy'; -import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; -import { WebAuthService } from '@ghostfolio/api/app/auth/web-auth.service'; @Module({ controllers: [AuthController], diff --git a/apps/api/src/app/auth/interfaces/interfaces.ts b/apps/api/src/app/auth/interfaces/interfaces.ts index 0f9a9f8c1..c3fbc9236 100644 --- a/apps/api/src/app/auth/interfaces/interfaces.ts +++ b/apps/api/src/app/auth/interfaces/interfaces.ts @@ -1,5 +1,5 @@ -import { Provider } from '@prisma/client'; import { AuthDeviceDto } from '@ghostfolio/api/app/auth-device/auth-device.dto'; +import { Provider } from '@prisma/client'; export interface AuthDeviceDialogParams { authDevice: AuthDeviceDto; diff --git a/apps/api/src/app/auth/web-auth.service.ts b/apps/api/src/app/auth/web-auth.service.ts index 39dcfe98e..7b3fd813a 100644 --- a/apps/api/src/app/auth/web-auth.service.ts +++ b/apps/api/src/app/auth/web-auth.service.ts @@ -1,31 +1,32 @@ +import { AuthDeviceDto } from '@ghostfolio/api/app/auth-device/auth-device.dto'; +import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration.service'; +import { RequestWithUser } from '@ghostfolio/common/types'; import { Inject, Injectable, InternalServerErrorException } from '@nestjs/common'; -import { UserService } from '../user/user.service'; +import { REQUEST } from '@nestjs/core'; +import { JwtService } from '@nestjs/jwt'; import { - generateAssertionOptions, GenerateAssertionOptionsOpts, - generateAttestationOptions, GenerateAttestationOptionsOpts, VerifiedAssertion, VerifiedAttestation, - verifyAssertionResponse, VerifyAssertionResponseOpts, - verifyAttestationResponse, - VerifyAttestationResponseOpts + VerifyAttestationResponseOpts, + generateAssertionOptions, + generateAttestationOptions, + verifyAssertionResponse, + verifyAttestationResponse } from '@simplewebauthn/server'; -import { REQUEST } from '@nestjs/core'; + +import { UserService } from '../user/user.service'; import { AssertionCredentialJSON, AttestationCredentialJSON } from './interfaces/simplewebauthn'; -import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; -import { JwtService } from '@nestjs/jwt'; -import { AuthDeviceDto } from '@ghostfolio/api/app/auth-device/auth-device.dto'; -import { RequestWithUser } from '@ghostfolio/common/types'; @Injectable() export class WebAuthService { diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index 1affa49cd..f16094edc 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -12,11 +12,11 @@ import { LoginWithAccessTokenDialog } from '@ghostfolio/client/components/login- import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; +import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { InfoItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { EMPTY, Subject } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; -import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; @Component({ selector: 'gf-header', diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts index 878211c3b..e2e136c76 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts @@ -3,10 +3,10 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; +import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; -import { MatCheckboxModule } from '@angular/material/checkbox'; import { LoginWithAccessTokenDialog } from './login-with-access-token-dialog.component'; diff --git a/apps/client/src/app/core/http-response.interceptor.ts b/apps/client/src/app/core/http-response.interceptor.ts index 290fac58f..3d807bfd3 100644 --- a/apps/client/src/app/core/http-response.interceptor.ts +++ b/apps/client/src/app/core/http-response.interceptor.ts @@ -14,12 +14,12 @@ import { TextOnlySnackBar } from '@angular/material/snack-bar'; import { Router } from '@angular/router'; +import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { StatusCodes } from 'http-status-codes'; import { Observable, throwError } from 'rxjs'; import { catchError, tap } from 'rxjs/operators'; import { TokenStorageService } from '../services/token-storage.service'; -import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; @Injectable() export class HttpResponseInterceptor implements HttpInterceptor { diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/account/account-page.component.ts index 6fdca84ca..7d1393bdc 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/account/account-page.component.ts @@ -1,14 +1,14 @@ import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { DEFAULT_DATE_FORMAT } from '@ghostfolio/common/config'; import { Access, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { Currency } from '@prisma/client'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { MatDialog } from '@angular/material/dialog'; -import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; @Component({ selector: 'gf-account-page', diff --git a/apps/client/src/app/pages/account/account-page.module.ts b/apps/client/src/app/pages/account/account-page.module.ts index d7dbff730..6e3daf3b8 100644 --- a/apps/client/src/app/pages/account/account-page.module.ts +++ b/apps/client/src/app/pages/account/account-page.module.ts @@ -3,13 +3,14 @@ import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; +import { MatDialogModule } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { GfPortfolioAccessTableModule } from '@ghostfolio/client/components/access-table/access-table.module'; + import { AccountPageRoutingModule } from './account-page-routing.module'; import { AccountPageComponent } from './account-page.component'; -import { MatInputModule } from '@angular/material/input'; -import { MatDialogModule } from '@angular/material/dialog'; @NgModule({ declarations: [AccountPageComponent], diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts index 202637ca7..a8b1e3c6d 100644 --- a/apps/client/src/app/pages/landing/landing-page.component.ts +++ b/apps/client/src/app/pages/landing/landing-page.component.ts @@ -3,9 +3,9 @@ import { Router } from '@angular/router'; import { LineChartItem } from '@ghostfolio/client/components/line-chart/interfaces/line-chart.interface'; import { DataService } from '@ghostfolio/client/services/data.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; +import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { format } from 'date-fns'; import { Subject } from 'rxjs'; -import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; @Component({ selector: 'gf-landing-page', diff --git a/apps/client/src/app/services/token-storage.service.ts b/apps/client/src/app/services/token-storage.service.ts index e872748da..1fd409926 100644 --- a/apps/client/src/app/services/token-storage.service.ts +++ b/apps/client/src/app/services/token-storage.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; +import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { UserService } from './user/user.service'; -import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; const TOKEN_KEY = 'auth-token'; diff --git a/apps/client/src/app/services/web-authn.service.ts b/apps/client/src/app/services/web-authn.service.ts index add613e22..619c40489 100644 --- a/apps/client/src/app/services/web-authn.service.ts +++ b/apps/client/src/app/services/web-authn.service.ts @@ -1,14 +1,14 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { catchError, switchMap, tap } from 'rxjs/operators'; -import { startAssertion, startAttestation } from '@simplewebauthn/browser'; -import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service'; +import { AuthDeviceDto } from '@ghostfolio/api/app/auth-device/auth-device.dto'; import { PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON } from '@ghostfolio/api/app/auth/interfaces/simplewebauthn'; -import { AuthDeviceDto } from '@ghostfolio/api/app/auth-device/auth-device.dto'; +import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service'; +import { startAssertion, startAttestation } from '@simplewebauthn/browser'; import { of } from 'rxjs'; +import { catchError, switchMap, tap } from 'rxjs/operators'; @Injectable({ providedIn: 'root'