db

package
v0.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 25, 2025 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Overview

Package db provides a simplistic ORM to communicate with an SQL database for storage

Index

Constants

View Source
const (
	InitialMcc         = "001"
	InitialMnc         = "01"
	InitialOperatorSst = 1
	InitialOperatorSd  = 1056816
)

Initial operator values

View Source
const (
	InitialDataNetworkName   = "internet"
	InitialDataNetworkIPPool = "10.45.0.0/16"
	InitialDataNetworkDNS    = "8.8.8.8"
	InitialDataNetworkMTU    = 1400
)

Initial Data network values

View Source
const (
	InitialPolicyName            = "default"
	InitialPolicyBitrateUplink   = "200 Mbps"
	InitialPolicyBitrateDownlink = "200 Mbps"
	InitialPolicyVar5qi          = 1
	InitialPolicyPriorityLevel   = 1
)

Initial Policy values

View Source
const APITokensTableName = "api_tokens"
View Source
const AuditLogsTableName = "audit_logs"
View Source
const DataNetworksTableName = "data_networks"
View Source
const DefaultLogRetentionDays = 30

Initial Log Retention Policy values

View Source
const LogRetentionPolicyTableName = "log_retention_policies"
View Source
const (
	NATDefaultEnabled = true
)
View Source
const NATSettingsTableName = "nat_settings"
View Source
const OperatorTableName = "operator"
View Source
const PoliciesTableName = "policies"
View Source
const QueryCreateAPITokensTable = `` /* 280-byte string literal not displayed */
View Source
const QueryCreateAuditLogsTable = `` /* 359-byte string literal not displayed */

Structured table (no raw blob). Keep strings NOT NULL with empty defaults to avoid NullString hassle.

View Source
const QueryCreateDataNetworksTable = `` /* 168-byte string literal not displayed */
View Source
const QueryCreateLogRetentionPolicyTable = `` /* 192-byte string literal not displayed */
View Source
const QueryCreateNATSettingsTable = `` /* 145-byte string literal not displayed */
View Source
const QueryCreateOperatorTable = `` /* 270-byte string literal not displayed */
View Source
const QueryCreatePoliciesTable = `` /* 323-byte string literal not displayed */
View Source
const QueryCreateRadioLogsTable = `` /* 320-byte string literal not displayed */

Structured table (no raw blob). Keep strings NOT NULL with empty defaults to avoid NullString hassle.

View Source
const QueryCreateRoutesTable = `` /* 183-byte string literal not displayed */
View Source
const QueryCreateSubscriberLogsTable = `` /* 318-byte string literal not displayed */

Structured table (no raw blob). Keep strings NOT NULL with empty defaults to avoid NullString hassle.

View Source
const QueryCreateSubscribersTable = `` /* 285-byte string literal not displayed */
View Source
const QueryCreateUsersTable = `` /* 158-byte string literal not displayed */
View Source
const RadioLogsTableName = "radio_logs"
View Source
const RoutesTableName = "routes"
View Source
const SessionsTableName = "sessions"
View Source
const SubscriberLogsTableName = "subscriber_logs"
View Source
const SubscribersTableName = "subscribers"
View Source
const UsersTableName = "users"

Variables

This section is empty.

Functions

This section is empty.

Types

type APIToken added in v0.2.0

type APIToken struct {
	ID        int        `db:"id"`
	TokenID   string     `db:"token_id"`
	Name      string     `db:"name"`
	TokenHash string     `db:"token_hash"`
	UserID    int        `db:"user_id"`
	ExpiresAt *time.Time `db:"expires_at"`
}

type AuditLog added in v0.2.0

type AuditLog struct {
	ID        int    `db:"id"`
	Timestamp string `db:"timestamp"` // store as RFC3339 string; parse in API layer if needed
	Level     string `db:"level"`
	Actor     string `db:"actor"`
	Action    string `db:"action"`
	IP        string `db:"ip"`
	Details   string `db:"details"` // JSON or plain text (we store a string)
}

type DataNetwork added in v0.1.0

type DataNetwork struct {
	ID     int    `db:"id"`
	Name   string `db:"name"`
	IPPool string `db:"ipPool"`
	DNS    string `db:"dns"`
	MTU    int32  `db:"mtu"`
}

type Database

type Database struct {
	// contains filtered or unexported fields
}

Database is the object used to communicate with the established repository.

func NewDatabase

func NewDatabase(databasePath string) (*Database, error)

NewDatabase connects to a given table in a given database, stores the connection information and returns an object containing the information. The database path must be a valid file path or ":memory:". The table will be created if it doesn't exist in the format expected by the package.

func (*Database) AllocateIP

func (db *Database) AllocateIP(ctx context.Context, imsi string) (net.IP, error)

func (*Database) AuditWriteFunc added in v0.2.0

func (db *Database) AuditWriteFunc(ctx context.Context) func([]byte) error

func (*Database) Backup

func (db *Database) Backup(destinationFile *os.File) error

func (*Database) BeginTransaction added in v0.0.9

func (db *Database) BeginTransaction() (*Transaction, error)

func (*Database) Close

func (db *Database) Close() error

Close closes the connection to the repository cleanly.

func (*Database) CountAPITokens added in v0.3.0

func (db *Database) CountAPITokens(ctx context.Context, userID int) (int, error)

func (*Database) CountAuditLogs added in v0.3.0

func (db *Database) CountAuditLogs(ctx context.Context) (int, error)

func (*Database) CountDataNetworks added in v0.3.0

func (db *Database) CountDataNetworks(ctx context.Context) (int, error)

func (*Database) CountPolicies added in v0.3.0

func (db *Database) CountPolicies(ctx context.Context) (int, error)

CountPolicies returns policy count

func (*Database) CountRadioLogs added in v0.3.0

func (db *Database) CountRadioLogs(ctx context.Context) (int, error)

func (*Database) CountRoutes added in v0.3.0

func (db *Database) CountRoutes(ctx context.Context) (int, error)

NumRoutes returns route count

func (*Database) CountSubscriberLogs added in v0.3.0

func (db *Database) CountSubscriberLogs(ctx context.Context) (int, error)

func (*Database) CountSubscribers added in v0.3.0

func (db *Database) CountSubscribers(ctx context.Context) (int, error)

func (*Database) CountSubscribersInPolicy added in v0.3.0

func (db *Database) CountSubscribersInPolicy(ctx context.Context, policyID int) (int, error)

func (*Database) CountSubscribersWithIP added in v0.3.0

func (db *Database) CountSubscribersWithIP(ctx context.Context) (int, error)

func (*Database) CountUsers added in v0.3.0

func (db *Database) CountUsers(ctx context.Context) (int, error)

CountUsers returns user count with a span named "SELECT users".

func (*Database) CreateAPIToken added in v0.2.0

func (db *Database) CreateAPIToken(ctx context.Context, apiToken *APIToken) error

CreateAPIToken inserts a new api token with a span named "INSERT api_token".

func (*Database) CreateDataNetwork added in v0.1.0

func (db *Database) CreateDataNetwork(ctx context.Context, dataNetwork *DataNetwork) error

func (*Database) CreatePolicy added in v0.1.0

func (db *Database) CreatePolicy(ctx context.Context, policy *Policy) error

func (*Database) CreateSession added in v0.3.0

func (db *Database) CreateSession(ctx context.Context, session *Session) (int64, error)

func (*Database) CreateSubscriber

func (db *Database) CreateSubscriber(ctx context.Context, subscriber *Subscriber) error

func (*Database) CreateUser

func (db *Database) CreateUser(ctx context.Context, user *User) error

CreateUser inserts a new user with a span named "INSERT users".

func (*Database) DeleteAPIToken added in v0.2.0

func (db *Database) DeleteAPIToken(ctx context.Context, id int) error

func (*Database) DeleteDataNetwork added in v0.1.0

func (db *Database) DeleteDataNetwork(ctx context.Context, name string) error

func (*Database) DeleteExpiredSessions added in v0.3.0

func (db *Database) DeleteExpiredSessions(ctx context.Context) (int, error)

func (*Database) DeleteOldAuditLogs added in v0.2.0

func (db *Database) DeleteOldAuditLogs(ctx context.Context, days int) error

DeleteOldAuditLogs removes logs older than the specified retention period in days.

func (*Database) DeleteOldRadioLogs added in v0.3.0

func (db *Database) DeleteOldRadioLogs(ctx context.Context, days int) error

DeleteOldRadioLogs removes logs older than the specified retention period in days.

func (*Database) DeleteOldSubscriberLogs added in v0.3.0

func (db *Database) DeleteOldSubscriberLogs(ctx context.Context, days int) error

DeleteOldSubscriberLogs removes logs older than the specified retention period in days.

func (*Database) DeletePolicy added in v0.1.0

func (db *Database) DeletePolicy(ctx context.Context, name string) error

func (*Database) DeleteSessionByTokenHash added in v0.3.0

func (db *Database) DeleteSessionByTokenHash(ctx context.Context, tokenHash []byte) error

func (*Database) DeleteSubscriber

func (db *Database) DeleteSubscriber(ctx context.Context, imsi string) error

func (*Database) DeleteUser

func (db *Database) DeleteUser(ctx context.Context, email string) error

DeleteUser removes a user by email with a span named "DELETE users".

func (*Database) GetAPITokenByName added in v0.2.0

func (db *Database) GetAPITokenByName(ctx context.Context, userID int, name string) (*APIToken, error)

func (*Database) GetAPITokenByTokenID added in v0.2.0

func (db *Database) GetAPITokenByTokenID(ctx context.Context, tokenID string) (*APIToken, error)

func (*Database) GetDataNetwork added in v0.1.0

func (db *Database) GetDataNetwork(ctx context.Context, name string) (*DataNetwork, error)

func (*Database) GetDataNetworkByID added in v0.1.0

func (db *Database) GetDataNetworkByID(ctx context.Context, id int) (*DataNetwork, error)

func (*Database) GetHomeNetworkPrivateKey added in v0.0.7

func (db *Database) GetHomeNetworkPrivateKey(ctx context.Context) (string, error)

GetHomeNetworkPrivateKey retrieves the private key.

func (*Database) GetIPAddressesAllocated

func (db *Database) GetIPAddressesAllocated(ctx context.Context) (int, error)

func (*Database) GetIPAddressesTotal

func (db *Database) GetIPAddressesTotal() (int, error)

func (*Database) GetLogRetentionPolicy added in v0.2.0

func (db *Database) GetLogRetentionPolicy(ctx context.Context, category LogCategory) (int, error)

func (*Database) GetOperator added in v0.0.5

func (db *Database) GetOperator(ctx context.Context) (*Operator, error)

GetOperator retrieves the operator row.

func (*Database) GetOperatorCode

func (db *Database) GetOperatorCode(ctx context.Context) (string, error)

GetOperatorCode fetches only the operatorCode field.

func (*Database) GetPolicy added in v0.1.0

func (db *Database) GetPolicy(ctx context.Context, name string) (*Policy, error)

func (*Database) GetPolicyByID added in v0.1.0

func (db *Database) GetPolicyByID(ctx context.Context, id int) (*Policy, error)

func (*Database) GetRoute added in v0.0.9

func (db *Database) GetRoute(ctx context.Context, id int64) (*Route, error)

func (*Database) GetSessionByTokenHash added in v0.3.0

func (db *Database) GetSessionByTokenHash(ctx context.Context, tokenHash []byte) (*Session, error)

func (*Database) GetSize

func (db *Database) GetSize() (int64, error)

func (*Database) GetSubscriber

func (db *Database) GetSubscriber(ctx context.Context, imsi string) (*Subscriber, error)

func (*Database) GetUser

func (db *Database) GetUser(ctx context.Context, email string) (*User, error)

GetUser fetches a single user by email with a span named "SELECT users".

func (*Database) GetUserByID added in v0.2.0

func (db *Database) GetUserByID(ctx context.Context, id int) (*User, error)

GetUserByID fetches a single user by ID with a span named "SELECT users".

func (*Database) Initialize added in v0.1.0

func (db *Database) Initialize() error

func (*Database) InitializeNATSettings added in v0.3.0

func (db *Database) InitializeNATSettings(ctx context.Context) error

InitializeNATSettings inserts the default NAT settings into the database. If the settings already exist, it does nothing.

func (*Database) InitializeOperator

func (db *Database) InitializeOperator(ctx context.Context, initialOperator *Operator) error

func (*Database) InsertAuditLogJSON added in v0.2.0

func (db *Database) InsertAuditLogJSON(ctx context.Context, raw []byte) error

InsertAuditLogJSON parses the zap JSON and inserts a structured row.

func (*Database) InsertRadioLogJSON added in v0.3.0

func (db *Database) InsertRadioLogJSON(ctx context.Context, raw []byte) error

InsertRadioLogJSON parses the zap JSON and inserts a structured row.

func (*Database) InsertSubscriberLogJSON added in v0.3.0

func (db *Database) InsertSubscriberLogJSON(ctx context.Context, raw []byte) error

InsertSubscriberLogJSON parses the zap JSON and inserts a structured row.

func (*Database) IsLogRetentionPolicyInitialized added in v0.2.0

func (db *Database) IsLogRetentionPolicyInitialized(ctx context.Context, category LogCategory) bool

Ensure that we have a row for the Audit Log retention policy.

func (*Database) IsNATEnabled added in v0.3.0

func (db *Database) IsNATEnabled(ctx context.Context) (bool, error)

func (*Database) IsOperatorInitialized added in v0.0.20

func (db *Database) IsOperatorInitialized() bool

func (*Database) ListAPITokensPage added in v0.3.0

func (db *Database) ListAPITokensPage(ctx context.Context, userID int, page int, perPage int) ([]APIToken, int, error)

func (*Database) ListAuditLogsPage added in v0.3.0

func (db *Database) ListAuditLogsPage(ctx context.Context, page, perPage int) ([]AuditLog, int, error)

func (*Database) ListDataNetworksPage added in v0.3.0

func (db *Database) ListDataNetworksPage(ctx context.Context, page, perPage int) ([]DataNetwork, int, error)

func (*Database) ListPoliciesPage added in v0.3.0

func (db *Database) ListPoliciesPage(ctx context.Context, page int, perPage int) ([]Policy, int, error)

func (*Database) ListRadioLogsPage added in v0.3.0

func (db *Database) ListRadioLogsPage(ctx context.Context, page, perPage int) ([]RadioLog, int, error)

func (*Database) ListRoutesPage added in v0.3.0

func (db *Database) ListRoutesPage(ctx context.Context, page int, perPage int) ([]Route, int, error)

func (*Database) ListSubscriberLogsPage added in v0.3.0

func (db *Database) ListSubscriberLogsPage(ctx context.Context, page, perPage int) ([]SubscriberLog, int, error)

func (*Database) ListSubscribersPage added in v0.3.0

func (db *Database) ListSubscribersPage(ctx context.Context, page int, perPage int) ([]Subscriber, int, error)

func (*Database) ListUsersPage added in v0.3.0

func (db *Database) ListUsersPage(ctx context.Context, page, perPage int) ([]User, int, error)

func (*Database) PoliciesInDataNetwork added in v0.1.0

func (db *Database) PoliciesInDataNetwork(ctx context.Context, name string) (bool, error)

func (*Database) RadioWriteFunc added in v0.3.0

func (db *Database) RadioWriteFunc(ctx context.Context) func([]byte) error

func (*Database) ReleaseIP

func (db *Database) ReleaseIP(ctx context.Context, imsi string) error

ReleaseIP removes any assigned IP for a subscriber.

func (*Database) Restore

func (db *Database) Restore(backupFile *os.File) error

func (*Database) SetLogRetentionPolicy added in v0.2.0

func (db *Database) SetLogRetentionPolicy(ctx context.Context, policy *LogRetentionPolicy) error

SetLogRetentionPolicy upserts the retention policy for a category.

func (*Database) SubscriberWriteFunc added in v0.3.0

func (db *Database) SubscriberWriteFunc(ctx context.Context) func([]byte) error

func (*Database) SubscribersInPolicy added in v0.1.0

func (db *Database) SubscribersInPolicy(ctx context.Context, name string) (bool, error)

func (*Database) UpdateDataNetwork added in v0.1.0

func (db *Database) UpdateDataNetwork(ctx context.Context, dataNetwork *DataNetwork) error

func (*Database) UpdateHomeNetworkPrivateKey added in v0.0.7

func (db *Database) UpdateHomeNetworkPrivateKey(ctx context.Context, privateKey string) error

UpdateHomeNetworkPrivateKey updates the private key.

func (*Database) UpdateNATSettings added in v0.3.0

func (db *Database) UpdateNATSettings(ctx context.Context, enabled bool) error

func (*Database) UpdateOperatorCode

func (db *Database) UpdateOperatorCode(ctx context.Context, operatorCode string) error

UpdateOperatorCode sets a new operatorCode.

func (*Database) UpdateOperatorID added in v0.0.12

func (db *Database) UpdateOperatorID(ctx context.Context, mcc, mnc string) error

UpdateOperatorID updates MCC/MNC.

func (*Database) UpdateOperatorSlice added in v0.0.7

func (db *Database) UpdateOperatorSlice(ctx context.Context, sst int32, sd int) error

UpdateOperatorSlice updates SST/SD.

func (*Database) UpdateOperatorTracking added in v0.0.7

func (db *Database) UpdateOperatorTracking(ctx context.Context, supportedTACs []string) error

UpdateOperatorTracking updates supported TACs.

func (*Database) UpdatePolicy added in v0.1.0

func (db *Database) UpdatePolicy(ctx context.Context, policy *Policy) error

func (*Database) UpdateSubscriber

func (db *Database) UpdateSubscriber(ctx context.Context, subscriber *Subscriber) error

func (*Database) UpdateUser

func (db *Database) UpdateUser(ctx context.Context, email string, roleID RoleID) error

UpdateUser updates a user's role with a span named "UPDATE users".

func (*Database) UpdateUserPassword added in v0.0.8

func (db *Database) UpdateUserPassword(ctx context.Context, email string, hashedPassword string) error

UpdateUserPassword sets a new password hash with a span named "UPDATE users".

type ListArgs added in v0.3.0

type ListArgs struct {
	Limit  int `db:"limit"`
	Offset int `db:"offset"`
}

type LogCategory added in v0.2.0

type LogCategory string
const (
	CategoryAuditLogs      LogCategory = "audit"
	CategorySubscriberLogs LogCategory = "subscriber"
	CategoryRadioLogs      LogCategory = "radio"
)

type LogRetentionPolicy added in v0.2.0

type LogRetentionPolicy struct {
	ID       int         `db:"id"`
	Category LogCategory `db:"category"`
	Days     int         `db:"retention_days"`
}

type NATSettings added in v0.3.0

type NATSettings struct {
	Enabled bool `db:"enabled"`
}

type NetworkInterface added in v0.0.9

type NetworkInterface int

NetworkInterface is an enum for network interface keys.

const (
	N3 NetworkInterface = iota
	N6
)

func (NetworkInterface) String added in v0.0.9

func (ni NetworkInterface) String() string

type NumItems added in v0.3.0

type NumItems struct {
	Count int `db:"count"`
}

type Operator

type Operator struct {
	ID                    int    `db:"id"`
	Mcc                   string `db:"mcc"`
	Mnc                   string `db:"mnc"`
	OperatorCode          string `db:"operatorCode"`
	SupportedTACs         string `db:"supportedTACs"` // JSON-encoded list of strings
	Sst                   int32  `db:"sst"`
	Sd                    int    `db:"sd"`
	HomeNetworkPrivateKey string `db:"homeNetworkPrivateKey"`
}

func (*Operator) GetHexSd added in v0.0.5

func (operator *Operator) GetHexSd() string

func (*Operator) GetHomeNetworkPublicKey added in v0.0.7

func (operator *Operator) GetHomeNetworkPublicKey() (string, error)

func (*Operator) GetSupportedTacs added in v0.0.5

func (operator *Operator) GetSupportedTacs() []string

func (*Operator) SetSupportedTacs added in v0.0.5

func (operator *Operator) SetSupportedTacs(supportedTACs []string)

type Policy added in v0.1.0

type Policy struct {
	ID              int    `db:"id"`
	Name            string `db:"name"`
	BitrateUplink   string `db:"bitrateUplink"`
	BitrateDownlink string `db:"bitrateDownlink"`
	Var5qi          int32  `db:"var5qi"`
	PriorityLevel   int32  `db:"priorityLevel"`
	DataNetworkID   int    `db:"dataNetworkID"`
}

type RadioLog added in v0.3.0

type RadioLog struct {
	ID        int    `db:"id"`
	Timestamp string `db:"timestamp"` // store as RFC3339 string; parse in API layer if needed
	Level     string `db:"level"`
	RanID     string `db:"ran_id"`
	Event     string `db:"event"`
	Details   string `db:"details"` // JSON or plain text (we store a string)
}

type RoleID added in v0.0.20

type RoleID int
const (
	RoleAdmin                RoleID = 0
	RoleCertificateManager   RoleID = 1
	RoleCertificateRequestor RoleID = 2
	RoleReadOnly             RoleID = 3
)

type Route added in v0.0.9

type Route struct {
	ID          int64            `db:"id"`
	Destination string           `db:"destination"`
	Gateway     string           `db:"gateway"`
	Interface   NetworkInterface `db:"interface"`
	Metric      int              `db:"metric"`
}

Route represents a route record.

type Session added in v0.3.0

type Session struct {
	ID        int    `db:"id"`
	UserID    int    `db:"user_id"`
	TokenHash []byte `db:"token_hash"`
	CreatedAt int64  `db:"created_at"` // store as Unix timestamp (seconds since epoch)
	ExpiresAt int64  `db:"expires_at"` // store as Unix timestamp (seconds since epoch)
}

type Subscriber

type Subscriber struct {
	ID             int    `db:"id"`
	Imsi           string `db:"imsi"`
	IPAddress      string `db:"ipAddress"`
	SequenceNumber string `db:"sequenceNumber"`
	PermanentKey   string `db:"permanentKey"`
	Opc            string `db:"opc"`
	PolicyID       int    `db:"policyID"`
}

type SubscriberLog added in v0.3.0

type SubscriberLog struct {
	ID        int    `db:"id"`
	Timestamp string `db:"timestamp"` // store as RFC3339 string; parse in API layer if needed
	Level     string `db:"level"`
	IMSI      string `db:"imsi"`
	Event     string `db:"event"`
	Details   string `db:"details"` // JSON or plain text (we store a string)
}

type Transaction added in v0.0.9

type Transaction struct {
	// contains filtered or unexported fields
}

Transaction wraps a SQLair transaction.

func (*Transaction) Commit added in v0.0.9

func (t *Transaction) Commit() error

func (*Transaction) CreateRoute added in v0.0.9

func (t *Transaction) CreateRoute(ctx context.Context, route *Route) (int64, error)

func (*Transaction) DeleteRoute added in v0.0.9

func (t *Transaction) DeleteRoute(ctx context.Context, id int64) error

func (*Transaction) Rollback added in v0.0.9

func (t *Transaction) Rollback() error

type User

type User struct {
	ID             int    `db:"id"`
	Email          string `db:"email"`
	RoleID         RoleID `db:"roleID"`
	HashedPassword string `db:"hashedPassword"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL