mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-08-31 16:21:26 +02:00
FRANCIS_HOST decides where the Francis actor runtime lives. When it is empty or set to "embedded" (the default) nothing changes: Pocket ID starts the runtime inside its own process, backed by its own database. Any other value is the address, or a comma-separated list of addresses, of a standalone Francis runtime; Pocket ID then connects to it as a remote actor host and starts no embedded runtime. Connecting to a standalone runtime also needs FRANCIS_HOST_PSK, the host bootstrap pre-shared key the runtime is configured with, and optionally FRANCIS_CA, the PEM-encoded cluster CA to pin before the first connection. Without a pinned CA Francis trusts the certificate it is served on first use, and warns about it. The actor host is now held as the topology-agnostic francis host.Host interface, since the concrete type depends on the configuration. The commands that reach the actor data through Pocket ID's own database (export, import, and one-time-access-token) fail with an explicit error when a standalone runtime owns that data instead, rather than silently operating on the wrong store.
45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
// Package auditlogs owns the background maintenance of the audit log table.
|
|
package auditlogs
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
francishost "github.com/italypaleale/francis/host"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Dependencies struct {
|
|
DB *gorm.DB
|
|
Actors francishost.Host
|
|
|
|
// RetentionDays is how long audit logs are kept before the cleanup job deletes them
|
|
RetentionDays int
|
|
|
|
// CleanupDisabled skips registering the cleanup cron job, for example in tests
|
|
CleanupDisabled bool
|
|
}
|
|
|
|
type Module struct{}
|
|
|
|
func New(deps Dependencies) (*Module, error) {
|
|
// Register the cleanup job for audit logs past the retention window
|
|
if !deps.CleanupDisabled {
|
|
if deps.Actors == nil {
|
|
return nil, errors.New("actor host is required for the audit log cleanup cron job")
|
|
}
|
|
|
|
cleanupJob, err := newCleanupJob(deps.DB, deps.RetentionDays)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = deps.Actors.RegisterBuiltInActor(cleanupJob)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error registering audit log cleanup cron actor: %w", err)
|
|
}
|
|
}
|
|
|
|
return &Module{}, nil
|
|
}
|