Documentation
¶
Index ¶
- func AutoMigrate() error
- func Close() error
- func Create(value interface{}) (tx *gorm.DB)
- func DeploySampleData() error
- func LogEvent(userEntry *T_user, event Event, eventDetail string) error
- func Open() error
- func OpenForTesting() error
- type Event
- type Result
- type ResultSeries
- type ResultSeriesStats
- type T_event
- type T_group
- func (group *T_group) AddOwner(userEntry *T_user) error
- func (group *T_group) BeforeSave(tx *gorm.DB) error
- func (group *T_group) Create() error
- func (group *T_group) Delete() error
- func (group *T_group) Save(columns ...string) (int64, error)
- func (group *T_group) UpdateOwners(userEntries []T_user) error
- type T_ownership
- type T_user
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AutoMigrate ¶
func AutoMigrate() error
AutoMigrate migrates the backend database tables to the latest structure
func Close ¶
func Close() error
Close closes the backend database and attempts all maintenance and cleanup steps
func DeploySampleData ¶
func DeploySampleData() error
DeploySampleData applies development defaults and sample data to the backend database
func OpenForTesting ¶
func OpenForTesting() error
OpenForTesting opens a shared in-memory SQLite database for use in tests. Call AutoMigrate after this to create the schema.
Types ¶
type Event ¶
type Event string
Event identifies an auditable user action
const EventApiToken Event = "API Token" // API token creation
const EventDatabaseAdd Event = "Database Added" // Database server creation
const EventDbPassword Event = "Database Password" // Database password reset
const EventLogin Event = "Login" // Successful user login
const EventScopeCreate Event = "Scope Created" // Scan scope creation
const EventScopeSecret Event = "Scope Secret" // Scan scope secret reset
const EventViewGrant Event = "User Granted" // View access grant
const EventViewToken Event = "Token Generated" // View token creation
type ResultSeries ¶
type ResultSeries = []Result // Ordered set of database results
type ResultSeriesStats ¶
type ResultSeriesStats = map[string]ResultSeries // Result series grouped by a handler-defined statistic
type T_event ¶
type T_event struct {
// - Set the JSON ignore flag (json:"-") for sensitive columns that may NEVER be leaked by a JSON response.
// - Make columns "not null" if possible. Otherwise, use null-types (e.g. sql.NullString).
// - Avoid 'default' constraints or gorm will replace empty values (0, "", false) with set default values on CREATE!
// - Define a lower-snake-case json name for every attribute.
Id uint64 `gorm:"column:id;primaryKey" json:"-"`
IdTUser uint64 `gorm:"column:id_t_user;type:int" json:"-"`
Email string `gorm:"column:email;not null" json:"email"`
Timestamp time.Time `gorm:"column:timestamp;default:CURRENT_TIMESTAMP" json:"timestamp"`
Event Event `gorm:"column:event;not null" json:"event"`
EventDetail string `gorm:"column:event_detail;default:''" json:"event_detail"`
User *T_user `gorm:"foreignKey:IdTUser;constraint:OnUpdate:CASCADE,OnDelete:SET NULL" json:"user"` // User must be pointer *T_user, because it can be null OnDelete
}
T_event represents an auditable user action persisted in the backend database
func GetEvents ¶
GetEvents returns optionally limited events of the requested kind at or after the optional timestamp
func GetEventsAll ¶
GetEventsAll returns all optionally limited events at or after the optional timestamp
type T_group ¶
type T_group struct {
// - Set the JSON ignore flag (json:"-") for sensitive columns that may NEVER be leaked by a JSON response.
// - Make columns "not null" if possible. Otherwise, use null-types (e.g. sql.NullString).
// - Avoid 'default' constraints or gorm will replace empty values (0, "", false) with set default values on CREATE!
// - Define a lower-snake-case json name for every attribute.
Id uint64 `gorm:"column:id;primaryKey" json:"id"`
Name string `gorm:"column:name;not null" json:"name"`
Created time.Time `gorm:"column:created;not null;default:CURRENT_TIMESTAMP" json:"created"`
CreatedBy string `gorm:"column:created_by;not null" json:"created_by"`
DbServerId uint64 `gorm:"column:db_server_id;not null;default:1" json:"db_server_id"`
MaxScopes int `gorm:"column:max_scopes;not null" json:"max_scopes"`
MaxViews int `gorm:"column:max_views;not null" json:"max_views"`
MaxTargets int `gorm:"column:max_targets;not null" json:"max_targets"`
MaxOwners int `gorm:"column:max_owners;not null" json:"max_owners"`
AllowCustom bool `gorm:"column:allow_custom;not null;default:true" json:"allow_custom"`
AllowNetwork bool `gorm:"column:allow_network;not null;default:false" json:"allow_network"`
AllowAsset bool `gorm:"column:allow_asset;not null;default:false" json:"allow_asset"`
Ownerships []T_ownership `gorm:"foreignKey:IdTGroup;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"ownerships"`
}
T_group represents a user group and its ownership relations
func GetGroupById ¶
GetGroupById searches a group by ID and returns a pointer to the found group. If no entry is found, a nil pointer is returned, make sure to check it!
func GetGroupsOfUser ¶
GetGroupsOfUser returns the groups associated with a user
func (*T_group) AddOwner ¶
AddOwner creates an ownership by adding a user to a group. The ownerships set in the group will be updated by this function. However, the existing ownerships must not have the User.Ownerships or Group values set, as this will result in an endless SQL query. (The group returned by GetGroupById is valid)
func (*T_group) BeforeSave ¶
BeforeSave is a GORM hook that's executed every time the user object is written to the DB. This should be used to do some data sanitization, e.g. to strip illegal HTML tags in user attributes or to convert values to a certain format.
func (*T_group) Save ¶
Save updates defined columns of a group entry in the database. It updates defined columns, to the currently set values, even if the values are empty ones, such as 0, false or "". ATTENTION: Only update required columns to avoid overwriting changes of parallel processes (with data in memory)
func (*T_group) UpdateOwners ¶
UpdateOwners removes all owners and sets them to the given list of new owners. The ownerships set in the group will be updated by this function.
type T_ownership ¶
type T_ownership struct {
// "uniqueIndex" is a workaround to introduce a "unique" mechanism across multiple columns (group id and user id)
Id uint64 `gorm:"column:id;primaryKey" json:"id"`
IdTGroup uint64 `gorm:"column:id_t_group;type:int;not null;uniqueIndex:idx_group_user"` // SQLITE3 does only support FK via type definition https://github.com/go-gorm/gorm/issues/765 https://www.sqlite.org/foreignkeys.html
IdTUser uint64 `gorm:"column:id_t_user;type:int;not null;uniqueIndex:idx_group_user"` // SQLITE3 does only support FK via type definition https://github.com/go-gorm/gorm/issues/765 https://www.sqlite.org/foreignkeys.html
Group T_group `gorm:"foreignKey:IdTGroup" json:"group"`
User T_user `gorm:"foreignKey:IdTUser" json:"user"`
}
T_ownership is a join-table to establish a many-to-many relationship between users and groups. Each expressed relationship contains additional attributes, like whether it is an administrative relationship.
func (*T_ownership) Delete ¶
func (ownership *T_ownership) Delete() error
Delete an ownership relation
type T_user ¶
type T_user struct {
// - Set the JSON ignore flag (json:"-") for sensitive columns that may NEVER be leaked by a JSON response.
// - Make columns "not null" if possible. Otherwise, use null-types (e.g. sql.NullString).
// - Avoid 'default' constraints or gorm will replace empty values (0, "", false) with set default values on CREATE!
// - Define a lower-snake-case json name for every attribute.
Id uint64 `gorm:"column:id;primaryKey" json:"id"`
Email string `gorm:"column:email;not null;unique" json:"email"` // User ID. Notification e-mail == user ID, to make sure this is always in sync
Password sql.NullString `gorm:"column:password" json:"-"` // Password hash for users not using a dedicated authenticator, such as oauth SSO. Empty password indicates other authentication mechanism.
Company string `gorm:"column:company;not null" json:"company"` // Field to mark users of the same company, as those will be able to see each other
Department string `gorm:"column:department;default:'';" json:"department"` // Field to support distinguishing users of a company from different departments
Gid string `gorm:"column:gid;default:''" json:"-"` // Global user ID, e.g. within the company. May be util e.g. to query asset inventories.
Created time.Time `gorm:"column:created;not null" json:"created"` //
LastLogin time.Time `gorm:"column:last_login;not null" json:"last_login"` // Last time an access token was requested
LogoutCount uint `gorm:"column:logout_count;default:0" json:"-"` // A counter incremented on each logout and incorporated into every JWT token to invalidate previously issued ones ahead of time.
ApiTokenRevision uint `gorm:"column:api_token_revision;default:0;not null" json:"-"` // A counter incremented on each API token issuance to invalidate previously issued API tokens.
Active bool `gorm:"column:active;not null" json:"active"` //
Admin bool `gorm:"column:admin;not null" json:"admin"` //
Name string `gorm:"column:name;not null" json:"name"` //
Surname string `gorm:"column:surname;not null" json:"surname"` //
Gender string `gorm:"column:gender;default:''" json:"gender"` // Gender could be either M/W/D, but can also be left empty
Demo bool `gorm:"column:demo;not null;default:false" json:"demo"` // Whether the user is allowed to view modules but not execute them
Certificate []byte `gorm:"column:certificate;not null" json:"certificate"` // User's public key to allow sending encrypted messages
DbPasswordHash string `gorm:"column:db_password;default:''" json:"-"` // Hashed password generated by the system and used as the user's temporary password to access database views. This hash is injected into the database user object, to avoid clear-text password handling.
Ownerships []T_ownership `gorm:"foreignKey:IdTUser;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"ownerships"`
}
T_user represents a registered user and their details
func GetAdministrators ¶
GetAdministrators returns all administrative users from the database
func GetUser ¶
GetUser searches a user by ID and returns a pointer to the found user. If no entry is found, a nil pointer is returned, make sure to check it!
func GetUserByMail ¶
GetUserByMail searches a user by e-mail address and returns a pointer to the found user. This function will only find zero or one user, because the e-mail address is a unique attribute. If no entry is found, a nil pointer is returned, make sure to check it!
func NewUser ¶
func NewUser(email string, company string, department string, gid string, name string, surname string) *T_user
NewUser constructs a user model and pre-fills it with the given or default data
func (*T_user) BeforeSave ¶
BeforeSave is a GORM hook that's executed every time the user object is written to the DB. This should be used to do some data sanitization, e.g. to strip illegal HTML tags in user attributes or to convert values to a certain format.
func (*T_user) Save ¶
Save updates defined columns of a user entry in the database. It updates defined columns, to the currently set values, even if the values are empty ones, such as 0, false or "". ATTENTION: Only update required columns to avoid overwriting changes of parallel processes (with data in memory)