rpc: add android login startup compat
(cherry picked from commit 53904e72f7c3b96e6ae5e24196d0e551fa8aebce)
This commit is contained in:
parent
82dd2996e6
commit
294e994272
7 changed files with 127 additions and 3 deletions
|
|
@ -37,6 +37,9 @@ func (r *Router) registerAuth(d *tg.ServerDispatcher) {
|
|||
d.OnAuthDropTempAuthKeys(func(ctx context.Context, exceptauthkeys []int64) (bool, error) {
|
||||
return true, nil
|
||||
})
|
||||
d.OnAuthInitPasskeyLogin(func(ctx context.Context, req *tg.AuthInitPasskeyLoginRequest) (*tg.AuthPasskeyLoginOptions, error) {
|
||||
return &tg.AuthPasskeyLoginOptions{Options: tg.DataJSON{Data: "{}"}}, nil
|
||||
})
|
||||
d.OnAuthSendCode(r.onAuthSendCode)
|
||||
d.OnAuthResendCode(r.onAuthResendCode)
|
||||
d.OnAuthCancelCode(r.onAuthCancelCode)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,12 @@ func (r *Router) dispatchCompat(ctx context.Context, b *bin.Buffer, id uint32) (
|
|||
)
|
||||
|
||||
switch id {
|
||||
case legacyLangpackGetLangPackTypeID:
|
||||
name = "langpack.getLangPack#9ab5c58e"
|
||||
enc, err = r.handleLegacyLangpackGetLangPack(ctx, b)
|
||||
case legacyLangpackGetStringsTypeID:
|
||||
name = "langpack.getStrings#2e1ee318"
|
||||
enc, err = r.handleLegacyLangpackGetStrings(ctx, b)
|
||||
case legacyLangpackGetLanguagesTypeID:
|
||||
name = "langpack.getLanguages#800fd57d"
|
||||
enc, err = r.handleLegacyLangpackGetLanguages(ctx, b)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,13 @@ import (
|
|||
"github.com/gotd/td/tg"
|
||||
)
|
||||
|
||||
const legacyLangpackGetLanguagesTypeID uint32 = 0x800fd57d
|
||||
const (
|
||||
legacyLangpackGetLangPackTypeID uint32 = 0x9ab5c58e
|
||||
legacyLangpackGetStringsTypeID uint32 = 0x2e1ee318
|
||||
legacyLangpackGetLanguagesTypeID uint32 = 0x800fd57d
|
||||
|
||||
maxLegacyLangpackStringKeys = 512
|
||||
)
|
||||
|
||||
// registerLangpack 注册 langpack.* RPC handler。
|
||||
func (r *Router) registerLangpack(d *tg.ServerDispatcher) {
|
||||
|
|
@ -47,6 +53,59 @@ func (r *Router) registerLangpack(d *tg.ServerDispatcher) {
|
|||
})
|
||||
}
|
||||
|
||||
func (r *Router) handleLegacyLangpackGetLangPack(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) {
|
||||
if err := b.ConsumeID(legacyLangpackGetLangPackTypeID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
langCode, err := b.String()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
langPack := langPackFromClient(ctx)
|
||||
if r.deps.LangPack == nil {
|
||||
return &tg.LangPackDifference{LangCode: langCode}, nil
|
||||
}
|
||||
pack, err := r.deps.LangPack.GetLangPack(ctx, langPack, langCode)
|
||||
if err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
return tgLangPackDifference(pack), nil
|
||||
}
|
||||
|
||||
func (r *Router) handleLegacyLangpackGetStrings(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) {
|
||||
if err := b.ConsumeID(legacyLangpackGetStringsTypeID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
langCode, err := b.String()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
headerLen, err := b.VectorHeader()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if headerLen > maxLegacyLangpackStringKeys {
|
||||
return nil, limitInvalidErr()
|
||||
}
|
||||
keys := make([]string, 0, headerLen)
|
||||
for i := 0; i < headerLen; i++ {
|
||||
key, err := b.String()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
keys = append(keys, key)
|
||||
}
|
||||
langPack := langPackFromClient(ctx)
|
||||
if r.deps.LangPack == nil {
|
||||
return &tg.LangPackStringClassVector{}, nil
|
||||
}
|
||||
pack, err := r.deps.LangPack.GetStrings(ctx, langPack, langCode, keys)
|
||||
if err != nil {
|
||||
return nil, internalErr()
|
||||
}
|
||||
return &tg.LangPackStringClassVector{Elems: tgLangPackStrings(pack.Strings)}, nil
|
||||
}
|
||||
|
||||
func (r *Router) handleLegacyLangpackGetLanguages(ctx context.Context, b *bin.Buffer) (bin.Encoder, error) {
|
||||
if err := b.ConsumeID(legacyLangpackGetLanguagesTypeID); err != nil {
|
||||
return nil, err
|
||||
|
|
|
|||
|
|
@ -34,6 +34,51 @@ func TestLangpackGetLanguagesCurrentAndLegacy(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestLegacyLangpackGetLangPack(t *testing.T) {
|
||||
r := New(Config{DC: 2, IP: "127.0.0.1", Port: 2398}, Deps{}, zaptest.NewLogger(t), clock.System)
|
||||
|
||||
var in bin.Buffer
|
||||
in.PutID(legacyLangpackGetLangPackTypeID)
|
||||
in.PutString("en")
|
||||
enc, err := r.Dispatch(androidClientContext(), [8]byte{}, 0, &in)
|
||||
if err != nil {
|
||||
t.Fatalf("dispatch legacy langpack.getLangPack: %v", err)
|
||||
}
|
||||
var out bin.Buffer
|
||||
if err := enc.Encode(&out); err != nil {
|
||||
t.Fatalf("encode response: %v", err)
|
||||
}
|
||||
var diff tg.LangPackDifference
|
||||
if err := diff.Decode(&out); err != nil {
|
||||
t.Fatalf("decode response: %v", err)
|
||||
}
|
||||
if diff.LangCode != "en" {
|
||||
t.Fatalf("difference = %+v, want lang_code=en", diff)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLegacyLangpackGetStrings(t *testing.T) {
|
||||
r := New(Config{DC: 2, IP: "127.0.0.1", Port: 2398}, Deps{}, zaptest.NewLogger(t), clock.System)
|
||||
|
||||
var in bin.Buffer
|
||||
in.PutID(legacyLangpackGetStringsTypeID)
|
||||
in.PutString("en")
|
||||
in.PutVectorHeader(1)
|
||||
in.PutString("lng_intro_about")
|
||||
enc, err := r.Dispatch(androidClientContext(), [8]byte{}, 0, &in)
|
||||
if err != nil {
|
||||
t.Fatalf("dispatch legacy langpack.getStrings: %v", err)
|
||||
}
|
||||
var out bin.Buffer
|
||||
if err := enc.Encode(&out); err != nil {
|
||||
t.Fatalf("encode response: %v", err)
|
||||
}
|
||||
var strings tg.LangPackStringClassVector
|
||||
if err := strings.Decode(&out); err != nil {
|
||||
t.Fatalf("decode response: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func assertLangpackLanguages(t *testing.T, r *Router, ctx context.Context, in *bin.Buffer) {
|
||||
t.Helper()
|
||||
enc, err := r.Dispatch(ctx, [8]byte{}, 0, in)
|
||||
|
|
@ -52,3 +97,11 @@ func assertLangpackLanguages(t *testing.T, r *Router, ctx context.Context, in *b
|
|||
t.Fatalf("languages = %+v, want English entry", langs.Elems)
|
||||
}
|
||||
}
|
||||
|
||||
func androidClientContext() context.Context {
|
||||
return WithClientInfo(context.Background(), ClientInfo{
|
||||
DeviceModel: "Android",
|
||||
AppVersion: "12.7.3",
|
||||
LangCode: "en",
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -401,6 +401,7 @@ func TestTDesktopStartupRPCsEncode(t *testing.T) {
|
|||
{name: "help.getPromoData", req: &tg.HelpGetPromoDataRequest{}},
|
||||
{name: "help.getTermsOfServiceUpdate", req: &tg.HelpGetTermsOfServiceUpdateRequest{}},
|
||||
{name: "help.getPremiumPromo", req: &tg.HelpGetPremiumPromoRequest{}},
|
||||
{name: "auth.initPasskeyLogin", req: &tg.AuthInitPasskeyLoginRequest{APIID: 4, APIHash: "test"}},
|
||||
{name: "account.getPassword", req: &tg.AccountGetPasswordRequest{}},
|
||||
{name: "account.getNotifySettings", req: &tg.AccountGetNotifySettingsRequest{Peer: &tg.InputNotifyUsers{}}},
|
||||
{name: "account.resetNotifySettings", req: &tg.AccountResetNotifySettingsRequest{}},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue