From ca06471d9e5c7ceec3236f340cdb6d95a31baaea Mon Sep 17 00:00:00 2001 From: Smile Rex Date: Wed, 21 Jan 2026 19:14:25 +0300 Subject: [PATCH] dsd --- auth.go | 6 ++++++ telegram.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 auth.go create mode 100644 telegram.go diff --git a/auth.go b/auth.go new file mode 100644 index 0000000..b51c5d7 --- /dev/null +++ b/auth.go @@ -0,0 +1,6 @@ +package main + +type AuthMessage struct { + Type string `json:"type"` + InitData string `json:"initData"` +} diff --git a/telegram.go b/telegram.go new file mode 100644 index 0000000..7b08809 --- /dev/null +++ b/telegram.go @@ -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 +}