WIP
This commit is contained in:
		| @@ -144,7 +144,7 @@ func (a *API) Session_SignIn(s *Session, pwd string) error { | ||||
|  | ||||
| type PeerCreateArgs struct { | ||||
| 	Name     string | ||||
| 	IP       []byte | ||||
| 	PublicIP []byte | ||||
| 	Port     uint16 | ||||
| 	Mediator bool | ||||
| } | ||||
| @@ -209,9 +209,10 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | ||||
|  | ||||
| 	peer := &Peer{ | ||||
| 		PeerIP:     peerIP, | ||||
| 		Version:    idgen.NextID(0), | ||||
| 		APIKey:     idgen.NewToken(), | ||||
| 		Name:       args.Name, | ||||
| 		IP:         args.IP, | ||||
| 		PublicIP:   args.PublicIP, | ||||
| 		Port:       args.Port, | ||||
| 		Mediator:   args.Mediator, | ||||
| 		EncPubKey:  encPubKey[:], | ||||
| @@ -229,7 +230,7 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | ||||
| 		HubAddress:  conf.HubAddress, | ||||
| 		APIKey:      peer.APIKey, | ||||
| 		Network:     conf.VPNNetwork, | ||||
| 		IP:          peer.IP, | ||||
| 		PublicIP:    peer.PublicIP, | ||||
| 		Port:        peer.Port, | ||||
| 		Mediator:    peer.Mediator, | ||||
| 		EncPubKey:   encPubKey[:], | ||||
| @@ -240,6 +241,10 @@ func (a *API) Peer_Create(creationCode string) (*m.PeerConfig, error) { | ||||
| } | ||||
|  | ||||
| func (a *API) Peer_Update(p *Peer) error { | ||||
| 	a.lock.Lock() | ||||
| 	defer a.lock.Unlock() | ||||
|  | ||||
| 	p.Version = idgen.NextID(0) | ||||
| 	return db.Peer_Update(a.db, p) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -308,16 +308,17 @@ func Session_List( | ||||
|  | ||||
| type Peer struct { | ||||
| 	PeerIP     byte | ||||
| 	Version    int64 | ||||
| 	APIKey     string | ||||
| 	Name       string | ||||
| 	IP         []byte | ||||
| 	PublicIP   []byte | ||||
| 	Port       uint16 | ||||
| 	Mediator   bool | ||||
| 	EncPubKey  []byte | ||||
| 	SignPubKey []byte | ||||
| } | ||||
|  | ||||
| const Peer_SelectQuery = "SELECT PeerIP,APIKey,Name,IP,Port,Mediator,EncPubKey,SignPubKey FROM peers" | ||||
| const Peer_SelectQuery = "SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey FROM peers" | ||||
|  | ||||
| func Peer_Insert( | ||||
| 	tx TX, | ||||
| @@ -328,7 +329,7 @@ func Peer_Insert( | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	_, err = tx.Exec("INSERT INTO peers(PeerIP,APIKey,Name,IP,Port,Mediator,EncPubKey,SignPubKey) VALUES(?,?,?,?,?,?,?,?)", row.PeerIP, row.APIKey, row.Name, row.IP, row.Port, row.Mediator, row.EncPubKey, row.SignPubKey) | ||||
| 	_, 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) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -341,7 +342,7 @@ func Peer_Update( | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	result, err := tx.Exec("UPDATE peers SET Name=?,IP=?,Port=?,Mediator=? WHERE PeerIP=?", row.Name, row.IP, row.Port, row.Mediator, row.PeerIP) | ||||
| 	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) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -369,7 +370,7 @@ func Peer_UpdateFull( | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	result, err := tx.Exec("UPDATE peers SET APIKey=?,Name=?,IP=?,Port=?,Mediator=?,EncPubKey=?,SignPubKey=? WHERE PeerIP=?", row.APIKey, row.Name, row.IP, row.Port, row.Mediator, row.EncPubKey, row.SignPubKey, row.PeerIP) | ||||
| 	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) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -419,8 +420,8 @@ func Peer_Get( | ||||
| 	err error, | ||||
| ) { | ||||
| 	row = &Peer{} | ||||
| 	r := tx.QueryRow("SELECT PeerIP,APIKey,Name,IP,Port,Mediator,EncPubKey,SignPubKey FROM peers WHERE PeerIP=?", PeerIP) | ||||
| 	err = r.Scan(&row.PeerIP, &row.APIKey, &row.Name, &row.IP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 	r := tx.QueryRow("SELECT PeerIP,Version,APIKey,Name,PublicIP,Port,Mediator,EncPubKey,SignPubKey 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) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| @@ -434,7 +435,7 @@ func Peer_GetWhere( | ||||
| ) { | ||||
| 	row = &Peer{} | ||||
| 	r := tx.QueryRow(query, args...) | ||||
| 	err = r.Scan(&row.PeerIP, &row.APIKey, &row.Name, &row.IP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 	err = r.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| @@ -454,7 +455,7 @@ func Peer_Iterate( | ||||
| 		defer rows.Close() | ||||
| 		for rows.Next() { | ||||
| 			row := &Peer{} | ||||
| 			err := rows.Scan(&row.PeerIP, &row.APIKey, &row.Name, &row.IP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 			err := rows.Scan(&row.PeerIP, &row.Version, &row.APIKey, &row.Name, &row.PublicIP, &row.Port, &row.Mediator, &row.EncPubKey, &row.SignPubKey) | ||||
| 			if !yield(row, err) { | ||||
| 				return | ||||
| 			} | ||||
|   | ||||
| @@ -44,10 +44,10 @@ func Session_Validate(s *Session) error { | ||||
|  | ||||
| func Peer_Sanitize(p *Peer) { | ||||
| 	p.Name = strings.TrimSpace(p.Name) | ||||
| 	if len(p.IP) != 0 { | ||||
| 		addr, ok := netip.AddrFromSlice(p.IP) | ||||
| 	if len(p.PublicIP) != 0 { | ||||
| 		addr, ok := netip.AddrFromSlice(p.PublicIP) | ||||
| 		if ok && addr.Is4() { | ||||
| 			p.IP = addr.AsSlice() | ||||
| 			p.PublicIP = addr.AsSlice() | ||||
| 		} | ||||
| 	} | ||||
| 	if p.Port == 0 { | ||||
| @@ -56,8 +56,8 @@ func Peer_Sanitize(p *Peer) { | ||||
| } | ||||
|  | ||||
| func Peer_Validate(p *Peer) error { | ||||
| 	if len(p.IP) > 0 { | ||||
| 		_, ok := netip.AddrFromSlice(p.IP) | ||||
| 	if len(p.PublicIP) > 0 { | ||||
| 		_, ok := netip.AddrFromSlice(p.PublicIP) | ||||
| 		if !ok { | ||||
| 			return ErrInvalidIP | ||||
| 		} | ||||
|   | ||||
| @@ -15,9 +15,10 @@ TABLE sessions OF Session NoUpdate ( | ||||
|  | ||||
| TABLE peers OF Peer ( | ||||
|   PeerIP     byte PK, | ||||
|   Version    int64, | ||||
|   APIKey     string NoUpdate, | ||||
|   Name       string, | ||||
|   IP         []byte, | ||||
|   PublicIP   []byte, | ||||
|   Port       uint16, | ||||
|   Mediator   bool, | ||||
|   EncPubKey  []byte NoUpdate, | ||||
|   | ||||
| @@ -17,9 +17,10 @@ CREATE INDEX sessions_last_seen_index ON sessions(LastSeenAt); | ||||
|  | ||||
| CREATE TABLE peers ( | ||||
|   PeerIP     INTEGER NOT NULL PRIMARY KEY, -- Final byte. | ||||
|   Version    INTEGER NOT NULL, | ||||
|   APIKey     TEXT    NOT NULL UNIQUE, | ||||
|   Name       TEXT    NOT NULL UNIQUE,      -- For humans. | ||||
|   IP         BLOB    NOT NULL, | ||||
|   PublicIP   BLOB    NOT NULL, | ||||
|   Port       INTEGER NOT NULL, | ||||
|   Mediator   INTEGER NOT NULL DEFAULT 0,   -- Boolean if peer will forward packets. Must also have public address. | ||||
|   EncPubKey  BLOB    NOT NULL, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user