Skip to content

Commit

Permalink
upgraded to rc2 of sdk-dtp
Browse files Browse the repository at this point in the history
- Added an HttpLogger middleware
- Added more error logs
  • Loading branch information
r-marques committed Oct 17, 2022
1 parent 2fe740f commit b98ed7b
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 48 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"@nestjs/platform-express": "^8.4.1",
"@nestjs/swagger": "^5.2.0",
"@nestjs/typeorm": "^8.0.3",
"@nevermined-io/nevermined-sdk-dtp": "0.1.0-rc1",
"@nevermined-io/nevermined-sdk-dtp": "0.1.0-rc2",
"@nevermined-io/nevermined-sdk-js": "0.25.0-rc4",
"@sideway/address": "^4.1.3",
"@sideway/formula": "^3.0.0",
Expand Down
65 changes: 33 additions & 32 deletions src/access/access.controller.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,35 @@
import {
import {
BadRequestException,
Body,
Body,
Controller,
Get,
NotFoundException,
Param,
Post,
Req,
Response,
StreamableFile,
UploadedFile,
UseInterceptors
} from "@nestjs/common";
import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
Get,
NotFoundException,
Param,
Post,
Req,
Response,
StreamableFile,
UploadedFile,
UseInterceptors,
} from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { Request } from '../common/helpers/request.interface';
import { Public } from "../common/decorators/auth.decorator";
import { FileInterceptor } from "@nestjs/platform-express";
import { Public } from '../common/decorators/auth.decorator';
import { FileInterceptor } from '@nestjs/platform-express';
import crypto from 'crypto';
import { aes_encryption_256 } from "@nevermined-io/nevermined-sdk-dtp/dist/utils";
import { ValidationParams } from "@nevermined-io/nevermined-sdk-js/dist/node/ddo/Service";
import BigNumber from "@nevermined-io/nevermined-sdk-js/dist/node/utils/BigNumber";
import { aes_encryption_256 } from '@nevermined-io/nevermined-sdk-dtp/dist/utils';
import { ValidationParams } from '@nevermined-io/nevermined-sdk-js/dist/node/ddo/Service';
import BigNumber from '@nevermined-io/nevermined-sdk-js/dist/node/utils/BigNumber';
import { NeverminedService } from '../shared/nevermined/nvm.service';
import { Logger } from '../shared/logger/logger.service';
import { TransferDto } from "./dto/transfer";
import { UploadDto } from "./dto/upload";
import { UploadResult } from "./dto/upload-result";
import { AgreementData } from "@nevermined-io/nevermined-sdk-js/dist/node/keeper/contracts/managers";
import { TransferDto } from './dto/transfer';
import { UploadDto } from './dto/upload';
import { UploadResult } from './dto/upload-result';
import { AgreementData } from '@nevermined-io/nevermined-sdk-js/dist/node/keeper/contracts/managers';

@ApiTags('Access')
@Controller()
export class AccessController {

constructor(private nvmService: NeverminedService) {}

@Get('access/:agreement_id/:index')
Expand All @@ -47,8 +46,8 @@ export class AccessController {
async doAccess(
@Req() req: Request<unknown>,
@Response({ passthrough: true }) res,
@Param('index') index: number,
): Promise<StreamableFile|string> {
@Param('index') index: number
): Promise<StreamableFile | string> {
if (!req.user.did) {
throw new BadRequestException('DID not specified');
}
Expand All @@ -69,8 +68,8 @@ export class AccessController {
async doNftAccess(
@Req() req: Request<unknown>,
@Response({ passthrough: true }) res,
@Param('index') index: number,
): Promise<StreamableFile|string> {
@Param('index') index: number
): Promise<StreamableFile | string> {
return await this.nvmService.downloadAsset(req.user.did, index, res, req.user.address);
}

Expand Down Expand Up @@ -125,8 +124,8 @@ export class AccessController {
async doDownload(
@Req() req: Request<unknown>,
@Response({ passthrough: true }) res,
@Param('index') index: number,
): Promise<StreamableFile|string> {
@Param('index') index: number
): Promise<StreamableFile | string> {
if (!req.user.did) {
throw new BadRequestException('DID not specified');
}
Expand All @@ -144,7 +143,11 @@ export class AccessController {
status: 200,
description: 'Return the url of asset',
})
async doUpload(@Body() uploadData: UploadDto, @Param('backend') backend: string, @UploadedFile() file: Express.Multer.File): Promise<UploadResult> {
async doUpload(
@Body() uploadData: UploadDto,
@Param('backend') backend: string,
@UploadedFile() file: Express.Multer.File
): Promise<UploadResult> {
if (!file) {
throw new BadRequestException('No file in request');
}
Expand All @@ -170,6 +173,4 @@ export class AccessController {
return { url };
}
}

}

2 changes: 2 additions & 0 deletions src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { AuthModule } from './auth/auth.module';
import { EncryptModule } from './encrypt/encrypt.module';
import { AccessModule } from './access/access.module';
import { NeverminedModule } from './shared/nevermined/nvm.module';
import { HttpLoggerMiddleware } from './common/middlewares/http-logger/http-logger.middleware';

@Module({
imports: [
Expand All @@ -25,5 +26,6 @@ import { NeverminedModule } from './shared/nevermined/nvm.module';
export class ApplicationModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(HttpsRedirectMiddleware).forRoutes({ path: '*', method: RequestMethod.ALL });
consumer.apply(HttpLoggerMiddleware).forRoutes('*');
}
}
25 changes: 14 additions & 11 deletions src/auth/auth.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,13 @@ import { Babysig } from '@nevermined-io/nevermined-sdk-dtp/dist/KeyTransfer';
import { ServiceType, ValidationParams } from '@nevermined-io/nevermined-sdk-js/dist/node/ddo/Service';
import { NeverminedService } from '../shared/nevermined/nvm.service';
import { didZeroX, zeroX } from '@nevermined-io/nevermined-sdk-js/dist/node/utils';
import { Logger } from '@nevermined-io/nevermined-sdk-js';

const BASE_URL = '/api/v1/gateway/services/';

@Injectable()
export class AuthService {
constructor(
private jwtService: JwtService,
private nvmService: NeverminedService,
) {}
constructor(private jwtService: JwtService, private nvmService: NeverminedService) {}

async validateOwner(did: string, consumer_address: string): Promise<void> {
const nevermined = this.nvmService.getNevermined();
Expand All @@ -36,10 +34,16 @@ export class AuthService {
}
}

async validateTransferProof(agreement_id: string, did: string, consumer_address: string, buyer: string, babysig: Babysig): Promise<void> {
async validateTransferProof(
agreement_id: string,
did: string,
consumer_address: string,
buyer: string,
babysig: Babysig
): Promise<void> {
const dtp = this.nvmService.getDtp();
const buyerPub = new BabyjubPublicKey(zeroX(buyer.substring(0,64)), zeroX(buyer.substring(64,128)));
if (!await dtp.keytransfer.verifyBabyjub(buyerPub, BigInt(consumer_address), babysig)) {
const buyerPub = new BabyjubPublicKey(zeroX(buyer.substring(0, 64)), zeroX(buyer.substring(64, 128)));
if (!(await dtp.keytransfer.verifyBabyjub(buyerPub, BigInt(consumer_address), babysig))) {
throw new UnauthorizedException(`Bad signature for address ${consumer_address}`);
}
}
Expand All @@ -54,7 +58,6 @@ export class AuthService {
* - the hash function used. ES256K uses sha-256 while ethereum uses keccak
**/
async validateClaim(clientAssertionType: string, clientAssertion: string): Promise<LoginDto> {

if (clientAssertionType !== CLIENT_ASSERTION_TYPE) {
throw new UnauthorizedException('Invalid "assertion_type"');
}
Expand All @@ -67,8 +70,8 @@ export class AuthService {
consumer_address: payload.iss,
did: didZeroX(payload.did as string),
agreement_id: payload.sub,
buyer: payload.buyer as string,
babysig: payload.babysig as Babysig
buyer: payload.buyer as string,
babysig: payload.babysig as Babysig,
};

if (payload.aud === BASE_URL + 'access') {
Expand All @@ -84,8 +87,8 @@ export class AuthService {
access_token: this.jwtService.sign(payload),
};
} catch (error) {
Logger.error(error);
throw new UnauthorizedException(`The 'client_assertion' is invalid: ${(error as Error).message}`);
}
}

}
22 changes: 22 additions & 0 deletions src/common/middlewares/http-logger/http-logger.middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Injectable, NestMiddleware, Logger } from '@nestjs/common';

import { Request, Response, NextFunction } from 'express';

@Injectable()
export class HttpLoggerMiddleware implements NestMiddleware {
private logger = new Logger('HTTP');

use(request: Request, response: Response, next: NextFunction): void {
const { method, originalUrl } = request;

this.logger.log(`Req ${method} ${originalUrl}`);

response.on('finish', () => {
const { statusCode } = response;

this.logger.log(`Res ${method} ${originalUrl} ${statusCode}`);
});

next();
}
}
8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1111,10 +1111,10 @@
dependencies:
uuid "8.3.2"

"@nevermined-io/nevermined-sdk-dtp@0.1.0-rc1":
version "0.1.0-rc1"
resolved "https://registry.yarnpkg.com/@nevermined-io/nevermined-sdk-dtp/-/nevermined-sdk-dtp-0.1.0-rc1.tgz#5b3f1293132fba9ed00fb053f0ae36ebf4e4d5fa"
integrity sha512-OICRnz5/WYFEW9BreN95hq5nLPuZeHEJaJp6+MImTcPiSSX4MF9bF1HT7JifcskfHlDcEhsqh9+vSfsymVWkMA==
"@nevermined-io/nevermined-sdk-dtp@0.1.0-rc2":
version "0.1.0-rc2"
resolved "https://registry.yarnpkg.com/@nevermined-io/nevermined-sdk-dtp/-/nevermined-sdk-dtp-0.1.0-rc2.tgz#b24445f730b8fb517da395bc63c78e6fc8abbbf3"
integrity sha512-l4I4DX2x7YnXv3TfNqLABJnOo7o51tKsLXpXwFx5NwbTFXT05SQAsbDMjuaz+lGtuKnd5rjslVV1bguSACcA3A==
dependencies:
"@nevermined-io/nevermined-sdk-js" "0.25.0-rc4"
circomlibjs "^0.1.1"
Expand Down

0 comments on commit b98ed7b

Please sign in to comment.