Fix token sending

This commit is contained in:
Zoltán Papp 2024-07-10 13:21:50 +02:00
parent 820e2feec9
commit d1b6387803
6 changed files with 36 additions and 21 deletions

View File

@ -249,7 +249,9 @@ func (c *ConnectClient) run(
relayURL, token := parseRelayInfo(loginResp) relayURL, token := parseRelayInfo(loginResp)
relayManager := relayClient.NewManager(engineCtx, relayURL, myPrivateKey.PublicKey().String()) relayManager := relayClient.NewManager(engineCtx, relayURL, myPrivateKey.PublicKey().String())
if relayURL != "" { if relayURL != "" {
relayManager.UpdateToken(token) if token != nil {
relayManager.UpdateToken(token)
}
if err = relayManager.Serve(); err != nil { if err = relayManager.Serve(); err != nil {
log.Error(err) log.Error(err)
return wrapErr(err) return wrapErr(err)
@ -311,15 +313,18 @@ func (c *ConnectClient) run(
return nil return nil
} }
func parseRelayInfo(resp *mgmProto.LoginResponse) (string, hmac.Token) { func parseRelayInfo(resp *mgmProto.LoginResponse) (string, *hmac.Token) {
// todo remove this // todo remove this
if ra := peer.ForcedRelayAddress(); ra != "" { ra := peer.ForcedRelayAddress()
return ra, hmac.Token{} /*
} if ra := peer.ForcedRelayAddress(); ra != "" {
return ra, nil
}
*/
msg := resp.GetWiretrusteeConfig().GetRelay() msg := resp.GetWiretrusteeConfig().GetRelay()
if msg == nil { if msg == nil {
return "", hmac.Token{} return "", nil
} }
var url string var url string
@ -327,11 +332,14 @@ func parseRelayInfo(resp *mgmProto.LoginResponse) (string, hmac.Token) {
url = msg.GetUrls()[0] url = msg.GetUrls()[0]
} }
token := hmac.Token{ token := &hmac.Token{
Payload: msg.GetTokenPayload(), Payload: msg.GetTokenPayload(),
Signature: msg.GetTokenSignature(), Signature: msg.GetTokenSignature(),
} }
return url, token
log.Tracef("Relay URL: %s", url)
return ra, token
} }
func (c *ConnectClient) Engine() *Engine { func (c *ConnectClient) Engine() *Engine {

View File

@ -502,7 +502,7 @@ func (e *Engine) handleSync(update *mgmProto.SyncResponse) error {
relayMsg := wCfg.GetRelay() relayMsg := wCfg.GetRelay()
if relayMsg != nil { if relayMsg != nil {
c := auth.Token{ c := &auth.Token{
Payload: relayMsg.GetTokenPayload(), Payload: relayMsg.GetTokenPayload(),
Signature: relayMsg.GetTokenSignature(), Signature: relayMsg.GetTokenSignature(),
} }

View File

@ -2,23 +2,33 @@ package hmac
import ( import (
"sync" "sync"
log "github.com/sirupsen/logrus"
) )
// TokenStore is a simple in-memory store for token // TokenStore is a simple in-memory store for token
// With this can update the token in thread safe way // With this can update the token in thread safe way
type TokenStore struct { type TokenStore struct {
mu sync.Mutex mu sync.Mutex
token Token token []byte
} }
func (a *TokenStore) UpdateToken(token Token) { func (a *TokenStore) UpdateToken(token *Token) {
a.mu.Lock() a.mu.Lock()
defer a.mu.Unlock() defer a.mu.Unlock()
a.token = token if token == nil {
return
}
t, err := marshalToken(*token)
if err != nil {
log.Errorf("failed to marshal token: %s", err)
}
a.token = t
} }
func (a *TokenStore) Token() ([]byte, error) { func (a *TokenStore) TokenBinary() []byte {
a.mu.Lock() a.mu.Lock()
defer a.mu.Unlock() defer a.mu.Unlock()
return marshalToken(a.token) return a.token
} }

View File

@ -238,12 +238,9 @@ func (c *Client) connect() error {
} }
func (c *Client) handShake() error { func (c *Client) handShake() error {
t, err := c.authTokenStore.Token() tb := c.authTokenStore.TokenBinary()
if err != nil {
return err
}
msg, err := messages.MarshalHelloMsg(c.hashedID, t) msg, err := messages.MarshalHelloMsg(c.hashedID, tb)
if err != nil { if err != nil {
log.Errorf("failed to marshal hello message: %s", err) log.Errorf("failed to marshal hello message: %s", err)
return err return err

View File

@ -265,6 +265,6 @@ func (m *Manager) notifyOnDisconnectListeners(serverAddress string) {
} }
func (m *Manager) UpdateToken(token relayAuth.Token) { func (m *Manager) UpdateToken(token *relayAuth.Token) {
m.tokenStore.UpdateToken(token) m.tokenStore.UpdateToken(token)
} }

View File

@ -20,7 +20,7 @@ const (
headerSizeTransport = sizeOfMsgType + IDSize // 1 byte for msg type, IDSize for peerID headerSizeTransport = sizeOfMsgType + IDSize // 1 byte for msg type, IDSize for peerID
headerSizeHello = sizeOfMsgType + sizeOfMagicBye + IDSize // 1 byte for msg type, 4 byte for magic header, IDSize for peerID headerSizeHello = sizeOfMsgType + sizeOfMagicBye + IDSize // 1 byte for msg type, 4 byte for magic header, IDSize for peerID
MaxHandshakeSize = 90 MaxHandshakeSize = 8192
) )
var ( var (