server/pkg/oauth/telegram/client.go
Chang lue Tsen 8addcc584b init: 1.0.0
2025-04-25 12:08:29 +09:00

61 lines
1.8 KiB
Go

package telegram
import (
"encoding/base64"
"encoding/json"
"fmt"
"net/url"
"strings"
)
// ParseAuthDataJson parses provided json content for AuthData
func ParseAuthDataJson(content []byte) (*AuthData, error) {
data := &AuthData{}
err := json.Unmarshal(content, data)
if err != nil {
return nil, fmt.Errorf("unmarshaling error: %w", err)
}
return data, nil
}
// ParseAuthDataBase64 decodes provided content from base64 and parses result for AuthData
func ParseAuthDataBase64(content []byte) (*AuthData, error) {
decodedBytes, err := base64.RawStdEncoding.DecodeString(string(content))
if err != nil && len(decodedBytes) == 0 {
return nil, fmt.Errorf("base64 decoding error: %w", err)
}
return ParseAuthDataJson(decodedBytes)
}
// ParseAndValidateBase64 parses base64 content for AuthData and validates it
func ParseAndValidateBase64(content []byte, botToken string) (*AuthData, error) {
authData, err := ParseAuthDataBase64(content)
if err != nil {
return nil, err
}
err = authData.Validate([]byte(botToken))
return authData, err
}
// ParseAndValidateJson parses json content for AuthData and validates it
func ParseAndValidateJson(content []byte, botToken []byte) (*AuthData, error) {
authData, err := ParseAuthDataJson(content)
if err != nil {
return nil, err
}
err = authData.Validate(botToken)
return authData, err
}
// GenerateTelegramOAuthURL generates a URL for Telegram OAuth
func GenerateTelegramOAuthURL(botToken, embed, redirect string) string {
bot := strings.Split(botToken, ":")
uri := "https://oauth.telegram.org/auth?bot_id=%s&origin=%s&embed=%s&request_access=write&return_to=%s"
parsedURL, err := url.Parse(redirect)
if err != nil {
return ""
}
return fmt.Sprintf(uri, bot[0], fmt.Sprintf("%s://%s", parsedURL.Scheme, parsedURL.Host), embed, redirect)
}