feat: implement multi-user credits redeem and storage isolation

This commit is contained in:
OpenClaw Agent
2026-09-17 02:18:49 +08:00
parent 7628390966
commit 8b31956c6d
12 changed files with 624 additions and 28 deletions
+12
View File
@@ -16,6 +16,8 @@ func main() {
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
must(err)
must(db.AutoMigrate(&Task{}, &Setting{}, &User{}, &UserPermission{}, &CreditAccount{}, &CreditTransaction{}, &CreditReservation{}, &RedeemBatch{}, &RedeemCode{}, &RedeemRecord{}, &WebDAVConfig{}, &Session{}, &AuditLog{}))
// Replace the legacy global task uniqueness constraint with per-user uniqueness.
must(db.Exec("DROP INDEX IF EXISTS idx_tasks_source_rid_quality").Error)
client := &http.Client{Timeout: 2 * 60 * 1e9}
cfg := loadConfig(db)
@@ -38,10 +40,20 @@ func main() {
auth := api.Group("", a.requireAuth)
auth.GET("/search", a.requirePermission(PermDownload), a.search)
auth.GET("/tasks", a.requirePermission(PermDownload), a.listTasks)
auth.GET("/credits", a.creditInfo)
auth.POST("/redeem", a.requirePermission(PermRedeem), a.redeem)
auth.GET("/webdav/config", a.requirePermission(PermWebDAVConfig), a.getUserWebDAV)
auth.PUT("/webdav/config", a.requirePermission(PermWebDAVConfig), a.putUserWebDAV)
auth.POST("/webdav/test", a.requirePermission(PermWebDAVConfig), a.testUserWebDAV)
auth.POST("/tasks", a.requirePermission(PermDownload), a.addTask)
auth.POST("/tasks/:id/retry", a.requirePermission(PermDownload), a.retryTask)
auth.DELETE("/tasks/:id", a.requirePermission(PermDownload), a.deleteTask)
admin := api.Group("/admin", a.requireAuth, a.requireAdmin)
admin.GET("/users", a.adminListUsers)
admin.POST("/users", a.adminCreateUser)
admin.PUT("/users/:id", a.adminUpdateUser)
admin.GET("/redeem", a.adminListRedeemBatches)
admin.POST("/redeem", a.adminCreateRedeemBatch)
admin.GET("/settings", a.getSettings)
admin.PUT("/settings", a.putSettings)
admin.POST("/webdav/test", a.testWebDAV)