Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/components/core/handler/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ export abstract class CommandHandler
return buildRateLimitReachedResponse()
}
// then validate the command arguments
const validation = await this.validate(task)
const validation = this.validate(task)
if (!validation.valid) {
return buildInvalidParametersResponse(validation)
}
Expand All @@ -173,6 +173,15 @@ export abstract class CommandHandler
}
}

async getAddressFromToken(authToken: string): Promise<string> {
const auth = this.getOceanNode().getAuth()
if (!auth) {
throw new Error('Auth not configured')
}

return (await auth.validateToken(authToken)).address
}

async validateTokenOrSignature(
authToken: string,
address: string,
Expand Down
26 changes: 21 additions & 5 deletions src/components/core/handler/persistentStorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ export class PersistentStorageCreateBucketHandler extends CommandHandler {

let ownerNormalized: string
try {
ownerNormalized = getAddress(task.consumerAddress)
ownerNormalized = task.consumerAddress
? getAddress(task.consumerAddress)
: getAddress(await this.getAddressFromToken(task.authorization))
} catch {
return {
stream: null,
Expand Down Expand Up @@ -190,7 +192,10 @@ export class PersistentStorageListFilesHandler extends CommandHandler {

try {
const storage = requirePersistentStorage(this)
const result = await storage.listFiles(task.bucketId, task.consumerAddress)
const ownerNormalized = task.consumerAddress
? getAddress(task.consumerAddress)
: getAddress(await this.getAddressFromToken(task.authorization))
const result = await storage.listFiles(task.bucketId, ownerNormalized)
return {
stream: Readable.from(JSON.stringify(result)),
status: { httpStatus: 200, error: null }
Expand Down Expand Up @@ -231,11 +236,15 @@ export class PersistentStorageGetFileObjectHandler extends CommandHandler {

try {
const storage = requirePersistentStorage(this)
const ownerNormalized = task.consumerAddress
? getAddress(task.consumerAddress)
: getAddress(await this.getAddressFromToken(task.authorization))
const obj = await storage.getFileObject(
task.bucketId,
task.fileName,
task.consumerAddress
ownerNormalized
)

return {
stream: Readable.from(JSON.stringify(obj)),
status: { httpStatus: 200, error: null }
Expand Down Expand Up @@ -285,12 +294,16 @@ export class PersistentStorageUploadFileHandler extends CommandHandler {
status: { httpStatus: 403, error: 'Upload stream error' }
}
}
const ownerNormalized = task.consumerAddress
? getAddress(task.consumerAddress)
: getAddress(await this.getAddressFromToken(task.authorization))
const result = await storage.uploadFile(
task.bucketId,
task.fileName,
task.stream,
task.consumerAddress
ownerNormalized
)

return {
stream: Readable.from(JSON.stringify(result)),
status: { httpStatus: 200, error: null }
Expand Down Expand Up @@ -331,7 +344,10 @@ export class PersistentStorageDeleteFileHandler extends CommandHandler {

try {
const storage = requirePersistentStorage(this)
await storage.deleteFile(task.bucketId, task.fileName, task.consumerAddress)
const ownerNormalized = task.consumerAddress
? getAddress(task.consumerAddress)
: getAddress(await this.getAddressFromToken(task.authorization))
await storage.deleteFile(task.bucketId, task.fileName, ownerNormalized)
return {
stream: Readable.from(JSON.stringify({ success: true })),
status: { httpStatus: 200, error: null }
Expand Down
Loading