Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
63 changes: 49 additions & 14 deletions src/components/core/handler/persistentStorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import type {
} from '../../../@types/commands.js'
import {
PersistentStorageAccessDeniedError,
PersistentStorageFileInfo,
type PersistentStorageFactory
} from '../../persistentStorage/PersistentStorageFactory.js'
import type { P2PCommandResponse } from '../../../@types/OceanNode.js'
Expand All @@ -22,6 +23,7 @@ import {
type ValidateParams
} from '../../httpRoutes/validateCommands.js'
import { CommandHandler } from './handler.js'
import { PersistentStorageObject } from '../../../@types/PersistentStorage.js'

function requirePersistentStorage(handler: CommandHandler): PersistentStorageFactory {
const node = handler.getOceanNode() as any
Expand Down Expand Up @@ -87,7 +89,12 @@ export class PersistentStorageCreateBucketHandler extends CommandHandler {

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

try {
const storage = requirePersistentStorage(this)
const result = await storage.listFiles(task.bucketId, task.consumerAddress)
let result: PersistentStorageFileInfo[]
if (task.consumerAddress) {
result = await storage.listFiles(task.bucketId, task.consumerAddress)
} else {
const authTokenAddress = await this.getAddressFromToken(task.authorization)
result = await storage.listFiles(task.bucketId, authTokenAddress)
Comment thread
ndrpp marked this conversation as resolved.
Outdated
}
return {
stream: Readable.from(JSON.stringify(result)),
status: { httpStatus: 200, error: null }
Expand Down Expand Up @@ -231,11 +244,17 @@ export class PersistentStorageGetFileObjectHandler extends CommandHandler {

try {
const storage = requirePersistentStorage(this)
const obj = await storage.getFileObject(
task.bucketId,
task.fileName,
task.consumerAddress
)
let obj: PersistentStorageObject
if (task.consumerAddress) {
obj = await storage.getFileObject(
task.bucketId,
task.fileName,
task.consumerAddress
)
} else {
const authTokenAddress = await this.getAddressFromToken(task.authorization)
obj = await storage.getFileObject(task.bucketId, task.fileName, authTokenAddress)
Comment thread
ndrpp marked this conversation as resolved.
Outdated
}
return {
stream: Readable.from(JSON.stringify(obj)),
status: { httpStatus: 200, error: null }
Expand Down Expand Up @@ -285,12 +304,23 @@ export class PersistentStorageUploadFileHandler extends CommandHandler {
status: { httpStatus: 403, error: 'Upload stream error' }
}
}
const result = await storage.uploadFile(
task.bucketId,
task.fileName,
task.stream,
task.consumerAddress
)
let result: PersistentStorageFileInfo
if (task.consumerAddress) {
result = await storage.uploadFile(
task.bucketId,
task.fileName,
task.stream,
task.consumerAddress
)
} else {
const authTokenAddress = await this.getAddressFromToken(task.authorization)
result = await storage.uploadFile(
Comment thread
ndrpp marked this conversation as resolved.
Outdated
task.bucketId,
task.fileName,
task.stream,
authTokenAddress
)
}
return {
stream: Readable.from(JSON.stringify(result)),
status: { httpStatus: 200, error: null }
Expand Down Expand Up @@ -331,7 +361,12 @@ export class PersistentStorageDeleteFileHandler extends CommandHandler {

try {
const storage = requirePersistentStorage(this)
await storage.deleteFile(task.bucketId, task.fileName, task.consumerAddress)
if (task.consumerAddress) {
await storage.deleteFile(task.bucketId, task.fileName, task.consumerAddress)
} else {
const authTokenAddress = await this.getAddressFromToken(task.authorization)
await storage.deleteFile(task.bucketId, task.fileName, authTokenAddress)
Comment thread
ndrpp marked this conversation as resolved.
Outdated
}
return {
stream: Readable.from(JSON.stringify({ success: true })),
status: { httpStatus: 200, error: null }
Expand Down
Loading