Monorepo for Tangled tangled.org

appview/pages: get avatar cid to bust cache #1008

merged opened by anirudh.fi targeting master from icy/tolqpt
Labels

None yet.

assignee

None yet.

Participants 2
AT URI
at://did:plc:hwevmowznbiukdf6uk5dwrrq/sh.tangled.repo.pull/3mcwzeogt6m22
+38 -10
Diff #3
+32 -7
appview/pages/funcmap.go
··· 26 26 "github.com/go-enry/go-enry/v2" 27 27 "github.com/yuin/goldmark" 28 28 emoji "github.com/yuin/goldmark-emoji" 29 + "tangled.org/core/appview/db" 29 30 "tangled.org/core/appview/models" 30 31 "tangled.org/core/appview/oauth" 31 32 "tangled.org/core/appview/pages/markup" ··· 445 446 return identity.Handle.String() 446 447 } 447 448 448 - func (p *Pages) AvatarUrl(handle, size string) string { 449 - handle = strings.TrimPrefix(handle, "@") 449 + func (p *Pages) AvatarUrl(actor, size string) string { 450 + actor = strings.TrimPrefix(actor, "@") 450 451 451 - handle = p.resolveDid(handle) 452 + identity, err := p.resolver.ResolveIdent(context.Background(), actor) 453 + var did string 454 + if err != nil { 455 + did = actor 456 + } else { 457 + did = identity.DID.String() 458 + } 452 459 453 460 secret := p.avatar.SharedSecret 454 461 h := hmac.New(sha256.New, []byte(secret)) 455 - h.Write([]byte(handle)) 462 + h.Write([]byte(did)) 456 463 signature := hex.EncodeToString(h.Sum(nil)) 457 464 458 - sizeArg := "" 465 + // Get avatar CID for cache busting 466 + profile, err := db.GetProfile(p.db, did) 467 + version := "" 468 + if err == nil && profile != nil && profile.Avatar != "" { 469 + // Use first 8 chars of avatar CID as version 470 + if len(profile.Avatar) > 8 { 471 + version = profile.Avatar[:8] 472 + } else { 473 + version = profile.Avatar 474 + } 475 + } 476 + 477 + baseUrl := fmt.Sprintf("%s/%s/%s", p.avatar.Host, signature, did) 459 478 if size != "" { 460 - sizeArg = fmt.Sprintf("size=%s", size) 479 + if version != "" { 480 + return fmt.Sprintf("%s?size=%s&v=%s", baseUrl, size, version) 481 + } 482 + return fmt.Sprintf("%s?size=%s", baseUrl, size) 483 + } 484 + if version != "" { 485 + return fmt.Sprintf("%s?v=%s", baseUrl, version) 461 486 } 462 - return fmt.Sprintf("%s/%s/%s?%s", p.avatar.Host, signature, handle, sizeArg) 487 + return baseUrl 463 488 } 464 489 465 490 func (p *Pages) icon(name string, classes []string) (template.HTML, error) {
+1 -1
appview/pages/funcmap_test.go
··· 22 22 } 23 23 for _, tt := range tests { 24 24 t.Run(tt.name, func(t *testing.T) { 25 - p := NewPages(tt.config, tt.res, tt.l) 25 + p := NewPages(tt.config, tt.res, nil, tt.l) 26 26 got := p.funcMap() 27 27 // TODO: update the condition below to compare got with tt.want. 28 28 if true {
+4 -1
appview/pages/pages.go
··· 19 19 "tangled.org/core/api/tangled" 20 20 "tangled.org/core/appview/commitverify" 21 21 "tangled.org/core/appview/config" 22 + "tangled.org/core/appview/db" 22 23 "tangled.org/core/appview/models" 23 24 "tangled.org/core/appview/oauth" 24 25 "tangled.org/core/appview/pages/markup" ··· 42 43 43 44 avatar config.AvatarConfig 44 45 resolver *idresolver.Resolver 46 + db *db.DB 45 47 dev bool 46 48 embedFS fs.FS 47 49 templateDir string // Path to templates on disk for dev mode ··· 49 51 logger *slog.Logger 50 52 } 51 53 52 - func NewPages(config *config.Config, res *idresolver.Resolver, logger *slog.Logger) *Pages { 54 + func NewPages(config *config.Config, res *idresolver.Resolver, database *db.DB, logger *slog.Logger) *Pages { 53 55 // initialized with safe defaults, can be overriden per use 54 56 rctx := &markup.RenderContext{ 55 57 IsDev: config.Core.Dev, ··· 66 68 avatar: config.Avatar, 67 69 rctx: rctx, 68 70 resolver: res, 71 + db: database, 69 72 templateDir: "appview/pages", 70 73 logger: logger, 71 74 }
+1 -1
appview/state/state.go
··· 92 92 return nil, fmt.Errorf("failed to create posthog client: %w", err) 93 93 } 94 94 95 - pages := pages.NewPages(config, res, log.SubLogger(logger, "pages")) 95 + pages := pages.NewPages(config, res, d, log.SubLogger(logger, "pages")) 96 96 oauth, err := oauth.New(config, posthog, d, enforcer, res, log.SubLogger(logger, "oauth")) 97 97 if err != nil { 98 98 return nil, fmt.Errorf("failed to start oauth handler: %w", err)

History

4 rounds 1 comment
sign up or login to add to the discussion
1 commit
expand
appview/pages: get avatar cid to bust cache
3/3 success
expand
expand 0 comments
pull request successfully merged
1 commit
expand
appview/pages: get avatar cid to bust cache
3/3 success
expand
expand 0 comments
1 commit
expand
appview/pages: get avatar cid to bust cache
3/3 success
expand
expand 0 comments
1 commit
expand
appview/pages: get avatar cid to bust cache
3/3 success
expand
expand 1 comment

nice one, will test!