Signed-off-by: Anirudh Oppiliappan anirudh@tangled.org
+32
-7
appview/pages/funcmap.go
+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
+1
-1
appview/pages/funcmap_test.go
+4
-1
appview/pages/pages.go
+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
+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
anirudh.fi
submitted
#3
1 commit
expand
collapse
appview/pages: get avatar cid to bust cache
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
3/3 success
expand
collapse
expand 0 comments
pull request successfully merged
anirudh.fi
submitted
#2
1 commit
expand
collapse
appview/pages: get avatar cid to bust cache
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
3/3 success
expand
collapse
expand 0 comments
anirudh.fi
submitted
#1
1 commit
expand
collapse
appview/pages: get avatar cid to bust cache
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
3/3 success
expand
collapse
expand 0 comments
anirudh.fi
submitted
#0
1 commit
expand
collapse
appview/pages: get avatar cid to bust cache
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
nice one, will test!