forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

appview: state: use avatar service urls in profiles

anirudh.fi 8786840e eab2518d

verified
Changed files
+23 -17
appview
+1
.gitignore
···
!.gitkeep
out/
./camo/node_modules/*
+
./avatar/node_modules/*
+10 -8
appview/config.go
···
)
type Config struct {
-
CookieSecret string `env:"TANGLED_COOKIE_SECRET, default=00000000000000000000000000000000"`
-
DbPath string `env:"TANGLED_DB_PATH, default=appview.db"`
-
ListenAddr string `env:"TANGLED_LISTEN_ADDR, default=0.0.0.0:3000"`
-
Dev bool `env:"TANGLED_DEV, default=false"`
-
JetstreamEndpoint string `env:"TANGLED_JETSTREAM_ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"`
-
ResendApiKey string `env:"TANGLED_RESEND_API_KEY"`
-
CamoHost string `env:"TANGLED_CAMO_HOST, default=https://camo.tangled.sh"`
-
CamoSharedSecret string `env:"TANGLED_CAMO_SHARED_SECRET"`
+
CookieSecret string `env:"TANGLED_COOKIE_SECRET, default=00000000000000000000000000000000"`
+
DbPath string `env:"TANGLED_DB_PATH, default=appview.db"`
+
ListenAddr string `env:"TANGLED_LISTEN_ADDR, default=0.0.0.0:3000"`
+
Dev bool `env:"TANGLED_DEV, default=false"`
+
JetstreamEndpoint string `env:"TANGLED_JETSTREAM_ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"`
+
ResendApiKey string `env:"TANGLED_RESEND_API_KEY"`
+
CamoHost string `env:"TANGLED_CAMO_HOST, default=https://camo.tangled.sh"`
+
CamoSharedSecret string `env:"TANGLED_CAMO_SHARED_SECRET"`
+
AvatarSharedSecret string `env:"TANGLED_AVATAR_SHARED_SECRET"`
+
AvatarHost string `env:"TANGLED_AVATAR_HOST, default=https://avatar.tangled.sh"`
}
func LoadConfig(ctx context.Context) (*Config, error) {
+12 -5
appview/state/profile.go
···
package state
import (
+
"crypto/hmac"
+
"crypto/sha256"
+
"encoding/hex"
"fmt"
"log"
"net/http"
···
followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String())
}
-
profileAvatarUri, err := GetAvatarUri(ident.Handle.String())
-
if err != nil {
-
log.Println("failed to fetch bsky avatar", err)
-
}
-
+
profileAvatarUri := s.GetAvatarUri(ident.Handle.String())
s.pages.ProfilePage(w, pages.ProfilePageParams{
LoggedInUser: loggedInUser,
UserDid: ident.DID.String(),
···
ProfileTimeline: timeline,
})
}
+
+
func (s *State) GetAvatarUri(handle string) string {
+
secret := s.config.AvatarSharedSecret
+
h := hmac.New(sha256.New, []byte(secret))
+
h.Write([]byte(handle))
+
signature := hex.EncodeToString(h.Sum(nil))
+
return fmt.Sprintf("%s/%s/%s", s.config.AvatarHost, signature, handle)
+
}
-4
appview/state/state.go
···
return
}
}
-
-
func GetAvatarUri(handle string) (string, error) {
-
return fmt.Sprintf("https://avatars.dog/%s@webp", handle), nil
-
}