fix(appearance): sync close Android theme wallpaper fallback
Public projection of telesrv 2c8b7cb4c20692d00017bd84f68dd11d7915ec33 with neutral appearance seed naming. Covers gramsrv#29.
This commit is contained in:
parent
af616e8c12
commit
94f3843d23
5 changed files with 170 additions and 13 deletions
|
|
@ -6,6 +6,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/iamxvbaba/td/tg"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"github.com/iamxvbaba/td/tlprofile"
|
||||
"telesrv/internal/branding"
|
||||
|
|
@ -289,6 +290,7 @@ func (r *Router) registerAccount(d *tlprofile.Dispatcher) {
|
|||
return false, tgerr400("WALLPAPER_INVALID")
|
||||
}
|
||||
if _, ok := tdesktop.LookupWallPaper(req.Wallpaper); !ok {
|
||||
r.log.Info("wallpaper reference rejected", wallpaperReferenceLogFields("account.installWallPaper", req.Wallpaper)...)
|
||||
return false, tgerr400("WALLPAPER_INVALID")
|
||||
}
|
||||
return true, nil
|
||||
|
|
@ -463,6 +465,20 @@ func (r *Router) registerAccount(d *tlprofile.Dispatcher) {
|
|||
|
||||
}
|
||||
|
||||
func wallpaperReferenceLogFields(method string, input tg.InputWallPaperClass) []zap.Field {
|
||||
fields := []zap.Field{zap.String("method", method)}
|
||||
switch wallpaper := input.(type) {
|
||||
case *tg.InputWallPaperSlug:
|
||||
return append(fields, zap.String("input_type", "inputWallPaperSlug"), zap.String("slug", wallpaper.Slug))
|
||||
case *tg.InputWallPaper:
|
||||
return append(fields, zap.String("input_type", "inputWallPaper"), zap.Int64("wallpaper_id", wallpaper.ID))
|
||||
case *tg.InputWallPaperNoFile:
|
||||
return append(fields, zap.String("input_type", "inputWallPaperNoFile"), zap.Int64("wallpaper_id", wallpaper.ID))
|
||||
default:
|
||||
return append(fields, zap.String("input_type", "unknown"))
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Router) onAccountGetPassword(ctx context.Context) (*tg.AccountPassword, error) {
|
||||
if r.deps.Account == nil {
|
||||
return tgPassword(domain.PasswordSettings{SecureRandom: []byte("telesrv-tdesktop-dev-secure-rand")}), nil
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ import (
|
|||
"github.com/iamxvbaba/td/clock"
|
||||
"github.com/iamxvbaba/td/tg"
|
||||
"go.uber.org/zap/zaptest"
|
||||
|
||||
"telesrv/internal/compat/tdesktop"
|
||||
)
|
||||
|
||||
func TestAccountGetChatThemesReturnsStaticThemes(t *testing.T) {
|
||||
|
|
@ -106,6 +108,21 @@ func TestAccountWallpaperSeedLookupAndAckRPCs(t *testing.T) {
|
|||
t.Fatalf("getWallPaper id = %d, want %d", oneWallpaper.ID, first.ID)
|
||||
}
|
||||
|
||||
defaultTheme := tdesktop.DefaultThemeList()[0]
|
||||
themeAliasInput := &tg.InputWallPaperSlug{Slug: defaultTheme.Slug}
|
||||
var aliasReq bin.Buffer
|
||||
if err := (&tg.AccountGetWallPaperRequest{Wallpaper: themeAliasInput}).Encode(&aliasReq); err != nil {
|
||||
t.Fatalf("encode getWallPaper theme alias request: %v", err)
|
||||
}
|
||||
aliasGot, err := r.Dispatch(ctx, [8]byte{}, 0, &aliasReq)
|
||||
if err != nil {
|
||||
t.Fatalf("dispatch getWallPaper theme alias: %v", err)
|
||||
}
|
||||
aliasWallpaper, ok := aliasGot.(*tg.WallPaper)
|
||||
if !ok || aliasWallpaper.Slug == defaultTheme.Slug {
|
||||
t.Fatalf("getWallPaper theme alias = %#v, want resolved wallpaper identity", aliasGot)
|
||||
}
|
||||
|
||||
nofileInput := &tg.InputWallPaperNoFile{ID: 930000000000000001}
|
||||
var nofileReq bin.Buffer
|
||||
if err := (&tg.AccountGetWallPaperRequest{Wallpaper: nofileInput}).Encode(&nofileReq); err != nil {
|
||||
|
|
@ -127,6 +144,7 @@ func TestAccountWallpaperSeedLookupAndAckRPCs(t *testing.T) {
|
|||
if err := (&tg.AccountGetMultiWallPapersRequest{Wallpapers: []tg.InputWallPaperClass{
|
||||
input,
|
||||
&tg.InputWallPaperSlug{Slug: first.Slug},
|
||||
themeAliasInput,
|
||||
nofileInput,
|
||||
}}).Encode(&multiReq); err != nil {
|
||||
t.Fatalf("encode getMultiWallPapers request: %v", err)
|
||||
|
|
@ -135,16 +153,18 @@ func TestAccountWallpaperSeedLookupAndAckRPCs(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("dispatch getMultiWallPapers: %v", err)
|
||||
}
|
||||
if vector, ok := dispatchCanonicalValue(multiGot).([]tg.WallPaperClass); !ok || len(vector) != 3 {
|
||||
t.Fatalf("getMultiWallPapers = %T %#v, want 3 wallpapers", multiGot, multiGot)
|
||||
if vector, ok := dispatchCanonicalValue(multiGot).([]tg.WallPaperClass); !ok || len(vector) != 4 {
|
||||
t.Fatalf("getMultiWallPapers = %T %#v, want 4 wallpapers", multiGot, multiGot)
|
||||
}
|
||||
|
||||
for name, request := range map[string]bin.Encoder{
|
||||
"save": &tg.AccountSaveWallPaperRequest{Wallpaper: input},
|
||||
"install": &tg.AccountInstallWallPaperRequest{Wallpaper: input},
|
||||
"save_nofile": &tg.AccountSaveWallPaperRequest{Wallpaper: nofileInput},
|
||||
"install_nofile": &tg.AccountInstallWallPaperRequest{Wallpaper: nofileInput},
|
||||
"reset": &tg.AccountResetWallPapersRequest{},
|
||||
"save": &tg.AccountSaveWallPaperRequest{Wallpaper: input},
|
||||
"install": &tg.AccountInstallWallPaperRequest{Wallpaper: input},
|
||||
"save_theme_alias": &tg.AccountSaveWallPaperRequest{Wallpaper: themeAliasInput},
|
||||
"install_theme_alias": &tg.AccountInstallWallPaperRequest{Wallpaper: themeAliasInput},
|
||||
"save_nofile": &tg.AccountSaveWallPaperRequest{Wallpaper: nofileInput},
|
||||
"install_nofile": &tg.AccountInstallWallPaperRequest{Wallpaper: nofileInput},
|
||||
"reset": &tg.AccountResetWallPapersRequest{},
|
||||
} {
|
||||
var encoded bin.Buffer
|
||||
if err := request.Encode(&encoded); err != nil {
|
||||
|
|
@ -166,6 +186,14 @@ func TestAccountWallpaperSeedLookupAndAckRPCs(t *testing.T) {
|
|||
if _, err := r.Dispatch(ctx, [8]byte{}, 0, &badReq); err == nil || !strings.Contains(err.Error(), "WALLPAPER_INVALID") {
|
||||
t.Fatalf("bad getWallPaper err = %v, want WALLPAPER_INVALID", err)
|
||||
}
|
||||
|
||||
var unknownAliasReq bin.Buffer
|
||||
if err := (&tg.AccountInstallWallPaperRequest{Wallpaper: &tg.InputWallPaperSlug{Slug: "unknown-theme-alias"}}).Encode(&unknownAliasReq); err != nil {
|
||||
t.Fatalf("encode unknown theme alias install request: %v", err)
|
||||
}
|
||||
if _, err := r.Dispatch(ctx, [8]byte{}, 0, &unknownAliasReq); err == nil || !strings.Contains(err.Error(), "WALLPAPER_INVALID") {
|
||||
t.Fatalf("unknown theme alias install err = %v, want WALLPAPER_INVALID", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPaymentsGetStarGiftCollectionsNoServiceFallbackAndValidatesPeer(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue