feat(scum): add local game player intelligence
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
package domain
|
||||
|
||||
import "time"
|
||||
|
||||
// GamePlayer is a local game identity and is never a platform console user.
|
||||
type GamePlayer struct {
|
||||
ID string
|
||||
ServerInstanceID string
|
||||
GamePlayerID string
|
||||
DisplayName string
|
||||
FirstSeenAt time.Time
|
||||
LastSeenAt time.Time
|
||||
LastEventAt time.Time
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
type GamePlayerFilter struct {
|
||||
ServerInstanceID string
|
||||
Search string
|
||||
Limit int
|
||||
}
|
||||
|
||||
// GamePlayerAlias preserves a bounded name history for one local game player.
|
||||
type GamePlayerAlias struct {
|
||||
ID string
|
||||
GamePlayerRecordID string
|
||||
ServerInstanceID string
|
||||
Alias string
|
||||
FirstSeenAt time.Time
|
||||
LastSeenAt time.Time
|
||||
}
|
||||
type GamePlayerAliasFilter struct {
|
||||
GamePlayerRecordID string
|
||||
ServerInstanceID string
|
||||
Limit int
|
||||
}
|
||||
|
||||
// GamePlayerSession records a successful, bounded SCUM session. No raw network data is present.
|
||||
type GamePlayerSession struct {
|
||||
ID string
|
||||
GamePlayerRecordID string
|
||||
ServerInstanceID string
|
||||
SourceSessionID string
|
||||
StartedAt time.Time
|
||||
EndedAt time.Time
|
||||
EndReason string
|
||||
LastEventAt time.Time
|
||||
}
|
||||
type GamePlayerSessionFilter struct {
|
||||
GamePlayerRecordID string
|
||||
ServerInstanceID string
|
||||
OpenOnly bool
|
||||
Limit int
|
||||
}
|
||||
|
||||
// GameAccessAttempt is review evidence. NetworkCorrelationKey is an irreversible server-local HMAC output.
|
||||
type GameAccessAttempt struct {
|
||||
ID string
|
||||
ServerInstanceID string
|
||||
GamePlayerRecordID string
|
||||
EventID string
|
||||
OccurredAt time.Time
|
||||
Outcome string
|
||||
Reason string
|
||||
NetworkCorrelationKey string
|
||||
ExpiresAt time.Time
|
||||
}
|
||||
type GameAccessAttemptFilter struct {
|
||||
ServerInstanceID string
|
||||
GamePlayerRecordID string
|
||||
Limit int
|
||||
}
|
||||
type GameSecuritySignalStatus string
|
||||
|
||||
const (
|
||||
GameSecuritySignalOpen GameSecuritySignalStatus = "open"
|
||||
GameSecuritySignalReviewRequired GameSecuritySignalStatus = "review-required"
|
||||
GameSecuritySignalExpired GameSecuritySignalStatus = "expired"
|
||||
)
|
||||
|
||||
// GameSecuritySignal is evidence for manual review; it carries no enforcement action.
|
||||
type GameSecuritySignal struct {
|
||||
ID string
|
||||
ServerInstanceID string
|
||||
GamePlayerRecordID string
|
||||
RuleKey string
|
||||
Status GameSecuritySignalStatus
|
||||
EvidenceCount int
|
||||
Summary string
|
||||
FirstObservedAt time.Time
|
||||
LastObservedAt time.Time
|
||||
ExpiresAt time.Time
|
||||
}
|
||||
type GameSecuritySignalFilter struct {
|
||||
ServerInstanceID string
|
||||
GamePlayerRecordID string
|
||||
Limit int
|
||||
}
|
||||
type GamePlayerProfile struct {
|
||||
Player GamePlayer
|
||||
Aliases []GamePlayerAlias
|
||||
Sessions []GamePlayerSession
|
||||
AccessAttempts []GameAccessAttempt
|
||||
SecuritySignals []GameSecuritySignal
|
||||
}
|
||||
|
||||
func CopyGamePlayer(v GamePlayer) GamePlayer { return v }
|
||||
func CopyGamePlayerAlias(v GamePlayerAlias) GamePlayerAlias { return v }
|
||||
func CopyGamePlayerSession(v GamePlayerSession) GamePlayerSession { return v }
|
||||
func CopyGameAccessAttempt(v GameAccessAttempt) GameAccessAttempt { return v }
|
||||
func CopyGameSecuritySignal(v GameSecuritySignal) GameSecuritySignal { return v }
|
||||
Reference in New Issue
Block a user