Documentation
¶
Index ¶
- Constants
- Variables
- func LoginHandler(loginWay TokenExtractor, sendWay TokenSender, token string, ttl time.Duration) http.Handler
- func LoginRequiredMiddleware(extractor TokenExtractor, token string, ttl time.Duration) func(next http.Handler) http.Handler
- func SendCookie(data TelegramUserData, w http.ResponseWriter)
- func SendJson(data TelegramUserData, w http.ResponseWriter)
- func SendPlainText(data TelegramUserData, w http.ResponseWriter)
- type ContextKey
- type TelegramUserData
- func FromAuthorizationHeader(r *http.Request) (TelegramUserData, error)
- func FromContext(r *http.Request) (TelegramUserData, error)
- func FromCookie(r *http.Request) (TelegramUserData, error)
- func FromJSON(r *http.Request) (TelegramUserData, error)
- func FromTokenString(token string) (TelegramUserData, error)
- func FromURL(r *http.Request) (TelegramUserData, error)
- type TokenExtractor
- type TokenSender
Constants ¶
const CookieTokenName string = "tgauth-token"
const TokenSeparator string = "$" // Fields separator for token string
Variables ¶
var ( ErrNoData = errors.New("no telegram data") ErrBadToken = errors.New("bad token") )
Functions ¶
func LoginHandler ¶
func LoginHandler(loginWay TokenExtractor, sendWay TokenSender, token string, ttl time.Duration) http.Handler
func LoginRequiredMiddleware ¶
func SendCookie ¶ added in v1.1.0
func SendCookie(data TelegramUserData, w http.ResponseWriter)
SendCookie set cookie with name CookieTokenName and value token
func SendJson ¶ added in v1.1.0
func SendJson(data TelegramUserData, w http.ResponseWriter)
SendJson send token as a json {"token": "<token>"}
func SendPlainText ¶ added in v1.1.0
func SendPlainText(data TelegramUserData, w http.ResponseWriter)
SendPlainText send token as a plain text in response body
Types ¶
type ContextKey ¶
type ContextKey string
ContextKey used for avoid collision in context
const ContextUserKey ContextKey = "tgauth-user-data" // key for storing user in context
type TelegramUserData ¶
type TelegramUserData struct { TGID int64 `json:"id"` // telegram id FirstName string `json:"first_name"` // first name LastName string `json:"last_name"` // last name Username string `json:"username"` // username PhotoURL string `json:"photo_url"` // photo url AuthDate int64 `json:"auth_date"` // auth date UNIX timestamp Hash string `json:"hash"` // hash }
TelegramUserData - https://core.telegram.org/widgets/login#receiving-authorization-data
func FromAuthorizationHeader ¶ added in v1.1.0
func FromAuthorizationHeader(r *http.Request) (TelegramUserData, error)
FromCookie extract TelegramUserData from cookie with name CookieTokenName
func FromContext ¶
func FromContext(r *http.Request) (TelegramUserData, error)
FromContext Get TelegramUserData that middleware put in context.
func FromCookie ¶ added in v1.1.0
func FromCookie(r *http.Request) (TelegramUserData, error)
FromCookie extract TelegramUserData from cookie with name CookieTokenName
func FromJSON ¶
func FromJSON(r *http.Request) (TelegramUserData, error)
FromJSON TelegramUserData from body of request.
It doesn't check is data valid, all invalid/empty fields will be ignored. If data is invalid, user will not pass authorisation check.
func FromTokenString ¶
func FromTokenString(token string) (TelegramUserData, error)
FromTokenString parse a TelegramUserData struct from a token string.
The token string is expected to be in the format:
{tg_id}{sep}{first_name}{sep}{last_name}{sep}{username}{sep}{photo_url}{sep}{auth_date}{sep}{hash}
Where {sep} is the TokenSeparator constant.
func FromURL ¶
func FromURL(r *http.Request) (TelegramUserData, error)
FromURL TelegramUserData from query of request
It doesn't check is data valid, all invalid/empty fields will be ignored. If data is invalid, user will not pass authorisation check.
func (*TelegramUserData) GenerateHash ¶
func (u *TelegramUserData) GenerateHash(token string) string
Generate hash from TelegramUserData.
Use this for send TelegramUserData not from telegram widget. Telegram bots for example.
func (*TelegramUserData) IsExpiredData ¶
func (u *TelegramUserData) IsExpiredData(ttl time.Duration) bool
IsExpiredDate Check ttl of telegram data. Return true if data is expired.
func (*TelegramUserData) IsTelegramAuthorization ¶
func (u *TelegramUserData) IsTelegramAuthorization(token string) bool
IsTelegramAuthorization
https://core.telegram.org/widgets/login#checking-authorization
func (*TelegramUserData) TokenString ¶
func (u *TelegramUserData) TokenString() string
type TokenExtractor ¶ added in v1.1.0
type TokenExtractor func(r *http.Request) (TelegramUserData, error)
TokenExtractor func that can extract TelegramUserData from request
type TokenSender ¶ added in v1.1.0
type TokenSender func(data TelegramUserData, w http.ResponseWriter)
TokenSender func that write token in response