diff --git a/session/module.go b/session/module.go index b57b7b59..1f2c9563 100644 --- a/session/module.go +++ b/session/module.go @@ -22,6 +22,14 @@ type Module interface { Stop() error } +type JSONModule struct { + Name string `json:"name"` + Description string `json:"description"` + Author string `json:"author"` + Parameters map[string]*ModuleParam `json:"parameters"` + Running bool `json:"running"` +} + type SessionModule struct { Name string `json:"name"` Session *Session `json:"-"` diff --git a/session/session.go b/session/session.go index 5ac7ac0f..f07a8356 100644 --- a/session/session.go +++ b/session/session.go @@ -1,6 +1,7 @@ package session import ( + "encoding/json" "errors" "fmt" "net" @@ -40,28 +41,42 @@ var ( type UnknownCommandCallback func(cmd string) bool +type ModuleList []Module + type Session struct { - Options core.Options `json:"options"` - Interface *network.Endpoint `json:"interface"` - Gateway *network.Endpoint `json:"gateway"` - Firewall firewall.FirewallManager `json:"-"` - Env *Environment `json:"env"` - Lan *network.LAN `json:"lan"` - WiFi *network.WiFi `json:"wifi"` - BLE *network.BLE `json:"ble"` - Queue *packets.Queue `json:"packets"` - Input *readline.Instance `json:"-"` - StartedAt time.Time `json:"started_at"` - Active bool `json:"active"` - GPS nmea.GNGGA `json:"gps"` - Prompt Prompt `json:"-"` + Options core.Options `json:"options"` + Interface *network.Endpoint `json:"interface"` + Gateway *network.Endpoint `json:"gateway"` + Env *Environment `json:"env"` + Lan *network.LAN `json:"lan"` + WiFi *network.WiFi `json:"wifi"` + BLE *network.BLE `json:"ble"` + Queue *packets.Queue `json:"packets"` + StartedAt time.Time `json:"started_at"` + Active bool `json:"active"` + GPS nmea.GNGGA `json:"gps"` + Modules ModuleList `json:"modules"` - CoreHandlers []CommandHandler `json:"-"` - Modules []Module `json:"-"` + Input *readline.Instance `json:"-"` + Prompt Prompt `json:"-"` + CoreHandlers []CommandHandler `json:"-"` + Events *EventPool `json:"-"` + UnkCmdCallback UnknownCommandCallback `json:"-"` + Firewall firewall.FirewallManager `json:"-"` +} - Events *EventPool `json:"-"` - - UnkCmdCallback UnknownCommandCallback `json:"-"` +func (mm ModuleList) MarshalJSON() ([]byte, error) { + mods := []JSONModule{} + for _, m := range mm { + mods = append(mods, JSONModule{ + Name: m.Name(), + Description: m.Description(), + Author: m.Author(), + Parameters: m.Parameters(), + Running: m.Running(), + }) + } + return json.Marshal(mods) } func New() (*Session, error) {