diff --git a/html/index.html b/html/index.html index a9426ca..47935ef 100644 --- a/html/index.html +++ b/html/index.html @@ -25,8 +25,20 @@ } } + var croc = { + "pake": "", + }; + var sharedPassphrase = "pass123" + console.log(sharedPassphrase) + const socketMessageListener = (event) => { console.log(event); + if (event.data == "initiated") { + socket.send(JSON.stringify({ "m": "room", "ps": sharedPassphrase })) + } else if (event.data == "initpake") { + croc.pake = pakeInit(sharedPassphrase, "1"); + socket.send(JSON.stringify({ "m": "initpake", "ps": croc.pake })) + } }; const socketOpenListener = (event) => { log('connected to websockets'); diff --git a/src/webrelay/webrelay.go b/src/webrelay/webrelay.go index 12222ad..649799b 100644 --- a/src/webrelay/webrelay.go +++ b/src/webrelay/webrelay.go @@ -2,9 +2,14 @@ package webrelay import ( "bytes" + "encoding/json" "net/http" + "strings" "github.com/gorilla/websocket" + "github.com/schollz/croc/v6/src/comm" + "github.com/schollz/croc/v6/src/models" + "github.com/schollz/croc/v6/src/tcp" log "github.com/schollz/logger" ) @@ -44,17 +49,68 @@ func handlews(w http.ResponseWriter, r *http.Request) { return } -func receive(c *websocket.Conn) (err error) { - c.WriteMessage(websocket.TextMessage, []byte("ok")) +type Bundle struct { + Message string `json:"m,omitempty"` + PayloadString string `json:"ps,omitempty"` + PayloadBytes []byte `json:"pb,omitempty"` +} + +func receive(conn *websocket.Conn) (err error) { + conn.WriteMessage(websocket.TextMessage, []byte("initiated")) + + var com *comm.Comm + var banner, externalIP, connectPort string for { var message []byte - _, message, err = c.ReadMessage() + _, message, err = conn.ReadMessage() if err != nil { log.Debug("read:", err) return } - log.Debugf("recv: %s", message) + var bu Bundle + errBundle := json.Unmarshal(message, &bu) + if errBundle == nil { + if bu.Message == "room" { + com, banner, externalIP, err = tcp.ConnectToTCPServer(models.DEFAULT_RELAY, bu.PayloadString) + if err != nil { + log.Error(err) + return + } + log.Debugf("comm: %+v", com) + log.Debugf("banner: %+v", banner) + log.Debugf("externalIP: %+v", externalIP) + log.Debugf("err: %+v", err) + err = com.Send([]byte("ips?")) + if err != nil { + log.Error(err) + return + } + var data []byte + data, err = com.Receive() + if err != nil { + log.Error(err) + return + } + log.Debugf("ips data: %s", data) + err = com.Send([]byte("handshake")) + if err != nil { + log.Error(err) + return + } + connectPort = strings.Split(banner, ",")[0] + log.Debugf("connecting on %s", connectPort) + err = conn.WriteMessage(websocket.TextMessage, []byte("initpake")) + if err != nil { + log.Error(err) + return + } + } else if bu.Message == "initpake" { + log.Debug("got init pake data") + + } + + } } return }