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