mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	Fix sending arguments to the admin socket in yggdrasilctl
				
					
				
			This commit is contained in:
		
							parent
							
								
									1de587a971
								
							
						
					
					
						commit
						c922eba2d8
					
				
					 3 changed files with 28 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -30,16 +30,16 @@ type AdminSocket struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
type AdminSocketRequest struct {
 | 
			
		||||
	Name      string            `json:"request"`
 | 
			
		||||
	Arguments map[string]string `json:"arguments,omitempty"`
 | 
			
		||||
	KeepAlive bool              `json:"keepalive,omitempty"`
 | 
			
		||||
	Name      string          `json:"request"`
 | 
			
		||||
	Arguments json.RawMessage `json:"arguments,omitempty"`
 | 
			
		||||
	KeepAlive bool            `json:"keepalive,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AdminSocketResponse struct {
 | 
			
		||||
	Status   string             `json:"status"`
 | 
			
		||||
	Error    string             `json:"error,omitempty"`
 | 
			
		||||
	Request  AdminSocketRequest `json:"request"`
 | 
			
		||||
	Response json.RawMessage    `json:"response"`
 | 
			
		||||
	Status   string          `json:"status"`
 | 
			
		||||
	Error    string          `json:"error,omitempty"`
 | 
			
		||||
	Request  json.RawMessage `json:"request"`
 | 
			
		||||
	Response json.RawMessage `json:"response"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type handler struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -298,25 +298,26 @@ func (a *AdminSocket) handleRequest(conn net.Conn) {
 | 
			
		|||
	for {
 | 
			
		||||
		var err error
 | 
			
		||||
		var buf json.RawMessage
 | 
			
		||||
		var req AdminSocketRequest
 | 
			
		||||
		var resp AdminSocketResponse
 | 
			
		||||
		if err := func() error {
 | 
			
		||||
			if err = decoder.Decode(&buf); err != nil {
 | 
			
		||||
				return fmt.Errorf("Failed to find request")
 | 
			
		||||
			}
 | 
			
		||||
			if err = json.Unmarshal(buf, &resp.Request); err != nil {
 | 
			
		||||
			if err = json.Unmarshal(buf, &req); err != nil {
 | 
			
		||||
				return fmt.Errorf("Failed to unmarshal request")
 | 
			
		||||
			}
 | 
			
		||||
			if resp.Request.Name == "" {
 | 
			
		||||
			if req.Name == "" {
 | 
			
		||||
				return fmt.Errorf("No request specified")
 | 
			
		||||
			}
 | 
			
		||||
			reqname := strings.ToLower(resp.Request.Name)
 | 
			
		||||
			reqname := strings.ToLower(req.Name)
 | 
			
		||||
			handler, ok := a.handlers[reqname]
 | 
			
		||||
			if !ok {
 | 
			
		||||
				return fmt.Errorf("Unknown action '%s', try 'list' for help", reqname)
 | 
			
		||||
			}
 | 
			
		||||
			res, err := handler.handler(buf)
 | 
			
		||||
			res, err := handler.handler(req.Arguments)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return fmt.Errorf("Handler returned error: %w", err)
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			if resp.Response, err = json.Marshal(res); err != nil {
 | 
			
		||||
				return fmt.Errorf("Failed to marshal response: %w", err)
 | 
			
		||||
| 
						 | 
				
			
			@ -330,7 +331,7 @@ func (a *AdminSocket) handleRequest(conn net.Conn) {
 | 
			
		|||
		if err = encoder.Encode(resp); err != nil {
 | 
			
		||||
			a.log.Debugln("Encode error:", err)
 | 
			
		||||
		}
 | 
			
		||||
		if !resp.Request.KeepAlive {
 | 
			
		||||
		if !req.KeepAlive {
 | 
			
		||||
			break
 | 
			
		||||
		} else {
 | 
			
		||||
			continue
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ import (
 | 
			
		|||
	"encoding/hex"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
| 
						 | 
				
			
			@ -160,11 +161,14 @@ func (m *nodeinfo) nodeInfoAdminHandler(in json.RawMessage) (interface{}, error)
 | 
			
		|||
	if err := json.Unmarshal(in, &req); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if req.Key == "" {
 | 
			
		||||
		return nil, fmt.Errorf("No remote public key supplied")
 | 
			
		||||
	}
 | 
			
		||||
	var key keyArray
 | 
			
		||||
	var kbs []byte
 | 
			
		||||
	var err error
 | 
			
		||||
	if kbs, err = hex.DecodeString(req.Key); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
		return nil, fmt.Errorf("Failed to decode public key: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	copy(key[:], kbs)
 | 
			
		||||
	ch := make(chan []byte, 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +179,7 @@ func (m *nodeinfo) nodeInfoAdminHandler(in json.RawMessage) (interface{}, error)
 | 
			
		|||
	defer timer.Stop()
 | 
			
		||||
	select {
 | 
			
		||||
	case <-timer.C:
 | 
			
		||||
		return nil, errors.New("timeout")
 | 
			
		||||
		return nil, errors.New("Timed out waiting for response")
 | 
			
		||||
	case info := <-ch:
 | 
			
		||||
		var msg json.RawMessage
 | 
			
		||||
		if err := msg.UnmarshalJSON(info); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue