96 lines
3.1 KiB
Go
96 lines
3.1 KiB
Go
package tdesktop
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/binary"
|
|
"time"
|
|
|
|
"github.com/gotd/td/tg"
|
|
)
|
|
|
|
const (
|
|
appConfigHash = 4
|
|
countriesListHash = 1
|
|
timezonesListHash = 1
|
|
)
|
|
|
|
// AppConfig returns the fallback TDesktop startup app config used when HelpService is absent.
|
|
func AppConfig(hash int) tg.HelpAppConfigClass {
|
|
if hash == appConfigHash {
|
|
return &tg.HelpAppConfigNotModified{}
|
|
}
|
|
return &tg.HelpAppConfig{
|
|
Hash: appConfigHash,
|
|
Config: readMarkAppConfig(),
|
|
}
|
|
}
|
|
|
|
func readMarkAppConfig() *tg.JSONObject {
|
|
return &tg.JSONObject{Value: []tg.JSONObjectValue{
|
|
{Key: "chat_read_mark_size_threshold", Value: &tg.JSONNumber{Value: 50}},
|
|
{Key: "chat_read_mark_expire_period", Value: &tg.JSONNumber{Value: 604800}},
|
|
{Key: "pm_read_date_expire_period", Value: &tg.JSONNumber{Value: 604800}},
|
|
{Key: "quote_length_max", Value: &tg.JSONNumber{Value: 1024}},
|
|
{Key: "telegram_antispam_group_size_min", Value: &tg.JSONNumber{Value: 200}},
|
|
{Key: "telegram_antispam_user_id", Value: &tg.JSONString{Value: "5434988373"}},
|
|
}}
|
|
}
|
|
|
|
// TimezonesList returns a small non-empty timezone set for TDesktop business settings preloading.
|
|
func TimezonesList(hash int) tg.HelpTimezonesListClass {
|
|
if hash == timezonesListHash {
|
|
return &tg.HelpTimezonesListNotModified{}
|
|
}
|
|
return &tg.HelpTimezonesList{
|
|
Hash: timezonesListHash,
|
|
Timezones: []tg.Timezone{
|
|
{ID: "Etc/UTC", Name: "UTC", UtcOffset: 0},
|
|
{ID: "America/New_York", Name: "Eastern Time", UtcOffset: -5 * 60 * 60},
|
|
{ID: "America/Chicago", Name: "Central Time", UtcOffset: -6 * 60 * 60},
|
|
{ID: "America/Denver", Name: "Mountain Time", UtcOffset: -7 * 60 * 60},
|
|
{ID: "America/Los_Angeles", Name: "Pacific Time", UtcOffset: -8 * 60 * 60},
|
|
{ID: "Asia/Shanghai", Name: "China Standard Time", UtcOffset: 8 * 60 * 60},
|
|
},
|
|
}
|
|
}
|
|
|
|
// CountriesList returns the fallback login country list used when HelpService is absent.
|
|
func CountriesList(hash int) tg.HelpCountriesListClass {
|
|
if hash == countriesListHash {
|
|
return &tg.HelpCountriesListNotModified{}
|
|
}
|
|
return &tg.HelpCountriesList{
|
|
Hash: countriesListHash,
|
|
Countries: []tg.HelpCountry{
|
|
{
|
|
ISO2: "US",
|
|
DefaultName: "United States",
|
|
CountryCodes: []tg.HelpCountryCode{
|
|
{CountryCode: "1", Prefixes: []string{"1"}},
|
|
},
|
|
},
|
|
{
|
|
ISO2: "CN",
|
|
DefaultName: "China",
|
|
CountryCodes: []tg.HelpCountryCode{
|
|
{CountryCode: "86", Prefixes: []string{"86"}},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
// LoginToken returns a short-lived placeholder token for TDesktop's QR-login
|
|
// screen. First phase only supports phone login, but TDesktop expects this RPC
|
|
// to produce an auth.loginToken while the QR screen is visible.
|
|
func LoginToken(now time.Time, authKeyID [8]byte, sessionID int64) *tg.AuthLoginToken {
|
|
var seed [len(authKeyID) + 8 + 8]byte
|
|
copy(seed[:len(authKeyID)], authKeyID[:])
|
|
binary.LittleEndian.PutUint64(seed[len(authKeyID):], uint64(sessionID))
|
|
binary.LittleEndian.PutUint64(seed[len(authKeyID)+8:], uint64(now.UnixNano()))
|
|
token := sha256.Sum256(seed[:])
|
|
return &tg.AuthLoginToken{
|
|
Expires: int(now.Add(30 * time.Second).Unix()),
|
|
Token: token[:],
|
|
}
|
|
}
|