Cleanup, hub updates
This commit is contained in:
		| @@ -15,7 +15,6 @@ import ( | |||||||
| 	"git.crumpington.com/lib/go/sqliteutil" | 	"git.crumpington.com/lib/go/sqliteutil" | ||||||
| 	"golang.org/x/crypto/bcrypt" | 	"golang.org/x/crypto/bcrypt" | ||||||
| 	"golang.org/x/crypto/nacl/box" | 	"golang.org/x/crypto/nacl/box" | ||||||
| 	"golang.org/x/crypto/nacl/sign" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| //go:embed migrations | //go:embed migrations | ||||||
| @@ -146,7 +145,7 @@ type PeerCreateArgs struct { | |||||||
| 	Name     string | 	Name     string | ||||||
| 	PublicIP []byte | 	PublicIP []byte | ||||||
| 	Port     uint16 | 	Port     uint16 | ||||||
| 	Mediator bool | 	Relay    bool | ||||||
| } | } | ||||||
|  |  | ||||||
| // Create the intention to add a peer. The returned code is used to complete | // Create the intention to add a peer. The returned code is used to complete | ||||||
| @@ -184,11 +183,6 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | |||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	signPubKey, signPrivKey, err := sign.GenerateKey(rand.Reader) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Get peer IP. | 	// Get peer IP. | ||||||
| 	peerIP := byte(0) | 	peerIP := byte(0) | ||||||
|  |  | ||||||
| @@ -214,9 +208,8 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | |||||||
| 		Name:     args.Name, | 		Name:     args.Name, | ||||||
| 		PublicIP: args.PublicIP, | 		PublicIP: args.PublicIP, | ||||||
| 		Port:     args.Port, | 		Port:     args.Port, | ||||||
| 		Mediator:   args.Mediator, | 		Relay:    args.Relay, | ||||||
| 		EncPubKey:  encPubKey[:], | 		PubKey:   encPubKey[:], | ||||||
| 		SignPubKey: signPubKey[:], |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := db.Peer_Insert(a.db, peer); err != nil { | 	if err := db.Peer_Insert(a.db, peer); err != nil { | ||||||
| @@ -232,11 +225,9 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | |||||||
| 		Network:    conf.VPNNetwork, | 		Network:    conf.VPNNetwork, | ||||||
| 		PublicIP:   peer.PublicIP, | 		PublicIP:   peer.PublicIP, | ||||||
| 		Port:       peer.Port, | 		Port:       peer.Port, | ||||||
| 		Mediator:    peer.Mediator, | 		Relay:   peer.Relay, | ||||||
| 		EncPubKey:   encPubKey[:], | 		PubKey:     encPubKey[:], | ||||||
| 		EncPrivKey:  encPrivKey[:], | 		PrivKey:    encPrivKey[:], | ||||||
| 		SignPubKey:  signPubKey[:], |  | ||||||
| 		SignPrivKey: signPrivKey[:], |  | ||||||
| 	}, nil | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -313,12 +313,11 @@ type Peer struct { | |||||||
| 	Name     string | 	Name     string | ||||||
| 	PublicIP []byte | 	PublicIP []byte | ||||||
| 	Port     uint16 | 	Port     uint16 | ||||||
| 	Mediator   bool | 	Relay    bool | ||||||
| 	EncPubKey  []byte | 	PubKey   []byte | ||||||
| 	SignPubKey []byte |  | ||||||
| } | } | ||||||
|  |  | ||||||
| const Peer_SelectQuery = "SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey FROM peers" | const Peer_SelectQuery = "SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Relay,PubKey FROM peers" | ||||||
|  |  | ||||||
| func Peer_Insert( | func Peer_Insert( | ||||||
| 	tx TX, | 	tx TX, | ||||||
| @@ -329,7 +328,7 @@ func Peer_Insert( | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	_, err = tx.Exec("INSERT INTO peers(PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey) VALUES(?,?,?,?,?,?,?,?,?)", row.PeerIP, row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Mediator, row.EncPubKey, row.SignPubKey) | 	_, err = tx.Exec("INSERT INTO peers(PeerIP,Version,APIKey,Name,PublicIP,Port,Relay,PubKey) VALUES(?,?,?,?,?,?,?,?)", row.PeerIP, row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Relay, row.PubKey) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -342,7 +341,7 @@ func Peer_Update( | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	result, err := tx.Exec("UPDATE peers SET Version=?,Name=?,PublicIP=?,Port=?,Mediator=? WHERE PeerIP=?", row.Version, row.Name, row.PublicIP, row.Port, row.Mediator, row.PeerIP) | 	result, err := tx.Exec("UPDATE peers SET Version=?,Name=?,PublicIP=?,Port=?,Relay=? WHERE PeerIP=?", row.Version, row.Name, row.PublicIP, row.Port, row.Relay, row.PeerIP) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| @@ -370,7 +369,7 @@ func Peer_UpdateFull( | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	result, err := tx.Exec("UPDATE peers SET Version=?,APIKey=?,Name=?,PublicIP=?,Port=?,Mediator=?,EncPubKey=?,SignPubKey=? WHERE PeerIP=?", row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Mediator, row.EncPubKey, row.SignPubKey, row.PeerIP) | 	result, err := tx.Exec("UPDATE peers SET Version=?,APIKey=?,Name=?,PublicIP=?,Port=?,Relay=?,PubKey=? WHERE PeerIP=?", row.Version, row.APIKey, row.Name, row.PublicIP, row.Port, row.Relay, row.PubKey, row.PeerIP) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| @@ -420,8 +419,8 @@ func Peer_Get( | |||||||
| 	err error, | 	err error, | ||||||
| ) { | ) { | ||||||
| 	row = &Peer{} | 	row = &Peer{} | ||||||
| 	r := tx.QueryRow("SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey FROM peers WHERE PeerIP=?", PeerIP) | 	r := tx.QueryRow("SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Relay,PubKey FROM peers WHERE PeerIP=?", PeerIP) | ||||||
| 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Relay, &row.PubKey) | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -435,7 +434,7 @@ func Peer_GetWhere( | |||||||
| ) { | ) { | ||||||
| 	row = &Peer{} | 	row = &Peer{} | ||||||
| 	r := tx.QueryRow(query, args...) | 	r := tx.QueryRow(query, args...) | ||||||
| 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Relay, &row.PubKey) | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -455,7 +454,7 @@ func Peer_Iterate( | |||||||
| 		defer rows.Close() | 		defer rows.Close() | ||||||
| 		for rows.Next() { | 		for rows.Next() { | ||||||
| 			row := &Peer{} | 			row := &Peer{} | ||||||
| 			err := rows.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | 			err := rows.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Relay, &row.PubKey) | ||||||
| 			if !yield(row, err) { | 			if !yield(row, err) { | ||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ func Peer_Sanitize(p *Peer) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if p.Port == 0 { | 	if p.Port == 0 { | ||||||
| 		p.Port = 515 | 		p.Port = 456 | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ TABLE peers OF Peer ( | |||||||
|   Name       string, |   Name       string, | ||||||
|   PublicIP   []byte, |   PublicIP   []byte, | ||||||
|   Port       uint16, |   Port       uint16, | ||||||
|   Mediator   bool, |   Relay      bool, | ||||||
|   EncPubKey  []byte NoUpdate, |   PubKey     []byte NoUpdate | ||||||
|   SignPubKey []byte NoUpdate |  | ||||||
| ); | ); | ||||||
|   | |||||||
| @@ -22,7 +22,6 @@ CREATE TABLE peers ( | |||||||
|   Name       TEXT    NOT NULL UNIQUE,      -- For humans. |   Name       TEXT    NOT NULL UNIQUE,      -- For humans. | ||||||
|   PublicIP   BLOB    NOT NULL, |   PublicIP   BLOB    NOT NULL, | ||||||
|   Port       INTEGER NOT NULL, |   Port       INTEGER NOT NULL, | ||||||
|   Mediator   INTEGER NOT NULL DEFAULT 0,   -- Boolean if peer will forward packets. Must also have public address. |   Relay      INTEGER NOT NULL DEFAULT 0,   -- Boolean if peer will forward packets. Must also have public address. | ||||||
|   EncPubKey  BLOB    NOT NULL, |   PubKey     BLOB    NOT NULL | ||||||
|   SignPubKey BLOB    NOT NULL |  | ||||||
| ) WITHOUT ROWID; | ) WITHOUT ROWID; | ||||||
|   | |||||||
| @@ -4,6 +4,8 @@ import ( | |||||||
| 	"errors" | 	"errors" | ||||||
| 	"log" | 	"log" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"net/netip" | ||||||
|  | 	"strings" | ||||||
| 	"vppn/hub/api" | 	"vppn/hub/api" | ||||||
| 	"vppn/m" | 	"vppn/m" | ||||||
|  |  | ||||||
| @@ -155,6 +157,29 @@ func (a *App) _adminPeerList(s *api.Session, w http.ResponseWriter, r *http.Requ | |||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (a *App) _adminHosts(s *api.Session, w http.ResponseWriter, r *http.Request) error { | ||||||
|  | 	conf := a.api.Config_Get() | ||||||
|  |  | ||||||
|  | 	peers, err := a.api.Peer_List() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	b := strings.Builder{} | ||||||
|  |  | ||||||
|  | 	for _, peer := range peers { | ||||||
|  | 		ip := conf.VPNNetwork | ||||||
|  | 		ip[3] = peer.PeerIP | ||||||
|  | 		b.WriteString(netip.AddrFrom4([4]byte(ip)).String()) | ||||||
|  | 		b.WriteString(" ") | ||||||
|  | 		b.WriteString(peer.Name) | ||||||
|  | 		b.WriteString("\n") | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	w.Write([]byte(b.String())) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
| func (a *App) _adminPeerCreate(s *api.Session, w http.ResponseWriter, r *http.Request) error { | func (a *App) _adminPeerCreate(s *api.Session, w http.ResponseWriter, r *http.Request) error { | ||||||
| 	return a.render("/admin-peer-create.html", w, struct{ Session *api.Session }{s}) | 	return a.render("/admin-peer-create.html", w, struct{ Session *api.Session }{s}) | ||||||
| } | } | ||||||
| @@ -167,7 +192,7 @@ func (a *App) _adminPeerCreateSubmit(s *api.Session, w http.ResponseWriter, r *h | |||||||
| 		Scan("Name", &args.Name). | 		Scan("Name", &args.Name). | ||||||
| 		Scan("PublicIP", &ipStr). | 		Scan("PublicIP", &ipStr). | ||||||
| 		Scan("Port", &args.Port). | 		Scan("Port", &args.Port). | ||||||
| 		Scan("Mediator", &args.Mediator). | 		Scan("Relay", &args.Relay). | ||||||
| 		Error() | 		Error() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| @@ -249,7 +274,7 @@ func (a *App) _adminPeerEditSubmit(s *api.Session, w http.ResponseWriter, r *htt | |||||||
| 		Scan("Name", &peer.Name). | 		Scan("Name", &peer.Name). | ||||||
| 		Scan("PublicIP", &ipStr). | 		Scan("PublicIP", &ipStr). | ||||||
| 		Scan("Port", &peer.Port). | 		Scan("Port", &peer.Port). | ||||||
| 		Scan("Mediator", &peer.Mediator). | 		Scan("Relay", &peer.Relay). | ||||||
| 		Error() | 		Error() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| @@ -311,19 +336,16 @@ func (a *App) _peerCreate(w http.ResponseWriter, r *http.Request) error { | |||||||
| func (a *App) _peerFetchState(w http.ResponseWriter, r *http.Request) error { | func (a *App) _peerFetchState(w http.ResponseWriter, r *http.Request) error { | ||||||
| 	_, apiKey, ok := r.BasicAuth() | 	_, apiKey, ok := r.BasicAuth() | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		log.Printf("1") |  | ||||||
| 		return api.ErrNotAuthorized | 		return api.ErrNotAuthorized | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	peer, err := a.api.Peer_GetByAPIKey(apiKey) | 	peer, err := a.api.Peer_GetByAPIKey(apiKey) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Printf("2") |  | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	peers, err := a.api.Peer_List() | 	peers, err := a.api.Peer_List() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Printf("3") |  | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -344,9 +366,8 @@ func (a *App) _peerFetchState(w http.ResponseWriter, r *http.Request) error { | |||||||
| 			Name:     p.Name, | 			Name:     p.Name, | ||||||
| 			PublicIP: p.PublicIP, | 			PublicIP: p.PublicIP, | ||||||
| 			Port:     p.Port, | 			Port:     p.Port, | ||||||
| 			Mediator:   p.Mediator, | 			Relay:    p.Relay, | ||||||
| 			EncPubKey:  p.EncPubKey, | 			PubKey:   p.PubKey, | ||||||
| 			SignPubKey: p.SignPubKey, |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ func (a *App) registerRoutes() { | |||||||
| 	a.handleSignedIn("GET  /admin/password/edit/", a._adminPasswordEdit) | 	a.handleSignedIn("GET  /admin/password/edit/", a._adminPasswordEdit) | ||||||
| 	a.handleSignedIn("POST /admin/password/edit/", a._adminPasswordSubmit) | 	a.handleSignedIn("POST /admin/password/edit/", a._adminPasswordSubmit) | ||||||
| 	a.handleSignedIn("GET  /admin/peer/list/", a._adminPeerList) | 	a.handleSignedIn("GET  /admin/peer/list/", a._adminPeerList) | ||||||
|  | 	a.handleSignedIn("GET  /admin/peer/hosts/", a._adminHosts) | ||||||
| 	a.handleSignedIn("GET  /admin/peer/create/", a._adminPeerCreate) | 	a.handleSignedIn("GET  /admin/peer/create/", a._adminPeerCreate) | ||||||
| 	a.handleSignedIn("POST /admin/peer/create/", a._adminPeerCreateSubmit) | 	a.handleSignedIn("POST /admin/peer/create/", a._adminPeerCreateSubmit) | ||||||
| 	a.handleSignedIn("GET  /admin/peer/intent-created/", a._adminPeerIntentCreated) | 	a.handleSignedIn("GET  /admin/peer/intent-created/", a._adminPeerIntentCreated) | ||||||
|   | |||||||
| @@ -13,12 +13,12 @@ | |||||||
|   </p> |   </p> | ||||||
|   <p> |   <p> | ||||||
|     <label>Port</label><br> |     <label>Port</label><br> | ||||||
|     <input type="number" name="Port" value="515"> |     <input type="number" name="Port" value="456"> | ||||||
|   </p> |   </p> | ||||||
|   <p> |   <p> | ||||||
|     <label> |     <label> | ||||||
|       <input type="checkbox" name="Mediator"> |       <input type="checkbox" name="Relay"> | ||||||
|       Mediator |       Relay | ||||||
|     </label> |     </label> | ||||||
|   </p> |   </p> | ||||||
|   <p> |   <p> | ||||||
|   | |||||||
| @@ -22,8 +22,8 @@ | |||||||
|   </p> |   </p> | ||||||
|   <p> |   <p> | ||||||
|     <label> |     <label> | ||||||
|       <input type="checkbox" {{if .Mediator}}checked{{end}} disabled> |       <input type="checkbox" {{if .Relay}}checked{{end}} disabled> | ||||||
|       Mediator |       Relay | ||||||
|     </label> |     </label> | ||||||
|   </p> |   </p> | ||||||
|   <p> |   <p> | ||||||
|   | |||||||
| @@ -22,8 +22,8 @@ | |||||||
|   </p> |   </p> | ||||||
|   <p> |   <p> | ||||||
|     <label> |     <label> | ||||||
|       <input type="checkbox" name="Mediator" {{if .Mediator}}checked{{end}}> |       <input type="checkbox" name="Relay" {{if .Relay}}checked{{end}}> | ||||||
|       Mediator |       Relay | ||||||
|     </label> |     </label> | ||||||
|   </p> |   </p> | ||||||
|   <p> |   <p> | ||||||
|   | |||||||
| @@ -2,7 +2,8 @@ | |||||||
| <h2>Peers</h2> | <h2>Peers</h2> | ||||||
|  |  | ||||||
| <p> | <p> | ||||||
|   <a href="/admin/peer/create/">Add Peer</a> |   <a href="/admin/peer/create/">Add Peer</a> / | ||||||
|  |   <a href="/admin/peer/hosts/">Hosts</a> | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| {{if .Peers -}} | {{if .Peers -}} | ||||||
| @@ -13,7 +14,7 @@ | |||||||
|       <th>Name</th> |       <th>Name</th> | ||||||
|       <th>Public IP</th> |       <th>Public IP</th> | ||||||
|       <th>Port</th> |       <th>Port</th> | ||||||
|       <th>Mediator</th> |       <th>Relay</th> | ||||||
|     </tr> |     </tr> | ||||||
|   </thead> |   </thead> | ||||||
|   <tbody> |   <tbody> | ||||||
| @@ -27,7 +28,7 @@ | |||||||
|     <td>{{.Name}}</td> |     <td>{{.Name}}</td> | ||||||
|     <td>{{ipToString .PublicIP}}</td> |     <td>{{ipToString .PublicIP}}</td> | ||||||
|     <td>{{.Port}}</td> |     <td>{{.Port}}</td> | ||||||
|     <td>{{if .Mediator}}T{{else}}F{{end}}</td> |     <td>{{if .Relay}}T{{else}}F{{end}}</td> | ||||||
|   </tr> |   </tr> | ||||||
|   </tbody> |   </tbody> | ||||||
|   {{- end}} |   {{- end}} | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ | |||||||
|   <tr><td>Name</td><td>{{.Name}}</td></tr> |   <tr><td>Name</td><td>{{.Name}}</td></tr> | ||||||
|   <tr><td>Public IP</td><td>{{ipToString .PublicIP}}</td></tr> |   <tr><td>Public IP</td><td>{{ipToString .PublicIP}}</td></tr> | ||||||
|   <tr><td>Port</td><td>{{.Port}}</td></tr> |   <tr><td>Port</td><td>{{.Port}}</td></tr> | ||||||
|   <tr><td>Mediator</td><td>{{if .Mediator}}T{{else}}F{{end}}</td></tr> |   <tr><td>Relay</td><td>{{if .Relay}}T{{else}}F{{end}}</td></tr> | ||||||
|   <tr><td>API Key</td><td>{{.APIKey}}</td></tr> |   <tr><td>API Key</td><td>{{.APIKey}}</td></tr> | ||||||
| </table> | </table> | ||||||
| {{- end}} | {{- end}} | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								m/models.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								m/models.go
									
									
									
									
									
								
							| @@ -8,11 +8,9 @@ type PeerConfig struct { | |||||||
| 	APIKey     string | 	APIKey     string | ||||||
| 	PublicIP   []byte | 	PublicIP   []byte | ||||||
| 	Port       uint16 | 	Port       uint16 | ||||||
| 	Mediator    bool | 	Relay      bool | ||||||
| 	EncPubKey   []byte | 	PubKey     []byte | ||||||
| 	EncPrivKey  []byte | 	PrivKey    []byte | ||||||
| 	SignPubKey  []byte |  | ||||||
| 	SignPrivKey []byte |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type Peer struct { | type Peer struct { | ||||||
| @@ -21,9 +19,8 @@ type Peer struct { | |||||||
| 	Name     string | 	Name     string | ||||||
| 	PublicIP []byte | 	PublicIP []byte | ||||||
| 	Port     uint16 | 	Port     uint16 | ||||||
| 	Mediator   bool | 	Relay    bool | ||||||
| 	EncPubKey  []byte | 	PubKey   []byte | ||||||
| 	SignPubKey []byte |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type NetworkState struct { | type NetworkState struct { | ||||||
|   | |||||||
| @@ -106,7 +106,7 @@ func main(listenIP string, port uint16) { | |||||||
| 	// Intialize globals. | 	// Intialize globals. | ||||||
| 	localIP = config.PeerIP | 	localIP = config.PeerIP | ||||||
| 	localPub = addrIsValid(config.PublicIP) | 	localPub = addrIsValid(config.PublicIP) | ||||||
| 	privateKey = config.EncPrivKey | 	privateKey = config.PrivKey | ||||||
|  |  | ||||||
| 	_iface = newIFWriter(iface) | 	_iface = newIFWriter(iface) | ||||||
| 	_conn = newConnWriter(conn) | 	_conn = newConnWriter(conn) | ||||||
|   | |||||||
| @@ -14,8 +14,6 @@ const ( | |||||||
| 	packetTypeSyn = iota + 1 | 	packetTypeSyn = iota + 1 | ||||||
| 	packetTypeSynAck | 	packetTypeSynAck | ||||||
| 	packetTypeAck | 	packetTypeAck | ||||||
| 	packetTypeAddrReq |  | ||||||
| 	packetTypeAddrResp |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // ---------------------------------------------------------------------------- | // ---------------------------------------------------------------------------- | ||||||
| @@ -34,10 +32,6 @@ func (p *controlPacket) ParsePayload(buf []byte) (err error) { | |||||||
| 		p.Payload, err = parseSynAckPacket(buf) | 		p.Payload, err = parseSynAckPacket(buf) | ||||||
| 	case packetTypeAck: | 	case packetTypeAck: | ||||||
| 		p.Payload, err = parseAckPacket(buf) | 		p.Payload, err = parseAckPacket(buf) | ||||||
| 	case packetTypeAddrReq: |  | ||||||
| 		p.Payload, err = parseAddrReqPacket(buf) |  | ||||||
| 	case packetTypeAddrResp: |  | ||||||
| 		p.Payload, err = parseAddrRespPacket(buf) |  | ||||||
| 	default: | 	default: | ||||||
| 		return errUnknownPacketType | 		return errUnknownPacketType | ||||||
| 	} | 	} | ||||||
| @@ -118,46 +112,3 @@ func parseAckPacket(buf []byte) (p ackPacket, err error) { | |||||||
| 		Error() | 		Error() | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
| // ---------------------------------------------------------------------------- |  | ||||||
|  |  | ||||||
| type addrReqPacket struct { |  | ||||||
| 	TraceID uint64 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (p addrReqPacket) Marshal(buf []byte) []byte { |  | ||||||
| 	return newBinWriter(buf). |  | ||||||
| 		Byte(packetTypeAddrReq). |  | ||||||
| 		Uint64(p.TraceID). |  | ||||||
| 		Build() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func parseAddrReqPacket(buf []byte) (p addrReqPacket, err error) { |  | ||||||
| 	err = newBinReader(buf[1:]). |  | ||||||
| 		Uint64(&p.TraceID). |  | ||||||
| 		Error() |  | ||||||
| 	return |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ---------------------------------------------------------------------------- |  | ||||||
|  |  | ||||||
| type addrRespPacket struct { |  | ||||||
| 	TraceID uint64 |  | ||||||
| 	Addr    netip.AddrPort |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (p addrRespPacket) Marshal(buf []byte) []byte { |  | ||||||
| 	return newBinWriter(buf). |  | ||||||
| 		Byte(packetTypeAddrResp). |  | ||||||
| 		Uint64(p.TraceID). |  | ||||||
| 		AddrPort(p.Addr). |  | ||||||
| 		Build() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func parseAddrRespPacket(buf []byte) (p addrRespPacket, err error) { |  | ||||||
| 	err = newBinReader(buf[1:]). |  | ||||||
| 		Uint64(&p.TraceID). |  | ||||||
| 		AddrPort(&p.Addr). |  | ||||||
| 		Error() |  | ||||||
| 	return |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ package node | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"crypto/rand" | 	"crypto/rand" | ||||||
|  | 	"net/netip" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"testing" | 	"testing" | ||||||
| ) | ) | ||||||
| @@ -25,6 +26,7 @@ func TestPacketSyn(t *testing.T) { | |||||||
| func TestPacketSynAck(t *testing.T) { | func TestPacketSynAck(t *testing.T) { | ||||||
| 	in := synAckPacket{ | 	in := synAckPacket{ | ||||||
| 		TraceID:  newTraceID(), | 		TraceID:  newTraceID(), | ||||||
|  | 		RecvAddr: netip.AddrPort{}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	out, err := parseSynAckPacket(in.Marshal(make([]byte, bufferSize))) | 	out, err := parseSynAckPacket(in.Marshal(make([]byte, bufferSize))) | ||||||
|   | |||||||
| @@ -102,12 +102,12 @@ func (s *peerSupervisor) _peerUpdate(peer *m.Peer) stateFunc { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	s.staged.IP = s.remoteIP | 	s.staged.IP = s.remoteIP | ||||||
| 	s.staged.ControlCipher = newControlCipher(privateKey, peer.EncPubKey) | 	s.staged.ControlCipher = newControlCipher(privateKey, peer.PubKey) | ||||||
| 	s.staged.DataCipher = newDataCipher() | 	s.staged.DataCipher = newDataCipher() | ||||||
|  |  | ||||||
| 	if ip, isValid := netip.AddrFromSlice(peer.PublicIP); isValid { | 	if ip, isValid := netip.AddrFromSlice(peer.PublicIP); isValid { | ||||||
| 		s.remotePub = true | 		s.remotePub = true | ||||||
| 		s.staged.Relay = peer.Mediator | 		s.staged.Relay = peer.Relay | ||||||
| 		s.staged.RemoteAddr = netip.AddrPortFrom(ip, peer.Port) | 		s.staged.RemoteAddr = netip.AddrPortFrom(ip, peer.Port) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user