Change more things
This commit is contained in:
parent
6e7143d532
commit
27b48bc6e8
9 changed files with 42 additions and 19 deletions
|
@ -4,6 +4,7 @@ import (
|
|||
"encoding/base64"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
|
@ -49,13 +50,16 @@ func NewClient(devicePair *DevicePair, cryptor *crypto.Cryptor, logger zerolog.L
|
|||
if cryptor == nil {
|
||||
cryptor = crypto.NewCryptor(nil, nil)
|
||||
}
|
||||
jar, _ := cookiejar.New(nil)
|
||||
cli := &Client{
|
||||
Logger: logger,
|
||||
devicePair: devicePair,
|
||||
sessionHandler: sessionHandler,
|
||||
cryptor: cryptor,
|
||||
imageCryptor: &crypto.ImageCryptor{},
|
||||
http: &http.Client{},
|
||||
http: &http.Client{
|
||||
Jar: jar,
|
||||
},
|
||||
}
|
||||
sessionHandler.client = cli
|
||||
cli.instructions = NewInstructions(cli.cryptor)
|
||||
|
@ -69,6 +73,16 @@ func NewClient(devicePair *DevicePair, cryptor *crypto.Cryptor, logger zerolog.L
|
|||
return cli
|
||||
}
|
||||
|
||||
var baseURL, _ = url.Parse("https://messages.google.com/")
|
||||
|
||||
func (c *Client) GetCookies() []*http.Cookie {
|
||||
return c.http.Jar.Cookies(baseURL)
|
||||
}
|
||||
|
||||
func (c *Client) SetCookies(cookies []*http.Cookie) {
|
||||
c.http.Jar.SetCookies(baseURL, cookies)
|
||||
}
|
||||
|
||||
func (c *Client) SetEventHandler(eventHandler EventHandler) {
|
||||
if eventHandler == nil {
|
||||
eventHandler = func(_ interface{}) {}
|
||||
|
@ -200,7 +214,7 @@ func (c *Client) decryptImageData(imageId string, key []byte) ([]byte, error) {
|
|||
Date: &binary.Date{
|
||||
Year: 2023,
|
||||
Seq1: 6,
|
||||
Seq2: 8,
|
||||
Seq2: 22,
|
||||
Seq3: 4,
|
||||
Seq4: 6,
|
||||
},
|
||||
|
|
|
@ -141,7 +141,7 @@ func (c *Client) buildStartUploadPayload() (string, error) {
|
|||
Date: &binary.Date{
|
||||
Year: 2023,
|
||||
Seq1: 6,
|
||||
Seq2: 8,
|
||||
Seq2: 22,
|
||||
Seq3: 4,
|
||||
Seq4: 6,
|
||||
},
|
||||
|
|
|
@ -116,11 +116,11 @@ func (p *Pairer) RefreshPhoneRelay() {
|
|||
p.client.triggerEvent(&events.QR{URL: url})
|
||||
}
|
||||
|
||||
func (p *Pairer) GetWebEncryptionKey() {
|
||||
body, _, err2 := payload.GetWebEncryptionKey(p.client.rpc.webAuthKey)
|
||||
func (p *Pairer) GetWebEncryptionKey(oldKey []byte) []byte {
|
||||
body, _, err2 := payload.GetWebEncryptionKey(oldKey)
|
||||
if err2 != nil {
|
||||
p.client.Logger.Err(err2).Msg("web encryption key err")
|
||||
return
|
||||
return nil
|
||||
}
|
||||
//p.client.Logger.Debug().Any("keyByteLength", len(rawData.PhoneRelay.RpcKey)).Any("json", rawData).Any("base64", body).Msg("GetWebEncryptionKey Payload")
|
||||
webKeyResponse, reqErr := p.client.MakeRelayRequest(util.GET_WEB_ENCRYPTION_KEY, body)
|
||||
|
@ -131,7 +131,7 @@ func (p *Pairer) GetWebEncryptionKey() {
|
|||
defer webKeyResponse.Body.Close()
|
||||
if err2 != nil {
|
||||
p.client.Logger.Err(err2).Msg("Web encryption key read response err")
|
||||
return
|
||||
return nil
|
||||
}
|
||||
//p.client.Logger.Debug().Any("responseLength", len(responseBody)).Any("raw", responseBody).Msg("Response Body Length")
|
||||
parsedResponse := &binary.WebEncryptionKeyResponse{}
|
||||
|
@ -140,18 +140,22 @@ func (p *Pairer) GetWebEncryptionKey() {
|
|||
p.client.Logger.Err(err2).Msg("Parse webkeyresponse into proto struct error")
|
||||
}
|
||||
p.client.Logger.Debug().Any("parsedResponse", parsedResponse).Msg("WebEncryptionKeyResponse")
|
||||
p.ticker.Stop()
|
||||
reconnectErr := p.client.Reconnect(p.client.rpc.webAuthKey)
|
||||
if reconnectErr != nil {
|
||||
panic(reconnectErr)
|
||||
if p.ticker != nil {
|
||||
p.client.Logger.Info().Msg("Reconnecting")
|
||||
p.ticker.Stop()
|
||||
reconnectErr := p.client.Reconnect(p.client.rpc.webAuthKey)
|
||||
if reconnectErr != nil {
|
||||
panic(reconnectErr)
|
||||
}
|
||||
}
|
||||
return parsedResponse.GetKey()
|
||||
}
|
||||
|
||||
func (p *Pairer) pairCallback(pairData *binary.Container) {
|
||||
p.client.rpc.webAuthKey = pairData.PairDeviceData.WebAuthKeyData.WebAuthKey
|
||||
p.client.ttl = pairData.PairDeviceData.WebAuthKeyData.ValidFor
|
||||
p.client.devicePair = &DevicePair{Mobile: pairData.PairDeviceData.Mobile, Browser: pairData.PairDeviceData.Browser}
|
||||
p.client.pairer.GetWebEncryptionKey()
|
||||
p.client.pairer.GetWebEncryptionKey(p.client.rpc.webAuthKey)
|
||||
p.client.triggerEvent(&events.PairSuccessful{Container: pairData})
|
||||
p.client.pairer = nil
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ func GetWebEncryptionKey(WebPairKey []byte) ([]byte, *binary.Container, error) {
|
|||
Date: &binary.Date{
|
||||
Year: 2023,
|
||||
Seq1: 6,
|
||||
Seq2: 8,
|
||||
Seq2: 22,
|
||||
Seq3: 4,
|
||||
Seq4: 6,
|
||||
},
|
||||
|
|
|
@ -17,7 +17,7 @@ func ReceiveMessages(rpcKey []byte) ([]byte, string, error) {
|
|||
Date: &binary.Date{
|
||||
Year: 2023,
|
||||
Seq1: 6,
|
||||
Seq2: 8,
|
||||
Seq2: 22,
|
||||
Seq3: 4,
|
||||
Seq4: 6,
|
||||
},
|
||||
|
|
|
@ -14,7 +14,7 @@ func RefreshPhoneRelay(rpcKey []byte) ([]byte, *binary.Container, error) {
|
|||
Date: &binary.Date{
|
||||
Year: 2023,
|
||||
Seq1: 6,
|
||||
Seq2: 8,
|
||||
Seq2: 22,
|
||||
Seq3: 4,
|
||||
Seq4: 6,
|
||||
},
|
||||
|
|
|
@ -37,7 +37,7 @@ func RegisterPhoneRelay(jwk *crypto.JWK) ([]byte, *binary.Container, error) {
|
|||
Date: &binary.Date{
|
||||
Year: 2023,
|
||||
Seq1: 6,
|
||||
Seq2: 8,
|
||||
Seq2: 22,
|
||||
Seq3: 4,
|
||||
Seq4: 6,
|
||||
},
|
||||
|
|
|
@ -19,10 +19,13 @@ type RPC struct {
|
|||
conn io.ReadCloser
|
||||
rpcSessionID string
|
||||
webAuthKey []byte
|
||||
listenID int
|
||||
}
|
||||
|
||||
func (r *RPC) ListenReceiveMessages(payload []byte) {
|
||||
for {
|
||||
r.listenID++
|
||||
listenID := r.listenID
|
||||
for r.listenID == listenID {
|
||||
r.client.Logger.Debug().Msg("Starting new long-polling request")
|
||||
req, err := http.NewRequest("POST", util.RECEIVE_MESSAGES, bytes.NewReader(payload))
|
||||
if err != nil {
|
||||
|
@ -34,6 +37,7 @@ func (r *RPC) ListenReceiveMessages(payload []byte) {
|
|||
if reqErr != nil {
|
||||
panic(fmt.Errorf("Error making request: %v", err))
|
||||
}
|
||||
r.client.Logger.Debug().Int("statusCode", resp.StatusCode).Msg("Long polling opened")
|
||||
r.conn = resp.Body
|
||||
r.startReadingData(resp.Body)
|
||||
}
|
||||
|
@ -133,6 +137,7 @@ func (r *RPC) startReadingData(rc io.ReadCloser) {
|
|||
|
||||
func (r *RPC) CloseConnection() {
|
||||
if r.conn != nil {
|
||||
r.listenID++
|
||||
r.client.Logger.Debug().Msg("Attempting to connection...")
|
||||
r.conn.Close()
|
||||
r.conn = nil
|
||||
|
|
|
@ -74,7 +74,7 @@ func (c *Client) createAndSendRequest(instructionId int64, ttl int64, newSession
|
|||
panic(fmt.Errorf("Failed to encode data: %w", encodeErr))
|
||||
}
|
||||
messageData := payload.NewMessageData(requestId, encodedStr, instruction.RoutingOpCode, instruction.MsgType)
|
||||
authMessage := payload.NewAuthData(requestId, c.rpcKey, &binary.Date{Year: 2023, Seq1: 6, Seq2: 8, Seq3: 4, Seq4: 6})
|
||||
authMessage := payload.NewAuthData(requestId, c.rpcKey, &binary.Date{Year: 2023, Seq1: 6, Seq2: 22, Seq3: 4, Seq4: 6})
|
||||
sendMessage := payload.NewSendMessage(c.devicePair.Mobile, messageData, authMessage, ttl)
|
||||
|
||||
sentRequestID, reqErr := c.sessionHandler.completeSendMessage(encodedData.RequestID, instruction.Opcode, sendMessage)
|
||||
|
@ -139,7 +139,7 @@ func (s *SessionHandler) sendAckRequest() {
|
|||
AuthData: &binary.AuthMessage{
|
||||
RequestID: reqId,
|
||||
RpcKey: s.client.rpcKey,
|
||||
Date: &binary.Date{Year: 2023, Seq1: 6, Seq2: 8, Seq3: 4, Seq4: 6},
|
||||
Date: &binary.Date{Year: 2023, Seq1: 6, Seq2: 22, Seq3: 4, Seq4: 6},
|
||||
},
|
||||
EmptyArr: &binary.EmptyArr{},
|
||||
NoClue: nil,
|
||||
|
|
Loading…
Reference in a new issue