mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-28 22:25:07 +03:00
Define module.Module interface, update admin/tuntap/multicast modules to comply with it, fix #581
This commit is contained in:
parent
fc71624919
commit
a072e063d8
6 changed files with 108 additions and 42 deletions
|
@ -25,12 +25,12 @@ import (
|
|||
// TODO: Add authentication
|
||||
|
||||
type AdminSocket struct {
|
||||
core *yggdrasil.Core
|
||||
log *log.Logger
|
||||
reconfigure chan chan error
|
||||
listenaddr string
|
||||
listener net.Listener
|
||||
handlers map[string]handler
|
||||
core *yggdrasil.Core
|
||||
log *log.Logger
|
||||
listenaddr string
|
||||
listener net.Listener
|
||||
handlers map[string]handler
|
||||
started bool
|
||||
}
|
||||
|
||||
// Info refers to information that is returned to the admin socket handler.
|
||||
|
@ -54,25 +54,27 @@ func (a *AdminSocket) AddHandler(name string, args []string, handlerfunc func(In
|
|||
}
|
||||
|
||||
// init runs the initial admin setup.
|
||||
func (a *AdminSocket) Init(c *yggdrasil.Core, state *config.NodeState, log *log.Logger, options interface{}) {
|
||||
func (a *AdminSocket) Init(c *yggdrasil.Core, state *config.NodeState, log *log.Logger, options interface{}) error {
|
||||
a.core = c
|
||||
a.log = log
|
||||
a.reconfigure = make(chan chan error, 1)
|
||||
a.handlers = make(map[string]handler)
|
||||
go func() {
|
||||
for {
|
||||
e := <-a.reconfigure
|
||||
current, previous := state.GetCurrent(), state.GetPrevious()
|
||||
if current.AdminListen != previous.AdminListen {
|
||||
a.listenaddr = current.AdminListen
|
||||
a.Stop()
|
||||
a.Start()
|
||||
}
|
||||
e <- nil
|
||||
}
|
||||
}()
|
||||
current := state.GetCurrent()
|
||||
a.listenaddr = current.AdminListen
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *AdminSocket) UpdateConfig(config *config.NodeConfig) {
|
||||
a.log.Debugln("Reloading admin configuration...")
|
||||
if a.listenaddr != config.AdminListen {
|
||||
a.listenaddr = config.AdminListen
|
||||
if a.IsStarted() {
|
||||
a.Stop()
|
||||
}
|
||||
a.Start()
|
||||
}
|
||||
}
|
||||
|
||||
func (a *AdminSocket) SetupAdminHandlers(na *AdminSocket) {
|
||||
a.AddHandler("list", []string{}, func(in Info) (Info, error) {
|
||||
handlers := make(map[string]interface{})
|
||||
for handlername, handler := range a.handlers {
|
||||
|
@ -81,15 +83,15 @@ func (a *AdminSocket) Init(c *yggdrasil.Core, state *config.NodeState, log *log.
|
|||
return Info{"list": handlers}, nil
|
||||
})
|
||||
a.AddHandler("getSelf", []string{}, func(in Info) (Info, error) {
|
||||
ip := c.Address().String()
|
||||
subnet := c.Subnet()
|
||||
ip := a.core.Address().String()
|
||||
subnet := a.core.Subnet()
|
||||
return Info{
|
||||
"self": Info{
|
||||
ip: Info{
|
||||
"box_pub_key": c.EncryptionPublicKey(),
|
||||
"box_pub_key": a.core.EncryptionPublicKey(),
|
||||
"build_name": version.BuildName(),
|
||||
"build_version": version.BuildVersion(),
|
||||
"coords": fmt.Sprintf("%v", c.Coords()),
|
||||
"coords": fmt.Sprintf("%v", a.core.Coords()),
|
||||
"subnet": subnet.String(),
|
||||
},
|
||||
},
|
||||
|
@ -312,17 +314,24 @@ func (a *AdminSocket) Init(c *yggdrasil.Core, state *config.NodeState, log *log.
|
|||
})
|
||||
}
|
||||
|
||||
// start runs the admin API socket to listen for / respond to admin API calls.
|
||||
// Start runs the admin API socket to listen for / respond to admin API calls.
|
||||
func (a *AdminSocket) Start() error {
|
||||
if a.listenaddr != "none" && a.listenaddr != "" {
|
||||
go a.listen()
|
||||
a.started = true
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// cleans up when stopping
|
||||
// IsStarted returns true if the module has been started.
|
||||
func (a *AdminSocket) IsStarted() bool {
|
||||
return a.started
|
||||
}
|
||||
|
||||
// Stop will stop the admin API and close the socket.
|
||||
func (a *AdminSocket) Stop() error {
|
||||
if a.listener != nil {
|
||||
a.started = false
|
||||
return a.listener.Close()
|
||||
} else {
|
||||
return nil
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue