73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
package store
|
|
|
|
import (
|
|
"time"
|
|
|
|
adapter "github.com/tinode/chat/server/db"
|
|
"github.com/tinode/chat/server/store/types"
|
|
)
|
|
|
|
type SecurityAuditPersistenceInterface interface {
|
|
RecordLogin(types.TenantID, *types.LoginAuditEvent) error
|
|
RecordLoginFailure(types.TenantID, *types.LoginFailureEvent) error
|
|
CloseLogin(types.TenantID, string, time.Time) error
|
|
ApplyMessageAction(types.TenantID, *types.MessageAdminAction) error
|
|
RecordContentModeration(types.TenantID, *types.ContentModerationLog) error
|
|
}
|
|
|
|
func (securityAuditMapper) RecordContentModeration(tenantID types.TenantID, event *types.ContentModerationLog) error {
|
|
audit, err := tenantSecurityAuditAdapter(tenantID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return audit.TenantContentModerationLogCreate(tenantID, event)
|
|
}
|
|
|
|
type securityAuditMapper struct{}
|
|
|
|
var SecurityAudit SecurityAuditPersistenceInterface = securityAuditMapper{}
|
|
|
|
func tenantSecurityAuditAdapter(tenantID types.TenantID) (adapter.TenantSecurityAuditAdapter, error) {
|
|
business, err := tenantBusinessAdapter(tenantID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
audit, ok := business.(adapter.TenantSecurityAuditAdapter)
|
|
if !ok {
|
|
return nil, types.ErrUnsupported
|
|
}
|
|
return audit, nil
|
|
}
|
|
|
|
func (securityAuditMapper) RecordLogin(tenantID types.TenantID, event *types.LoginAuditEvent) error {
|
|
audit, err := tenantSecurityAuditAdapter(tenantID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return audit.TenantLoginAuditCreate(tenantID, event)
|
|
}
|
|
|
|
func (securityAuditMapper) RecordLoginFailure(tenantID types.TenantID, event *types.LoginFailureEvent) error {
|
|
audit, err := tenantSecurityAuditAdapter(tenantID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return audit.TenantLoginFailureCreate(tenantID, event)
|
|
}
|
|
|
|
func (securityAuditMapper) CloseLogin(tenantID types.TenantID, sessionID string, at time.Time) error {
|
|
audit, err := tenantSecurityAuditAdapter(tenantID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return audit.TenantLoginAuditClose(tenantID, sessionID, at)
|
|
}
|
|
|
|
func (securityAuditMapper) ApplyMessageAction(tenantID types.TenantID, action *types.MessageAdminAction) error {
|
|
audit, err := tenantSecurityAuditAdapter(tenantID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return audit.TenantMessageAdminApply(tenantID, action)
|
|
}
|