diff --git a/client/internal/connect.go b/client/internal/connect.go index a20557f89..c8479e409 100644 --- a/client/internal/connect.go +++ b/client/internal/connect.go @@ -249,7 +249,9 @@ func (c *ConnectClient) run( relayURL, token := parseRelayInfo(loginResp) relayManager := relayClient.NewManager(engineCtx, relayURL, myPrivateKey.PublicKey().String()) if relayURL != "" { - relayManager.UpdateToken(token) + if token != nil { + relayManager.UpdateToken(token) + } if err = relayManager.Serve(); err != nil { log.Error(err) return wrapErr(err) @@ -311,15 +313,18 @@ func (c *ConnectClient) run( return nil } -func parseRelayInfo(resp *mgmProto.LoginResponse) (string, hmac.Token) { +func parseRelayInfo(resp *mgmProto.LoginResponse) (string, *hmac.Token) { // todo remove this - if ra := peer.ForcedRelayAddress(); ra != "" { - return ra, hmac.Token{} - } + ra := peer.ForcedRelayAddress() + /* + if ra := peer.ForcedRelayAddress(); ra != "" { + return ra, nil + } + */ msg := resp.GetWiretrusteeConfig().GetRelay() if msg == nil { - return "", hmac.Token{} + return "", nil } var url string @@ -327,11 +332,14 @@ func parseRelayInfo(resp *mgmProto.LoginResponse) (string, hmac.Token) { url = msg.GetUrls()[0] } - token := hmac.Token{ + token := &hmac.Token{ Payload: msg.GetTokenPayload(), Signature: msg.GetTokenSignature(), } - return url, token + + log.Tracef("Relay URL: %s", url) + + return ra, token } func (c *ConnectClient) Engine() *Engine { diff --git a/client/internal/engine.go b/client/internal/engine.go index 10c3a9edd..9da385949 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -502,7 +502,7 @@ func (e *Engine) handleSync(update *mgmProto.SyncResponse) error { relayMsg := wCfg.GetRelay() if relayMsg != nil { - c := auth.Token{ + c := &auth.Token{ Payload: relayMsg.GetTokenPayload(), Signature: relayMsg.GetTokenSignature(), } diff --git a/relay/auth/hmac/store.go b/relay/auth/hmac/store.go index 6c0541efc..cba5b4f30 100644 --- a/relay/auth/hmac/store.go +++ b/relay/auth/hmac/store.go @@ -2,23 +2,33 @@ package hmac import ( "sync" + + log "github.com/sirupsen/logrus" ) // TokenStore is a simple in-memory store for token // With this can update the token in thread safe way type TokenStore struct { mu sync.Mutex - token Token + token []byte } -func (a *TokenStore) UpdateToken(token Token) { +func (a *TokenStore) UpdateToken(token *Token) { a.mu.Lock() 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() defer a.mu.Unlock() - return marshalToken(a.token) + return a.token } diff --git a/relay/client/client.go b/relay/client/client.go index 7846505bb..630f49708 100644 --- a/relay/client/client.go +++ b/relay/client/client.go @@ -238,12 +238,9 @@ func (c *Client) connect() error { } func (c *Client) handShake() error { - t, err := c.authTokenStore.Token() - if err != nil { - return err - } + tb := c.authTokenStore.TokenBinary() - msg, err := messages.MarshalHelloMsg(c.hashedID, t) + msg, err := messages.MarshalHelloMsg(c.hashedID, tb) if err != nil { log.Errorf("failed to marshal hello message: %s", err) return err diff --git a/relay/client/manager.go b/relay/client/manager.go index a71cdf2c3..24d564833 100644 --- a/relay/client/manager.go +++ b/relay/client/manager.go @@ -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) } diff --git a/relay/messages/message.go b/relay/messages/message.go index 95b8ed7eb..564c82e03 100644 --- a/relay/messages/message.go +++ b/relay/messages/message.go @@ -20,7 +20,7 @@ const ( 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 - MaxHandshakeSize = 90 + MaxHandshakeSize = 8192 ) var (