Documentation
¶
Index ¶
- Variables
- func AddLogEvent(name string, description string, level int) error
- func AddNotification(receiverUsername string, name string, description string, priority uint8) error
- func AddUser(user FullUser) error
- func AddUserPermission(username string, permission PermissionType) (bool, error)
- func AddUserSwitchPermission(username string, switchId string) (bool, error)
- func CheckDatabase() error
- func CreateHardwareNode(name string, url string, token string) error
- func CreateNewHomescript(homescript Homescript) error
- func CreateRoom(RoomId string, Name string, Description string) error
- func CreateSwitch(id string, name string, roomId string) error
- func DeleteAllNotificationsFromUser(username string) error
- func DeleteHardwareNode(url string) error
- func DeleteHomescriptById(homescriptId string) error
- func DeleteNotificationFromUserById(notificationId uint, username string) error
- func DeleteSwitch(switchId string) error
- func DeleteTables() error
- func DeleteUser(username string) error
- func DoesHomescriptExist(homescriptId string) (bool, error)
- func DoesPermissionExist(permission string) bool
- func DoesSwitchExist(switchId string) (bool, error)
- func DoesUserExist(username string) (bool, error)
- func FlushAllLogs() error
- func FlushOldLogs() error
- func GetAvatarPathByUsername(username string) (string, error)
- func GetPowerStateOfSwitch(switchId string) (bool, error)
- func GetUserNotificationCount(username string) (uint16, error)
- func GetUserPasswordHash(username string) (string, error)
- func GetUserPermissions(username string) ([]string, error)
- func GetUserSwitchPermissions(username string) ([]string, error)
- func Init(databaseConfig DatabaseConfig, adminPassword string) error
- func InitLogger(logger *logrus.Logger)
- func InsertUser(user FullUser) error
- func ModifyHomescriptById(id string, homescript HomescriptFrontend) error
- func RemoveAllPermissionsOfUser(username string) error
- func RemoveAllSwitchPermissionsOfUser(username string) error
- func RemoveSwitchFromPermissions(switchId string) error
- func RemoveUserPermission(username string, permission PermissionType) (bool, error)
- func RemoveUserSwitchPermission(username string, switchId string) (bool, error)
- func SetNodeOnline(nodeUrl string, online bool) error
- func SetPowerState(switchId string, isPoweredOn bool) (bool, error)
- func SetUserAvatarPath(username string, avatarPath string) error
- func UserHasPermission(username string, permission PermissionType) (bool, error)
- func UserHasSwitchPermission(username string, switchId string) (bool, error)
- type Camera
- type DBStatus
- type DatabaseConfig
- type FullUser
- type HardwareNode
- type Homescript
- type HomescriptFrontend
- type LogEvent
- type Notification
- type Permission
- type PermissionType
- type PowerState
- type Room
- type Switch
- type User
Constants ¶
This section is empty.
Variables ¶
var ( Permissions = []Permission{ { Permission: PermissionAuthentication, Name: "Authentication", Description: "Allows the user to authenticate", }, { Permission: PermissionSetPower, Name: "Set Power", Description: "Interact with switches", }, { Permission: PermissionAddLogEvent, Name: "Add Log Event", Description: "Use the internal logging system", }, { Permission: PermissionDeleteLogs, Name: "Flush Logs All or Old", Description: "Delete logs events which are older than 30 days or delete all log events", }, { Permission: PermissionListLogs, Name: "List Logs", Description: "List all internal logs", }, { Permission: PermissionChangeAvatar, Name: "Upload / Delete / Change Avatar", Description: "Allows the user to customize their avatar", }, { Permission: PermissionChangeUserPermissions, Name: "Change User Permissions", Description: "Add / delete permissions to / from users", }, { Permission: PermissionChangeSwitchPermissions, Name: "Change User Switch Permissions", Description: "Add / delete switch permissions to / from users", }, { Permission: PermissionGetDebugInfo, Name: "Display Debug Info", Description: "Obtain debug information about the system", }, { Permission: PermissionChangeUsers, Name: "Add / Delete users", Description: "Create a new user or delete users", }, { Permission: PermissionListUsers, Name: "List users", Description: "See a list of all users", }, { Permission: PermissionRunHomescript, Name: "Run Homescript", Description: "Run predefined Homescript files or send live code to be executed by the server", }, { Permission: PermissionModifyHomescript, Name: "Modify Homescript", Description: "Create / Modify / Delete own Homescripts", }, { Permission: PermissionWildCard, Name: "Permission Wildcard *", Description: "Allows all permissions", }, } )
Functions ¶
func AddLogEvent ¶
Add a logged internal event based on `name, description, and level`
func AddNotification ¶
func AddNotification(receiverUsername string, name string, description string, priority uint8) error
Adds a new notification to a user's `inbox`, can return an error if the database fails
func AddUser ¶
Helper function to create a User which is given a set of basic permissions Will return an error if the database fails Does not check for duplicate users
func AddUserPermission ¶
func AddUserPermission(username string, permission PermissionType) (bool, error)
Adds a permission to a user, if database fails, then an error is returned Does not check for username so additional checks should be completed beforehand
func AddUserSwitchPermission ¶
Adds a given switchId to a given user The existence of the switch should be validated beforehand If this permission already resides inside the table, it is ignored and modified=false, error=nil is returned
func CheckDatabase ¶
func CheckDatabase() error
Executes a ping to the database in order to check if it is online
func CreateHardwareNode ¶
Adds a new hardware node to the database, if the node already exists (same url), its name will be updated
func CreateNewHomescript ¶
func CreateNewHomescript(homescript Homescript) error
Creates a new homescript entry
func CreateRoom ¶
Creates a new room
func CreateSwitch ¶
Creates a new switch Will return an error if the database fails
func DeleteAllNotificationsFromUser ¶
If the user requests to empty their notification area, all hist notifications will be deleted
func DeleteHomescriptById ¶
Deletes a homescript by its Id, does not check if the user has access to the homescript
func DeleteNotificationFromUserById ¶
Deletes a given notification, can return an error
func DeleteSwitch ¶
Delete a given switch after all data which depends on this switch has been deleted
func DeleteTables ¶
func DeleteTables() error
func DeleteUser ¶
Deletes a User based on a given Username, can return an error if the database fails The function does not validate the existence of this username itself, so additional checks should be done beforehand The avatar is removed in `core/user/user`
func DoesHomescriptExist ¶
Checks if a Homescript with an id exists in the database
func DoesPermissionExist ¶
Checks the validity of a given permission string
func DoesSwitchExist ¶
Returns (exists, error), err when the database fails
func DoesUserExist ¶
Returns <true> if a provided user exists If the database fails, it returns an error
func FlushAllLogs ¶
func FlushAllLogs() error
func FlushOldLogs ¶
func FlushOldLogs() error
Deletes log events older than 30 days in order to save storage space This function will later be used by a scheduler for daily jobs
func GetAvatarPathByUsername ¶
Returns the path of the avatar image of a given user, does not check if the user exists, additional checks needed beforehand
func GetPowerStateOfSwitch ¶
Returns the power state of a given switch as a boolean Does not check if the switch exists. If the switch does not exist, an error is returned
func GetUserNotificationCount ¶
Used for displaying the notification count for a given user Used in the frontend before the actual permissions are fetched
func GetUserPasswordHash ¶
Returns the password of a given user
func GetUserPermissions ¶
Returns a list of permissions assigned to a given user, if it exists
func GetUserSwitchPermissions ¶
Returns a list of strings which resemble switch permissions
func Init ¶
func Init(databaseConfig DatabaseConfig, adminPassword string) error
func InitLogger ¶
func InsertUser ¶
Creates a new user based on a the supplied `User` struct Won't panic if user already exists, but will change password
func ModifyHomescriptById ¶
func ModifyHomescriptById(id string, homescript HomescriptFrontend) error
Modifies the metadata of a given homescript Does not check the validity of the homescript's id
func RemoveAllPermissionsOfUser ¶
Removes all permissions of a given user, used when deleting a user in order to prevent foreign key failure Does not validate username, additional checks required, returns an error if the database fails
func RemoveAllSwitchPermissionsOfUser ¶
Removes all switch permission of a given user, used when deleing a user Does not validate the existence of said user
func RemoveSwitchFromPermissions ¶
Deletes all occurrences of a given switch, used if a certain switch is deleted completely
func RemoveUserPermission ¶
func RemoveUserPermission(username string, permission PermissionType) (bool, error)
Attempts to remove a provided permission from a provided user Fails if permission does not exist or if the database fails Warns and returns `false` for the `modified` boolean the user does not have the permission
func RemoveUserSwitchPermission ¶
TODO: check naming consistency of `ADD / CREATE` and `DELETE / REMOVE` Removes a switch permission from a user, but does not delete if from the switch permission list
func SetNodeOnline ¶
Updates the online / offline state of a given node (url)
func SetPowerState ¶
Used when marking a power state of a switch Does not check the validity of the switch Id The returned boolean indicates if the power state had changed
func SetUserAvatarPath ¶
Sets the path of the avatar for a given user, does not check if the user exists, additional checks needed beforehand
func UserHasPermission ¶
func UserHasPermission(username string, permission PermissionType) (bool, error)
Checks if a provided user is in possession of a provided permission, can return an error, if the database fails
Types ¶
type Camera ¶
type Camera struct {
Id int `json:"id"`
RoomId string `json:"roomId"`
Url string `json:"url"`
Name string `json:"name"`
}
Camera struct, used in `config.rooms.cameras“
type DBStatus ¶
type DBStatus struct {
OpenConnections int `json:"openConnections"`
InUse int `json:""`
Idle int `json:""`
}
func GetDatabaseStats ¶
func GetDatabaseStats() DBStatus
type DatabaseConfig ¶
type FullUser ¶
type FullUser struct {
Username string `json:"username"`
Firstname string `json:"firstname"`
Surname string `json:"surname"`
PrimaryColor string `json:"primaryColor"`
Password string `json:"password"`
AvatarPath string `json:"avatarPath"`
}
Identified by a username, has a password and an avatar path
type HardwareNode ¶
type HardwareNode struct {
Name string `json:"name"`
Online bool `json:"online"`
Enabled bool `json:"enabled"` // Can be used to temporarely deactivate a node in case of maintenance
Url string `json:"url"`
Token string `json:"token"`
}
Hardware node
func GetHardwareNodes ¶
func GetHardwareNodes() ([]HardwareNode, error)
Returns a list of hardware nodes
type Homescript ¶
type Homescript struct {
Id string `json:"id"`
Owner string `json:"owner"`
Name string `json:"name"`
Description string `json:"description"`
QuickActionsEnabled bool `json:"quickActionsEnabled"`
SchedulerEnabled bool `json:"schedulerEnabled"`
Code string `json:"code"`
}
func GetUserHomescriptById ¶
func GetUserHomescriptById(homescriptId string, username string) (Homescript, bool, error)
Returns a Homescript given its id Returns Homescript, has been found, error
func ListHomescriptFiles ¶
func ListHomescriptFiles() ([]Homescript, error)
Lists all Homescript files in the database
func ListHomescriptOfUser ¶
func ListHomescriptOfUser(username string) ([]Homescript, error)
Returns a list of homescripts owned by a given user
type HomescriptFrontend ¶
type LogEvent ¶
type LogEvent struct {
Id uint `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Level int `json:"level"`
Date time.Time `json:"date"`
}
internal logging-related
type Notification ¶
type Notification struct {
Id uint `json:"id"`
Priority uint8 `json:"priority"` // Includes 1: info, 2: warning, 3: alert
Name string `json:"name"`
Description string `json:"description"`
Date time.Time `json:"date"`
}
User notification
func GetUserNotifications ¶
func GetUserNotifications(username string) ([]Notification, error)
Used when requesting the user's permissions in the frontend Returns a list containing the permissions of a given user
type Permission ¶
type Permission struct {
Permission PermissionType `json:"permission"`
Name string `json:"name"`
Description string `json:"description"`
}
This file defines which permissions exists and describes their attributes
type PermissionType ¶
type PermissionType string
const ( PermissionAuthentication PermissionType = "authentication" PermissionSetPower PermissionType = "setPower" PermissionAddLogEvent PermissionType = "addLogEvent" PermissionDeleteLogs PermissionType = "deleteLogs" PermissionListLogs PermissionType = "listLogs" PermissionChangeAvatar PermissionType = "changeAvatar" PermissionChangeUserPermissions PermissionType = "changeUserPermissions" PermissionChangeSwitchPermissions PermissionType = "changeSwitchPermissions" PermissionGetDebugInfo PermissionType = "getDebugInfo" PermissionChangeUsers PermissionType = "changeUsers" PermissionListUsers PermissionType = "listUsers" PermissionRunHomescript PermissionType = "runHomescript" PermissionModifyHomescript PermissionType = "modifyHomescript" // Dangerous PermissionWildCard PermissionType = "*" )
Different types of permissions
type PowerState ¶
Contains the switch id and a matching boolean Used when requesting global power states
func GetPowerStates ¶
func GetPowerStates() ([]PowerState, error)
Returns a list of PowerStates Can return a database error
type Room ¶
type Room struct {
Id string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Switches []Switch `json:"switches"`
Cameras []Camera `json:"cameras"`
}
Identified by a unique Id, has a Name and Description When used in config file, the Switches slice is also populated
func ListPersonalRoomsAll ¶
Returns a complete list of rooms, includes metadata like switches
type Switch ¶
type Switch struct {
Id string `json:"id"`
Name string `json:"name"`
RoomId string `json:"roomId"`
PowerOn bool `json:"powerOn"`
}
Identified by a Switch Id, has a name and belongs to a room
func ListSwitches ¶
Returns a list of available switches with their attributes
func ListUserSwitches ¶
Same as `ListSwitches()` but takes a user sting as a filter
type User ¶
type User struct {
Username string `json:"username"`
Firstname string `json:"firstname"`
Surname string `json:"surname"`
PrimaryColor string `json:"primaryColor"`
}
func GetUserByUsername ¶
Returns a user struct based on a username, does not check if the user exists, additional checks needed beforehand