Skip to content

Commit 0cf1f70

Browse files
authored
feat: deprecate owner column in favour of owner_id (#340)
1 parent 7ae3410 commit 0cf1f70

File tree

7 files changed

+42
-14
lines changed

7 files changed

+42
-14
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
alter table storage.objects add column if not exists owner_id text default null;
2+
alter table storage.buckets add column if not exists owner_id text default null;
3+
4+
comment on column storage.objects.owner is 'Field is deprecated, use owner_id instead';
5+
comment on column storage.buckets.owner is 'Field is deprecated, use owner_id instead';
6+
7+
ALTER TABLE storage.buckets
8+
DROP CONSTRAINT IF EXISTS buckets_owner_fkey;

src/monitoring/logger.ts

+2
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ const whitelistHeaders = (headers: Record<string, unknown>) => {
6363
'host',
6464
'user-agent',
6565
'x-forwarded-proto',
66+
'x-forwarded-host',
67+
'x-forwarded-port',
6668
'referer',
6769
'content-length',
6870
'x-real-ip',

src/storage/database/knex.ts

+25-14
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import { DatabaseError } from 'pg'
1414
import { TenantConnection } from '../../database/connection'
1515
import { DbQueryPerformance } from '../../monitoring/metrics'
16+
import { isUuid } from '../limits'
1617

1718
/**
1819
* Database
@@ -114,7 +115,8 @@ export class StorageKnexDB implements Database {
114115
const bucketData = {
115116
id: data.id,
116117
name: data.name,
117-
owner: data.owner,
118+
owner: isUuid(data.owner || '') ? data.owner : undefined,
119+
owner_id: data.owner,
118120
public: data.public,
119121
allowed_mime_types: data.allowed_mime_types,
120122
file_size_limit: data.file_size_limit,
@@ -226,7 +228,8 @@ export class StorageKnexDB implements Database {
226228
async upsertObject(data: Pick<Obj, 'name' | 'owner' | 'bucket_id' | 'metadata' | 'version'>) {
227229
const objectData = {
228230
name: data.name,
229-
owner: data.owner,
231+
owner: isUuid(data.owner || '') ? data.owner : undefined,
232+
owner_id: data.owner,
230233
bucket_id: data.bucket_id,
231234
metadata: data.metadata,
232235
version: data.version,
@@ -239,7 +242,8 @@ export class StorageKnexDB implements Database {
239242
.merge({
240243
metadata: data.metadata,
241244
version: data.version,
242-
owner: data.owner,
245+
owner: isUuid(data.owner || '') ? data.owner : undefined,
246+
owner_id: data.owner,
243247
})
244248
.returning('*')
245249
})
@@ -253,15 +257,20 @@ export class StorageKnexDB implements Database {
253257
data: Pick<Obj, 'owner' | 'metadata' | 'version' | 'name'>
254258
) {
255259
const [object] = await this.runQuery('UpdateObject', (knex) => {
256-
return knex.from<Obj>('objects').where('bucket_id', bucketId).where('name', name).update(
257-
{
258-
name: data.name,
259-
owner: data.owner,
260-
metadata: data.metadata,
261-
version: data.version,
262-
},
263-
'*'
264-
)
260+
return knex
261+
.from<Obj>('objects')
262+
.where('bucket_id', bucketId)
263+
.where('name', name)
264+
.update(
265+
{
266+
name: data.name,
267+
owner: isUuid(data.owner || '') ? data.owner : undefined,
268+
owner_id: data.owner,
269+
metadata: data.metadata,
270+
version: data.version,
271+
},
272+
'*'
273+
)
265274
})
266275

267276
if (!object) {
@@ -274,7 +283,8 @@ export class StorageKnexDB implements Database {
274283
async createObject(data: Pick<Obj, 'name' | 'owner' | 'bucket_id' | 'metadata' | 'version'>) {
275284
const object = {
276285
name: data.name,
277-
owner: data.owner,
286+
owner: isUuid(data.owner || '') ? data.owner : undefined,
287+
owner_id: data.owner,
278288
bucket_id: data.bucket_id,
279289
metadata: data.metadata,
280290
version: data.version,
@@ -335,7 +345,8 @@ export class StorageKnexDB implements Database {
335345
.from<Obj>('objects')
336346
.update({
337347
last_accessed_at: new Date().toISOString(),
338-
owner,
348+
owner: isUuid(owner || '') ? owner : undefined,
349+
owner_id: owner,
339350
})
340351
.returning('*')
341352
.where({ bucket_id: bucketId, name: objectName })

src/storage/limits.ts

+4
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,7 @@ export function parseFileSizeToBytes(valueWithUnit: string) {
109109
)
110110
}
111111
}
112+
113+
export function isUuid(value: string) {
114+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)
115+
}

src/storage/object.ts

+1
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ export class ObjectStorage {
269269
await this.uploader.canUpload({
270270
bucketId: this.bucketId,
271271
objectName: destinationKey,
272+
owner,
272273
isUpsert: false,
273274
})
274275

src/storage/schemas/object.ts

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export const objectSchema = {
88
name: { type: 'string' },
99
bucket_id: { type: 'string' },
1010
owner: { type: 'string' },
11+
owner_id: { type: 'string' },
1112
version: { type: 'string' },
1213
id: { anyOf: [{ type: 'string' }, { type: 'null' }] },
1314
updated_at: { anyOf: [{ type: 'string' }, { type: 'null' }] },

src/test/tus.test.ts

+1
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ describe('Tus multipart', () => {
129129
},
130130
name: objectName,
131131
owner: null,
132+
owner_id: null,
132133
path_tokens: [objectName],
133134
updated_at: expect.any(Date),
134135
version: expect.any(String),

0 commit comments

Comments
 (0)