From 4dba1f131623dd2909ad2abaa73ec30fcad26da2 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 14 Oct 2025 14:46:13 +0100 Subject: [PATCH] appview: remove `@` from URLs and interface Change-Id: ytvszwnnmymowwszkklxxxvnzqsykowk old URLs that refer to users with the `@` are redirected to the version without `@`. the leading motivation for this change is that valid atproto handles do not contain the prefix. it is purely stylistic. Signed-off-by: oppiliappan --- appview/middleware/middleware.go | 4 +- appview/pages/funcmap.go | 7 +-- appview/pages/repoinfo/repoinfo.go | 12 ++--- appview/pages/templates/layouts/repobase.html | 4 +- .../repo/fragments/cloneDropdown.html | 4 +- appview/state/router.go | 50 ++++++++++--------- appview/state/state.go | 5 +- appview/state/userutil/userutil.go | 12 ++--- 8 files changed, 50 insertions(+), 48 deletions(-) diff --git a/appview/middleware/middleware.go b/appview/middleware/middleware.go index 2d7366ab..0393a8c4 100644 --- a/appview/middleware/middleware.go +++ b/appview/middleware/middleware.go @@ -180,13 +180,13 @@ func (mw Middleware) ResolveIdent() middlewareFunc { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { didOrHandle := chi.URLParam(req, "user") + didOrHandle = strings.TrimPrefix(didOrHandle, "@") + if slices.Contains(excluded, didOrHandle) { next.ServeHTTP(w, req) return } - didOrHandle = strings.TrimPrefix(didOrHandle, "@") - id, err := mw.idResolver.ResolveIdent(req.Context(), didOrHandle) if err != nil { // invalid did or handle diff --git a/appview/pages/funcmap.go b/appview/pages/funcmap.go index 0ccb070f..5929a56f 100644 --- a/appview/pages/funcmap.go +++ b/appview/pages/funcmap.go @@ -17,6 +17,7 @@ import ( "strings" "time" + "github.com/bluesky-social/indigo/atproto/syntax" "github.com/dustin/go-humanize" "github.com/go-enry/go-enry/v2" "tangled.org/core/appview/filetree" @@ -57,7 +58,7 @@ func (p *Pages) funcMap() template.FuncMap { return "handle.invalid" } - return "@" + identity.Handle.String() + return identity.Handle.String() }, "truncateAt30": func(s string) string { if len(s) <= 30 { @@ -117,8 +118,8 @@ func (p *Pages) funcMap() template.FuncMap { return b }, "didOrHandle": func(did, handle string) string { - if handle != "" { - return fmt.Sprintf("@%s", handle) + if handle != "" && handle != syntax.HandleInvalid.String() { + return handle } else { return did } diff --git a/appview/pages/repoinfo/repoinfo.go b/appview/pages/repoinfo/repoinfo.go index eeb99b6b..2d4550ec 100644 --- a/appview/pages/repoinfo/repoinfo.go +++ b/appview/pages/repoinfo/repoinfo.go @@ -1,31 +1,29 @@ package repoinfo import ( - "fmt" "path" "slices" - "strings" "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/appview/models" "tangled.org/core/appview/state/userutil" ) -func (r RepoInfo) OwnerWithAt() string { +func (r RepoInfo) Owner() string { if r.OwnerHandle != "" { - return fmt.Sprintf("@%s", r.OwnerHandle) + return r.OwnerHandle } else { return r.OwnerDid } } func (r RepoInfo) FullName() string { - return path.Join(r.OwnerWithAt(), r.Name) + return path.Join(r.Owner(), r.Name) } func (r RepoInfo) OwnerWithoutAt() string { - if after, ok := strings.CutPrefix(r.OwnerWithAt(), "@"); ok { - return after + if r.OwnerHandle != "" { + return r.OwnerHandle } else { return userutil.FlattenDid(r.OwnerDid) } diff --git a/appview/pages/templates/layouts/repobase.html b/appview/pages/templates/layouts/repobase.html index 056c64a6..3299d60c 100644 --- a/appview/pages/templates/layouts/repobase.html +++ b/appview/pages/templates/layouts/repobase.html @@ -13,8 +13,8 @@

{{ end }}
-
- {{ .RepoInfo.OwnerWithAt }} +
+ {{ template "user/fragments/picHandleLink" .RepoInfo.OwnerDid }} / {{ .RepoInfo.Name }}
diff --git a/appview/pages/templates/repo/fragments/cloneDropdown.html b/appview/pages/templates/repo/fragments/cloneDropdown.html index 708f12af..24e1ab31 100644 --- a/appview/pages/templates/repo/fragments/cloneDropdown.html +++ b/appview/pages/templates/repo/fragments/cloneDropdown.html @@ -29,8 +29,8 @@ https://tangled.org/{{ .RepoInfo.OwnerWithAt }}/{{ .RepoInfo.Name }} + data-url="https://tangled.org/{{ resolve .RepoInfo.OwnerDid }}/{{ .RepoInfo.Name }}" + >https://tangled.org/{{ resolve .RepoInfo.OwnerDid }}/{{ .RepoInfo.Name }}