im 服务端
This commit is contained in:
+29
-20
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user