mirror of https://github.com/ghostfolio/ghostfolio
Thomas Kaul
3 years ago
committed by
GitHub
7 changed files with 185 additions and 61 deletions
@ -0,0 +1,45 @@ |
|||
import { |
|||
CallHandler, |
|||
ExecutionContext, |
|||
Injectable, |
|||
NestInterceptor |
|||
} from '@nestjs/common'; |
|||
import { Observable } from 'rxjs'; |
|||
import { ConfigurationService } from '../services/configuration.service'; |
|||
|
|||
@Injectable() |
|||
export class TransformDataSourceInRequestInterceptor<T> |
|||
implements NestInterceptor<T, any> |
|||
{ |
|||
public constructor( |
|||
private readonly configurationService: ConfigurationService |
|||
) {} |
|||
|
|||
public intercept( |
|||
context: ExecutionContext, |
|||
next: CallHandler<T> |
|||
): Observable<any> { |
|||
const http = context.switchToHttp(); |
|||
const request = http.getRequest(); |
|||
|
|||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true) { |
|||
if (request.body.dataSource) { |
|||
request.body.dataSource = this.decodeDataSource( |
|||
request.body.dataSource |
|||
); |
|||
} |
|||
|
|||
if (request.params.dataSource) { |
|||
request.params.dataSource = this.decodeDataSource( |
|||
request.params.dataSource |
|||
); |
|||
} |
|||
} |
|||
|
|||
return next.handle(); |
|||
} |
|||
|
|||
private decodeDataSource(encodeDataSource: string) { |
|||
return Buffer.from(encodeDataSource, 'hex').toString(); |
|||
} |
|||
} |
@ -0,0 +1,76 @@ |
|||
import { |
|||
CallHandler, |
|||
ExecutionContext, |
|||
Injectable, |
|||
NestInterceptor |
|||
} from '@nestjs/common'; |
|||
import { DataSource } from '@prisma/client'; |
|||
import { Observable } from 'rxjs'; |
|||
import { map } from 'rxjs/operators'; |
|||
import { ConfigurationService } from '../services/configuration.service'; |
|||
|
|||
@Injectable() |
|||
export class TransformDataSourceInResponseInterceptor<T> |
|||
implements NestInterceptor<T, any> |
|||
{ |
|||
public constructor( |
|||
private readonly configurationService: ConfigurationService |
|||
) {} |
|||
|
|||
public intercept( |
|||
context: ExecutionContext, |
|||
next: CallHandler<T> |
|||
): Observable<any> { |
|||
return next.handle().pipe( |
|||
map((data: any) => { |
|||
if ( |
|||
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true |
|||
) { |
|||
if (data.activities) { |
|||
data.activities.map((activity) => { |
|||
activity.SymbolProfile.dataSource = this.encodeDataSource( |
|||
activity.SymbolProfile.dataSource |
|||
); |
|||
activity.dataSource = this.encodeDataSource(activity.dataSource); |
|||
return activity; |
|||
}); |
|||
} |
|||
|
|||
if (data.dataSource) { |
|||
data.dataSource = this.encodeDataSource(data.dataSource); |
|||
} |
|||
|
|||
if (data.holdings) { |
|||
for (const symbol of Object.keys(data.holdings)) { |
|||
if (data.holdings[symbol].dataSource) { |
|||
data.holdings[symbol].dataSource = this.encodeDataSource( |
|||
data.holdings[symbol].dataSource |
|||
); |
|||
} |
|||
} |
|||
} |
|||
|
|||
if (data.items) { |
|||
data.items.map((item) => { |
|||
item.dataSource = this.encodeDataSource(item.dataSource); |
|||
return item; |
|||
}); |
|||
} |
|||
|
|||
if (data.positions) { |
|||
data.positions.map((position) => { |
|||
position.dataSource = this.encodeDataSource(position.dataSource); |
|||
return position; |
|||
}); |
|||
} |
|||
} |
|||
|
|||
return data; |
|||
}) |
|||
); |
|||
} |
|||
|
|||
private encodeDataSource(aDataSource: DataSource) { |
|||
return Buffer.from(aDataSource, 'utf-8').toString('hex'); |
|||
} |
|||
} |
Loading…
Reference in new issue