From 0a3757b33034c62868edf6649e9c54dac967d633 Mon Sep 17 00:00:00 2001 From: Will Date: Mon, 22 Jun 2026 22:44:17 +0100 Subject: [PATCH] appview: change users ssh key url to be /{user}.keys Signed-off-by: Will --- appview/middleware/middleware.go | 1 + appview/state/router.go | 18 +++++++++++++++++- appview/state/state.go | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/appview/middleware/middleware.go b/appview/middleware/middleware.go index 040f1c18..b0becfd7 100644 --- a/appview/middleware/middleware.go +++ b/appview/middleware/middleware.go @@ -222,6 +222,7 @@ func (mw Middleware) ResolveIdent() middlewareFunc { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { origSeg := chi.URLParam(req, "user") didOrHandle := strings.TrimPrefix(origSeg, "@") + didOrHandle = strings.TrimSuffix(didOrHandle, ".keys") if slices.Contains(excluded, didOrHandle) { next.ServeHTTP(w, req) diff --git a/appview/state/router.go b/appview/state/router.go index c467acb3..0f30598b 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -60,6 +60,7 @@ func (s *State) Router() http.Handler { userRouter := s.UserRouter(&middleware) standardRouter := s.StandardRouter(&middleware) + keysRouter := s.KeysRouter(&middleware) router.HandleFunc("/*", func(w http.ResponseWriter, r *http.Request) { pat := chi.URLParam(r, "*") @@ -90,6 +91,11 @@ func (s *State) Router() http.Handler { return } + if strings.HasSuffix(firstPart, ".keys") { + keysRouter.ServeHTTP(w, r) + return + } + if userutil.IsHandle(firstPart) { userRouter.ServeHTTP(w, r) return @@ -126,6 +132,17 @@ func (s *State) Router() http.Handler { return router } +func (s *State) KeysRouter(mw *middleware.Middleware) http.Handler { + r := chi.NewRouter() + r.Use(mw.InjectBaseParams) + + r.With(mw.ResolveIdent()).Route("/{user}", func(r chi.Router) { + r.Get("/", s.Keys) + }) + + return r +} + func (s *State) UserRouter(mw *middleware.Middleware) http.Handler { r := chi.NewRouter() r.Use(mw.InjectBaseParams) @@ -256,7 +273,6 @@ func (s *State) StandardRouter(mw *middleware.Middleware) http.Handler { r.Mount("/signup", s.SignupRouter()) r.Mount("/", s.oauth.Router()) - r.Get("/keys/{user}", s.Keys) r.Get("/terms", s.TermsOfService) r.Get("/privacy", s.PrivacyPolicy) r.Get("/brand", s.Brand) diff --git a/appview/state/state.go b/appview/state/state.go index e73ff28d..c391f45f 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -418,6 +418,7 @@ func (s *State) NewsletterDismiss(w http.ResponseWriter, r *http.Request) { func (s *State) Keys(w http.ResponseWriter, r *http.Request) { user := chi.URLParam(r, "user") user = strings.TrimPrefix(user, "@") + user = strings.TrimSuffix(user, ".keys") if user == "" { w.WriteHeader(http.StatusBadRequest) -- 2.51.2