forked from nkeonkeo/MediaUnlockTest
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathJoyn.go
executable file
·66 lines (64 loc) · 1.82 KB
/
Joyn.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package mediaunlocktest
import (
"encoding/json"
"io"
"net/http"
"strings"
)
func Joyn(c http.Client) Result {
url := "https://auth.joyn.de/auth/anonymous"
resp, err := PostJson(c, url,
`{"client_id":"b74b9f27-a994-4c45-b7eb-5b81b1c856e7","client_name":"web","anon_device_id":"b74b9f27-a994-4c45-b7eb-5b81b1c856e7"}`,
)
if err != nil {
return Result{Status: StatusNetworkErr, Err: err}
}
defer resp.Body.Close()
b, err := io.ReadAll(resp.Body)
if err != nil {
return Result{Status: StatusNetworkErr, Err: err}
}
var res struct {
AccessToken string `json:"access_token"`
}
if err := json.Unmarshal(b, &res); err != nil {
// log.Println(err)
return Result{Status: StatusFailed, Err: err}
}
url2 := "https://api.joyn.de/content/entitlement-token"
resp2, err := PostJson(c, url2, `{"content_id":"daserste-de-hd","content_type":"LIVE"}`,
H{"authorization", "Bearer "+res.AccessToken},
H{"x-api-key", "36lp1t4wto5uu2i2nk57ywy9on1ns5yg"},
)
if err != nil {
// log.Println(err)
return Result{Status: StatusNetworkErr, Err: err}
}
defer resp2.Body.Close()
b2, err := io.ReadAll(resp2.Body)
if err != nil {
// log.Println(err)
return Result{Status: StatusNetworkErr, Err: err}
}
var res2a []struct {
Code string `json:"code"`
}
var res2b struct {
Token string `json:"entitlement_token"`
}
if strings.Contains(string(b2), "Unauthorized") {
return Result{Status: StatusErr, Err: err}
}
if err := json.Unmarshal(b2, &res2a); err != nil {
if err := json.Unmarshal(b2, &res2b); err != nil {
return Result{Status: StatusFailed, Err: err}
}
if res2b.Token != "" {
return Result{Status: StatusOK}
}
}
if res2a[0].Code == "ENT_AssetNotAvailableInCountry" {
return Result{Status: StatusNo}
}
return Result{Status: StatusUnexpected}
}