package types import ( "encoding/json" "fmt" "os" "strconv" "time" ) //region AUTH type SecUser struct { Model Username string `json:"username"` Password string `json:"password"` Email string `json:"email"` Groups []*SecGroup `json:"groups" gorm:"many2many:sec_user_groups;"` } type SecGroup struct { Model Code string `json:"code"` Name string `json:"name"` //Users []*SecUser `json:"users" gorm:"many2many:sec_user_groups;"` Perms []*SecPerm `json:"perms" gorm:"many2many:sec_group_perms;"` } type SecPerm struct { Model Code string `json:"code"` Name string `json:"name"` Value string `json:"value"` //Groups []*SecGroup `json:"groups" gorm:"many2many:group_perms;"` } type Session struct { Model Username string SessionID string Perms string } //endregion AUTH type Feature struct { Model Name string `json:"name" yaml:"name"` Desc string `json:"desc" yaml:"desc"` Repo uint `json:"repo"` Alias string `json:"alias"` } type Robot struct { Feature } type App struct { Feature IsNative *bool } type Service struct { Feature Ipcid string `json:"ipcid"` Env string `json:"env" yaml:"env"` Enabled *bool `yaml:"enabled" json:"enabled"` Image string `yaml:"image" json:"image"` Delay int `yaml:"delay" json:"delay"` Pid int `json:"pid" yaml:"-"` Hostname string `json:"hostname" yaml:"hostname"` Gui bool `json:"gui" yaml:"gui"` Public bool `json:"public" yaml:"public"` } type Runtime struct { Feature Path string `json:"path" yaml:"path"` } type Repo struct { Model Feature string `json:"feature" yaml:"feature"` Name string `json:"name" yaml:"name"` Url string `json:"repo"` Alias string `json:"alias"` Cred uint `json:"cred"` LocalDir string `json:"local_dir"` Status string `json:"status"` } type ReplayDescriptor struct { Feature string `json:"feature" yaml:"feature"` ReplayID string `json:"replay_id" yaml:"replay_id"` Name string `json:"name" yaml:"name"` Desc string `json:"desc" yaml:"desc"` Runner string `json:"runner" yaml:"runner"` Main string `json:"main" yaml:"main"` Args []string `json:"args" yaml:"args"` Env map[string]string `json:"env" yaml:"env"` InstallScript string `json:"install_script" yaml:"install_script"` UninstallScript string `json:"uninstall_script" yaml:"uninstall_script"` AbortScript string `json:"abort_script" yaml:"abort_script"` Id string `json:"id" yaml:"-"` LocalDir string `json:"local_dir" yaml:"-"` RepoID uint `json:"repo_id" yaml:"-"` QueueID uint `json:"queue_id" yaml:"-"` Config map[string]string `json:"config" yaml:"config"` Alias string `json:"alias" yaml:"alias"` Autostart bool `json:"autostart" yaml:"autostart"` Hostname string `json:"hostname" yaml:"hostname"` Ipcid string `json:"ipcid"` Gui bool `json:"gui" yaml:"gui"` Public bool `json:"public" yaml:"public"` Link string `json:"link" yaml:"link"` //This prop allows redirect of repos } type NotifyRequest struct { Title string Msg string } type Model struct { ID uint `gorm:"primarykey" json:"id"` } //type Model simpledb.SimplePersistent type Menu struct { Model Name string `json:"name"` Label string `json:"label"` Tooltip string `json:"tooltip"` Target string `json:"target"` Index int `json:"index" gorm:"column:menuindex"` Enabled *bool `json:"enabled"` } type Config struct { Model K string `json:"k"` V string `json:"v"` T string `json:"t"` Repo uint `json:"repo"` } func (c *Config) AsInt64() int64 { i, err := strconv.ParseInt(c.V, 10, 64) if err != nil { return 0 } return i } func (c *Config) AsInt32() int32 { i, err := strconv.ParseInt(c.V, 10, 32) if err != nil { return 0 } return int32(i) } func (c *Config) AsUint() uint { i, err := strconv.ParseInt(c.V, 10, 32) if err != nil { return 0 } return uint(i) } func (c *Config) AsInt() int { i, err := strconv.ParseInt(c.V, 10, 16) if err != nil { return 0 } return int(i) } func (c *Config) AsFloat64() float64 { i, err := strconv.ParseFloat(c.V, 64) if err != nil { return 0 } return i } func (c *Config) AsFloat32() float32 { i, err := strconv.ParseFloat(c.V, 32) if err != nil { return 0 } return float32(i) } func (c *Config) AsBool() bool { return c.V == "true" || c.V == "1" || c.V == "t" } func (c *Config) AsJson(i interface{}) error { return json.Unmarshal([]byte(c.V), i) } type Credentials struct { Model Name string `json:"name"` User string `json:"user"` Password string `json:"password"` Sshkey string `json:"sshkey"` } type Log struct { Model Alias string `json:"alias,omitempty"` Title string `json:"title,omitempty"` Tags string `json:"tags,omitempty"` Dtlog time.Time `json:"dtlog"` Dtlogend time.Time `json:"dtlogend"` Data []byte `json:"data,omitempty"` Err string `json:"err,omitempty"` History string `json:"history,omitempty"` } func (l *Log) Write(p []byte) (n int, err error) { os.Stdout.Write([]byte(fmt.Sprintf("- %s\n", string(p)))) l.AddHistory(string(p)) return len(p), nil } func (l *Log) AddHistory(s string) { s = fmt.Sprintf("* %s: %s", time.Now().Format("02/01/06 - 15:04:05"), s) if l.History == "" { l.History = s } else { l.History = l.History + "\n" + s } } type LogQuery struct { From time.Time `json:"from"` Until time.Time `json:"until"` Limit int `json:"limit"` Title string `json:"title"` Alias string `json:"alias"` Tags string `json:"tags"` } type Job struct { Model Name string `json:"name"` Code string `json:"code"` File string `json:"file"` Notes string `json:"notes"` } type Route struct { Model From string `json:"from"` Host string `json:"host"` To string `json:"to"` Desc string `json:"desc"` Enabled *bool `json:"enabled"` Index string `json:"index"` HeadersJson string `json:"headers_json"` Permissions string `json:"permissions"` PermArr []string `json:"-" gorm:"-"` } type Queue struct { Model Job uint `json:"job"` Ready bool `json:"ready"` Processed bool `json:"processed"` ProcessedAt time.Time `json:"processed_at"` Request []byte } //type QueueData struct { // Model // Qid uint // Request []byte //} type CryptoKey struct { Model Defkey bool Name string Pub []byte Priv []byte } type Options struct { ID string `json:"id"` Value string `json:"value"` } //type Version struct { // Model // Job string `json:"job"` // Ver string `json:"ver"` // Notes string `json:"notes"` //} // //type VersionData struct { // Model // Vid uint `json:"vid"` // Data []byte `json:"data"` //} type Cron struct { Model Cron string `json:"cron"` JobCode uint `json:"job"` Enabled *bool `json:"enabled"` Data string `json:"data"` Comments string `json:"comments"` } //type Resource struct { // Model // Name string `json:"name"` // Mime string `json:"mime"` // Len int `json:"len"` //} // //type ResourceContent struct { // Model // Resid uint `json:"resid"` // Content []byte `json:"content"` //} type License struct { Model Owner string `json:"owner"` RobotID string `json:"robot_id"` MachineID string `json:"machine_id"` UID string `json:"uid"` Alias string `json:"alias"` } type KV struct { ID string `gorm:"primarykey" json:"id"` V string `json:"v"` } /* @API */ type VerCheckRequest struct { Chan string `json:"chan"` Os string `json:"os"` Arch string `json:"arch"` Data map[string]string `json:"data"` } /* @API */ type VerCheckResponse struct { Data map[string]string `json:"data"` } /* @API */ type VerGetRequest struct { Os string `json:"os"` Chan string `json:"chan"` Arch string `json:"arch"` Id string `json:"id"` } /* @API */ type VerGetResponse struct { Data []byte `json:"data"` } type SQLRequest struct { Sql string `json:"sql"` } type SQLResponse struct { Data interface{} `json:"data"` Err string `json:"err"` } type SecUserChOwnPassRequest struct { Oldpass string `json:"oldpass"` Newpass string `json:"newpass"` } type LoginRequest struct { Username string Password string } type RecipeItem struct { Url string `json:"url" yaml:"url"` User string `json:"user" yaml:"user"` Password string `json:"password" yaml:"password"` Sshkey string `json:"sshkey" yaml:"sshkey"` } type Recipe struct { User string `json:"user" yaml:"user"` Password string `json:"password" yaml:"password"` Sshkey string `json:"sshkey" yaml:"sshkey"` LicUser string `json:"licuser" yaml:"licuser"` License string `json:"license" yaml:"license"` Alias string `json:"alias" yaml:"alias"` Items []RecipeItem `json:"items" yaml:"items"` } type PubSubMsg struct { Msg string Data interface{} } type PubSubMsgRunnerFinishData struct { Err error Desc *ReplayDescriptor } type Series struct { Serie string `json:"serie"` When time.Time `json:"when"` Value float64 `json:"value"` Sec int `json:"sec"` Min int `json:"min"` Hour int `json:"hour"` Day int `json:"day"` Month int `json:"month"` Year int `json:"year"` } func (s *Series) SetTime(t time.Time) { s.When = t s.Day = t.Day() s.Hour = t.Hour() s.Min = t.Minute() s.Sec = t.Second() s.Month = int(t.Month()) s.Year = t.Year() }