Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
unixpickle
GitHub Repository: unixpickle/kahoot-hack
Path: blob/master/kahoot/sessions_test.go
10110 views
1
package kahoot
2
3
import (
4
"bytes"
5
"io/ioutil"
6
"net"
7
"net/http"
8
"net/url"
9
"strings"
10
"testing"
11
12
"github.com/gorilla/websocket"
13
)
14
15
func TestGameSessionToken(t *testing.T) {
16
resp, err := http.Post("https://play.kahoot.it/reserve/session/", "text/plain",
17
bytes.NewReader(nil))
18
if resp != nil {
19
defer resp.Body.Close()
20
}
21
if err != nil {
22
t.Fatal("reserve session:", err)
23
}
24
pin, err := ioutil.ReadAll(resp.Body)
25
if err != nil {
26
t.Fatal("read session pin:", err)
27
}
28
29
token, err := gameSessionToken(strings.TrimSpace(string(pin)))
30
if err != nil {
31
t.Fatal("get token:", err)
32
}
33
34
// The server doesn't let us establish a WebSocket unless
35
// we present a valid session token.
36
conn, err := net.Dial("tcp", "kahoot.it:443")
37
if err != nil {
38
t.Fatal("website out of reach:", err)
39
}
40
defer conn.Close()
41
42
url, err := url.Parse("wss://kahoot.it/cometd/" + string(pin) + "/" + token)
43
if err != nil {
44
t.Fatal(err)
45
}
46
reqHeader := http.Header{}
47
reqHeader.Set("Origin", "https://kahoot.it")
48
reqHeader.Set("Cookie", "no.mobitroll.session="+string(pin))
49
ws, _, err := websocket.NewClient(conn, url, reqHeader, 100, 100)
50
defer ws.Close()
51
if err != nil {
52
t.Fatal("establish WebSocket:", err)
53
}
54
}
55
56