im 服务端

This commit is contained in:
richjohnrambo
2026-08-15 01:33:23 +08:00
parent 7c360167b3
commit 5af396c5f5
10 changed files with 669 additions and 60 deletions
+29 -20
View File
@@ -645,11 +645,7 @@ func largeFileRunGarbageCollection(period time.Duration, blockSize int) chan<- b
for {
select {
case <-gcTicker:
for _, tenantID := range store.KnownTenantIDs() {
if err := store.Files.DeleteUnused(tenantID, time.Now().Add(-time.Hour), blockSize); err != nil {
logs.Warn.Println("media gc:", tenantID, err)
}
}
largeFileGarbageCollectTenants(store.KnownTenantIDs(), time.Now().Add(-time.Hour), blockSize)
case <-stop:
return
}
@@ -659,42 +655,55 @@ func largeFileRunGarbageCollection(period time.Duration, blockSize int) chan<- b
return stop
}
func largeFileGarbageCollectTenants(tenantIDs []types.TenantID, olderThan time.Time, blockSize int) {
for _, tenantID := range tenantIDs {
if err := store.Files.DeleteUnused(tenantID, olderThan, blockSize); err != nil {
logs.Warn.Println("media gc:", tenantID, err)
}
}
}
// Authenticate non-websocket HTTP request
func authFileRequest(authMethod, secret, sid, remoteAddr string) (types.TenantID, types.Uid, []byte, error) {
var tenantID types.TenantID
var uid types.Uid
func authFileRequest(authMethod, secret, sid, remoteAddr string) (RequestPrincipal, []byte, error) {
var principal RequestPrincipal
if authMethod != "" {
decodedSecret := make([]byte, base64.StdEncoding.DecodedLen(len(secret)))
n, err := base64.StdEncoding.Decode(decodedSecret, []byte(secret))
if err != nil {
logs.Info.Println("media: invalid auth secret", authMethod, "'"+secret+"'")
return tenantID, uid, nil, types.ErrMalformed
return principal, nil, types.ErrMalformed
}
if authhdl := store.Store.GetLogicalAuthHandler(authMethod); authhdl != nil {
rec, challenge, err := authhdl.Authenticate(auth.AuthContext{RemoteAddr: remoteAddr}, decodedSecret[:n])
if err != nil {
return tenantID, uid, nil, err
return principal, nil, err
}
if challenge != nil {
return tenantID, uid, challenge, nil
return principal, challenge, nil
}
if rec == nil || rec.TenantID.IsZero() || rec.Uid.IsZero() {
return tenantID, uid, nil, types.ErrFailed
return principal, nil, types.ErrFailed
}
tenantID = rec.TenantID
uid = rec.Uid
principal.TenantID = rec.TenantID
principal.UID = rec.Uid
} else {
logs.Info.Println("media: unknown auth method", authMethod)
return tenantID, uid, nil, types.ErrMalformed
return principal, nil, types.ErrMalformed
}
} else {
// Find the session, make sure it's appropriately authenticated.
sess := globals.sessionStore.Get(sid)
if sess != nil {
tenantID = sess.tenantID
uid = sess.uid
if globals.sessionStore != nil {
sess := globals.sessionStore.Get(sid)
if sess == nil {
return principal, nil, nil
}
if sess.tenantID.IsZero() || sess.uid.IsZero() {
return principal, nil, types.ErrFailed
}
principal.TenantID = sess.tenantID
principal.UID = sess.uid
}
}
return tenantID, uid, nil, nil
return principal, nil, nil
}