Add minio and kv modules
This commit is contained in:
94
src/kv/kv.controller.ts
Normal file
94
src/kv/kv.controller.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import {
|
||||
Controller,
|
||||
Get,
|
||||
Post,
|
||||
Req,
|
||||
Body,
|
||||
Param,
|
||||
HttpException,
|
||||
} from '@nestjs/common';
|
||||
import { KvService } from './kv.service';
|
||||
import { Request } from 'express';
|
||||
|
||||
@Controller('kv')
|
||||
export class KvController {
|
||||
constructor(private readonly kvService: KvService) {}
|
||||
|
||||
@Get(':namespace/:key/metadata')
|
||||
async getMetadata(
|
||||
@Param('namespace') namespace: string,
|
||||
@Param('key') key: string,
|
||||
@Req() request: Request,
|
||||
): Promise<object> {
|
||||
if (!request.headers['x-secret-key']) {
|
||||
throw new HttpException("Missing 'X-Secret-Key' header", 403);
|
||||
}
|
||||
try {
|
||||
return await this.kvService.queryObjectMetadata(
|
||||
namespace,
|
||||
key,
|
||||
request.headers['x-secret-key'] as string,
|
||||
);
|
||||
} catch (e) {
|
||||
throw new HttpException(e.message, 403);
|
||||
}
|
||||
}
|
||||
|
||||
@Get(':namespace/:key')
|
||||
async get(
|
||||
@Param('namespace') namespace: string,
|
||||
@Param('key') key: string,
|
||||
@Req() request: Request,
|
||||
): Promise<string> {
|
||||
if (request.headers['x-secret-key']) {
|
||||
try {
|
||||
return await this.kvService.getWithSecretKey(
|
||||
namespace,
|
||||
key,
|
||||
request.headers['x-secret-key'] as string,
|
||||
);
|
||||
} catch (e) {
|
||||
throw new HttpException(e.message, 403);
|
||||
}
|
||||
}
|
||||
try {
|
||||
return await this.kvService.get(namespace, key);
|
||||
} catch (e) {
|
||||
throw new HttpException(e.message, 403);
|
||||
}
|
||||
}
|
||||
|
||||
@Post(':namespace/:key')
|
||||
async create(
|
||||
@Param('namespace') namespace: string,
|
||||
@Param('key') key: string,
|
||||
@Req() request: Request,
|
||||
@Body() body: object,
|
||||
) {
|
||||
const secretKey =
|
||||
(request.headers['x-secret-key'] as string | undefined) ?? '';
|
||||
const publicFlag = request.headers['x-public'] === 'true';
|
||||
if (secretKey) {
|
||||
return await this.kvService.set(
|
||||
namespace,
|
||||
key,
|
||||
JSON.stringify(body),
|
||||
secretKey,
|
||||
{ public: publicFlag },
|
||||
);
|
||||
}
|
||||
return 'No secret key provided within X-Secret-Key header';
|
||||
}
|
||||
|
||||
@Post(':namespace')
|
||||
async claimNamespace(
|
||||
@Param('namespace') namespace: string,
|
||||
@Req() request: Request,
|
||||
) {
|
||||
try {
|
||||
return await this.kvService.claimNamespace(namespace);
|
||||
} catch (e) {
|
||||
throw new HttpException(e.message, 403);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user