dsd
This commit is contained in:
6
auth.go
Normal file
6
auth.go
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
type AuthMessage struct {
|
||||||
|
Type string `json:"type"`
|
||||||
|
InitData string `json:"initData"`
|
||||||
|
}
|
||||||
41
telegram.go
Normal file
41
telegram.go
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
|
"net/url"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func VerifyTelegramInitData(initData, botToken string) (map[string]string, bool) {
|
||||||
|
values, _ := url.ParseQuery(initData)
|
||||||
|
|
||||||
|
hash := values.Get("hash")
|
||||||
|
values.Del("hash")
|
||||||
|
|
||||||
|
var data []string
|
||||||
|
for k, v := range values {
|
||||||
|
data = append(data, k+"="+v[0])
|
||||||
|
}
|
||||||
|
sort.Strings(data)
|
||||||
|
|
||||||
|
checkString := strings.Join(data, "\n")
|
||||||
|
|
||||||
|
secret := sha256.Sum256([]byte(botToken))
|
||||||
|
h := hmac.New(sha256.New, secret[:])
|
||||||
|
h.Write([]byte(checkString))
|
||||||
|
|
||||||
|
expected := hex.EncodeToString(h.Sum(nil))
|
||||||
|
|
||||||
|
return valuesToMap(values), expected == hash
|
||||||
|
}
|
||||||
|
|
||||||
|
func valuesToMap(v url.Values) map[string]string {
|
||||||
|
m := make(map[string]string)
|
||||||
|
for k, val := range v {
|
||||||
|
m[k] = val[0]
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user