feat: activity logs, gallery storage filter, and upload rate limits
Add per-user activity logs with storage backend tracking, gallery storage filter, and IP/token upload rate limiting. Fix storage delete modal flash, pin local backend in filter order, and link settings version to GitHub releases.
This commit is contained in:
1 parent
901fefb3f5
commit
6fc054328d
34 files changed
+1357
-72
No files matched your search
@@ -5,6 +5,7 @@ import type { StoredImage } from './storage'
|
||||
import { getImageBaseUrl } from './env'
|
||||
import { getActiveBackendRow } from './storage/resolver'
|
||||
import { getStorageBackendRow, getStorageBackendFromEnv } from './storage-backends'
|
||||
import type { StorageBackendType } from './storage/types'
|
||||
import { buildObjectKey, parseS3Config } from './storage/s3'
|
||||
import type { StorageBackendRow } from './storage/types'
|
||||
|
||||
@@ -24,10 +25,32 @@ export function resolveImageOwner(
|
||||
}
|
||||
}
|
||||
|
||||
export function resolveImageStorage(
|
||||
backendId: string | undefined,
|
||||
backendMap?: Map<string, { name: string, type: StorageBackendType }>
|
||||
): ImageItem['storage'] | undefined {
|
||||
if (!backendId) return undefined
|
||||
|
||||
const fromMap = backendMap?.get(backendId)
|
||||
if (fromMap) {
|
||||
return { id: backendId, name: fromMap.name, type: fromMap.type }
|
||||
}
|
||||
|
||||
const row = getStorageBackendRow(backendId)
|
||||
if (row) {
|
||||
return { id: backendId, name: row.name, type: row.type }
|
||||
}
|
||||
|
||||
return { id: backendId, name: backendId, type: 's3' }
|
||||
}
|
||||
|
||||
export function mapStoredImageToItem(
|
||||
event: H3Event,
|
||||
stored: StoredImage,
|
||||
options?: { ownerMap?: Map<number, string> }
|
||||
options?: {
|
||||
ownerMap?: Map<number, string>
|
||||
backendMap?: Map<string, { name: string, type: StorageBackendType }>
|
||||
}
|
||||
): ImageItem {
|
||||
const item = buildImageItem({
|
||||
key: stored.key,
|
||||
@@ -40,8 +63,14 @@ export function mapStoredImageToItem(
|
||||
})
|
||||
|
||||
const owner = resolveImageOwner(stored.userId, options?.ownerMap)
|
||||
if (owner) {
|
||||
return { ...item, owner }
|
||||
const storage = resolveImageStorage(stored.backendId, options?.backendMap)
|
||||
|
||||
if (owner || storage) {
|
||||
return {
|
||||
...item,
|
||||
...(owner ? { owner } : {}),
|
||||
...(storage ? { storage } : {})
|
||||
}
|
||||
}
|
||||
|
||||
return item
|
||||
|
||||
Reference in new issue
Block a user