Skip to content

Commit

Permalink
feat(storage): introduce gRPC call to get a file's URL (#1045)
Browse files Browse the repository at this point in the history
  • Loading branch information
kkopanidis authored May 29, 2024
1 parent dcb0235 commit 4979402
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
5 changes: 5 additions & 0 deletions libraries/grpc-sdk/src/modules/storage/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
DeleteFileResponse,
FileResponse,
GetFileDataResponse,
GetFileUrlResponse,
StorageDefinition,
} from '../../protoUtils/storage.js';

Expand All @@ -20,6 +21,10 @@ export class Storage extends ConduitModule<typeof StorageDefinition> {
return this.client!.getFile({ id, userId, scope });
}

getFileUrl(id: string, userId?: string, scope?: string): Promise<GetFileUrlResponse> {
return this.client!.getFileUrl({ id, userId, scope });
}

getFileData(id: string, userId?: string, scope?: string): Promise<GetFileDataResponse> {
return this.client!.getFileData({ id, userId, scope });
}
Expand Down
31 changes: 31 additions & 0 deletions modules/storage/src/Storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import {
FileResponse,
GetFileDataResponse,
GetFileRequest,
GetFileUrlRequest,
GetFileUrlResponse,
UpdateFileByUrlRequest,
UpdateFileRequest,
} from './protoTypes/storage.js';
Expand All @@ -38,6 +40,7 @@ import { StorageParamAdapter } from './adapter/StorageParamAdapter.js';
import { FileResource } from './authz/index.js';
import { AdminFileHandlers } from './admin/adminFile.js';
import { fileURLToPath } from 'node:url';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

Expand All @@ -54,6 +57,7 @@ export default class Storage extends ManagedModule<Config> {
deleteFile: this.deleteFile.bind(this),
createFileByUrl: this.createFileByUrl.bind(this),
updateFileByUrl: this.updateFileByUrl.bind(this),
getFileUrl: this.getFileUrl.bind(this),
},
};
protected metricsSchema = MetricsSchema;
Expand Down Expand Up @@ -203,6 +207,33 @@ export default class Storage extends ManagedModule<Config> {
callback(null, result as GetFileDataResponse);
}

async getFileUrl(
call: GrpcRequest<GetFileUrlRequest>,
callback: GrpcCallback<GetFileUrlResponse>,
) {
if (!this._adminFileHandlers)
return callback({
code: status.INTERNAL,
message: 'File handlers not initiated',
});
const request = createParsedRouterRequest(
call.request,
undefined,
{ scope: call.request.scope },
undefined,
undefined,
undefined,
{ user: { _id: call.request.userId } },
);
let result;
if (call.request.scope || call.request.userId) {
result = await this._fileHandlers.getFileUrl(request);
} else {
result = await this._adminFileHandlers.getFileUrl(request);
}
callback(null, result as GetFileUrlResponse);
}

async createFile(
call: GrpcRequest<CreateFileRequest>,
callback: GrpcCallback<FileResponse>,
Expand Down
10 changes: 10 additions & 0 deletions modules/storage/src/storage.proto
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ message GetFileRequest {
optional string scope = 3;

}
message GetFileUrlRequest {
string id = 1;
optional string userId = 2;
optional string scope = 3;

}
message GetFileUrlResponse {
string url = 1;
}

message CreateFileRequest {
string name = 1;
Expand Down Expand Up @@ -75,6 +84,7 @@ message UpdateFileByUrlRequest {
service Storage {
rpc GetFile(GetFileRequest) returns (FileResponse);
rpc GetFileData(GetFileRequest) returns (GetFileDataResponse);
rpc GetFileUrl(GetFileUrlRequest) returns (GetFileUrlResponse);
rpc UpdateFile(UpdateFileRequest) returns (FileResponse);
rpc CreateFile(CreateFileRequest) returns (FileResponse);
rpc DeleteFile(GetFileRequest) returns (DeleteFileResponse);
Expand Down

0 comments on commit 4979402

Please sign in to comment.