diff --git a/appview/resolver.go b/appview/idresolver/resolver.go similarity index 94% rename from appview/resolver.go rename to appview/idresolver/resolver.go index eab4c919..7ce01191 100644 --- a/appview/resolver.go +++ b/appview/idresolver/resolver.go @@ -1,4 +1,4 @@ -package appview +package idresolver import ( "context" @@ -11,6 +11,7 @@ import ( "github.com/bluesky-social/indigo/atproto/identity/redisdir" "github.com/bluesky-social/indigo/atproto/syntax" "github.com/carlmjohnson/versioninfo" + "tangled.sh/tangled.sh/core/appview" ) type Resolver struct { @@ -52,7 +53,7 @@ func DefaultResolver() *Resolver { } } -func RedisResolver(config RedisConfig) (*Resolver, error) { +func RedisResolver(config appview.RedisConfig) (*Resolver, error) { directory, err := RedisDirectory(config.ToURL()) if err != nil { return nil, err diff --git a/appview/middleware/middleware.go b/appview/middleware/middleware.go index cfb2f313..bed438d6 100644 --- a/appview/middleware/middleware.go +++ b/appview/middleware/middleware.go @@ -12,8 +12,8 @@ import ( "github.com/bluesky-social/indigo/atproto/identity" "github.com/go-chi/chi/v5" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" + "tangled.sh/tangled.sh/core/appview/idresolver" "tangled.sh/tangled.sh/core/appview/oauth" "tangled.sh/tangled.sh/core/appview/pages" "tangled.sh/tangled.sh/core/appview/pagination" @@ -26,17 +26,17 @@ type Middleware struct { db *db.DB enforcer *rbac.Enforcer repoResolver *reporesolver.RepoResolver - resolver *appview.Resolver + idResolver *idresolver.Resolver pages *pages.Pages } -func New(oauth *oauth.OAuth, db *db.DB, enforcer *rbac.Enforcer, repoResolver *reporesolver.RepoResolver, resolver *appview.Resolver, pages *pages.Pages) Middleware { +func New(oauth *oauth.OAuth, db *db.DB, enforcer *rbac.Enforcer, repoResolver *reporesolver.RepoResolver, idResolver *idresolver.Resolver, pages *pages.Pages) Middleware { return Middleware{ oauth: oauth, db: db, enforcer: enforcer, repoResolver: repoResolver, - resolver: resolver, + idResolver: idResolver, pages: pages, } } @@ -188,7 +188,7 @@ func (mw Middleware) ResolveIdent() middlewareFunc { return } - id, err := mw.resolver.ResolveIdent(req.Context(), didOrHandle) + id, err := mw.idResolver.ResolveIdent(req.Context(), didOrHandle) if err != nil { // invalid did or handle log.Println("failed to resolve did/handle:", err) diff --git a/appview/oauth/handler/handler.go b/appview/oauth/handler/handler.go index b407f49e..a66d6cdf 100644 --- a/appview/oauth/handler/handler.go +++ b/appview/oauth/handler/handler.go @@ -15,6 +15,7 @@ import ( "tangled.sh/icyphox.sh/atproto-oauth/helpers" "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" + "tangled.sh/tangled.sh/core/appview/idresolver" "tangled.sh/tangled.sh/core/appview/middleware" "tangled.sh/tangled.sh/core/appview/oauth" "tangled.sh/tangled.sh/core/appview/oauth/client" @@ -28,14 +29,14 @@ const ( ) type OAuthHandler struct { - Config *appview.Config - Pages *pages.Pages - Resolver *appview.Resolver - Db *db.DB - Store *sessions.CookieStore - OAuth *oauth.OAuth - Enforcer *rbac.Enforcer - Posthog posthog.Client + Config *appview.Config + Pages *pages.Pages + Idresolver *idresolver.Resolver + Db *db.DB + Store *sessions.CookieStore + OAuth *oauth.OAuth + Enforcer *rbac.Enforcer + Posthog posthog.Client } func (o *OAuthHandler) Router() http.Handler { @@ -81,7 +82,7 @@ func (o *OAuthHandler) login(w http.ResponseWriter, r *http.Request) { case http.MethodPost: handle := strings.TrimPrefix(r.FormValue("handle"), "@") - resolved, err := o.Resolver.ResolveIdent(r.Context(), handle) + resolved, err := o.Idresolver.ResolveIdent(r.Context(), handle) if err != nil { log.Println("failed to resolve handle:", err) o.Pages.Notice(w, "login-msg", fmt.Sprintf("\"%s\" is an invalid handle.", handle)) diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index ae3361f5..5de8eddc 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -16,6 +16,7 @@ import ( "tangled.sh/tangled.sh/core/api/tangled" "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" + "tangled.sh/tangled.sh/core/appview/idresolver" "tangled.sh/tangled.sh/core/appview/oauth" "tangled.sh/tangled.sh/core/appview/pages" "tangled.sh/tangled.sh/core/appview/reporesolver" @@ -36,14 +37,14 @@ type Pulls struct { oauth *oauth.OAuth repoResolver *reporesolver.RepoResolver pages *pages.Pages - resolver *appview.Resolver + idResolver *idresolver.Resolver db *db.DB config *appview.Config posthog posthog.Client } -func New(oauth *oauth.OAuth, repoResolver *reporesolver.RepoResolver, pages *pages.Pages, resolver *appview.Resolver, db *db.DB, config *appview.Config) *Pulls { - return &Pulls{oauth: oauth, repoResolver: repoResolver, pages: pages, resolver: resolver, db: db, config: config} +func New(oauth *oauth.OAuth, repoResolver *reporesolver.RepoResolver, pages *pages.Pages, resolver *idresolver.Resolver, db *db.DB, config *appview.Config) *Pulls { + return &Pulls{oauth: oauth, repoResolver: repoResolver, pages: pages, idResolver: resolver, db: db, config: config} } // htmx fragment @@ -133,7 +134,7 @@ func (s *Pulls) RepoSinglePull(w http.ResponseWriter, r *http.Request) { } } - resolvedIds := s.resolver.ResolveIdents(r.Context(), identsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -310,7 +311,7 @@ func (s *Pulls) RepoPullPatch(w http.ResponseWriter, r *http.Request) { } identsToResolve := []string{pull.OwnerDid} - resolvedIds := s.resolver.ResolveIdents(r.Context(), identsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -367,7 +368,7 @@ func (s *Pulls) RepoPullInterdiff(w http.ResponseWriter, r *http.Request) { } identsToResolve := []string{pull.OwnerDid} - resolvedIds := s.resolver.ResolveIdents(r.Context(), identsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -421,7 +422,7 @@ func (s *Pulls) RepoPullPatchRaw(w http.ResponseWriter, r *http.Request) { } identsToResolve := []string{pull.OwnerDid} - resolvedIds := s.resolver.ResolveIdents(r.Context(), identsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -483,7 +484,7 @@ func (s *Pulls) RepoPulls(w http.ResponseWriter, r *http.Request) { for i, pull := range pulls { identsToResolve[i] = pull.OwnerDid } - resolvedIds := s.resolver.ResolveIdents(r.Context(), identsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -1855,7 +1856,7 @@ func (s *Pulls) MergePull(w http.ResponseWriter, r *http.Request) { return } - ident, err := s.resolver.ResolveIdent(r.Context(), pull.OwnerDid) + ident, err := s.idResolver.ResolveIdent(r.Context(), pull.OwnerDid) if err != nil { log.Printf("resolving identity: %s", err) w.WriteHeader(http.StatusNotFound) diff --git a/appview/reporesolver/resolver.go b/appview/reporesolver/resolver.go index 3d7b8622..40e42d5a 100644 --- a/appview/reporesolver/resolver.go +++ b/appview/reporesolver/resolver.go @@ -17,6 +17,7 @@ import ( "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" + "tangled.sh/tangled.sh/core/appview/idresolver" "tangled.sh/tangled.sh/core/appview/oauth" "tangled.sh/tangled.sh/core/appview/pages" "tangled.sh/tangled.sh/core/appview/pages/repoinfo" @@ -38,14 +39,14 @@ type ResolvedRepo struct { } type RepoResolver struct { - config *appview.Config - enforcer *rbac.Enforcer - resolver *appview.Resolver - execer db.Execer + config *appview.Config + enforcer *rbac.Enforcer + idResolver *idresolver.Resolver + execer db.Execer } -func New(config *appview.Config, enforcer *rbac.Enforcer, resolver *appview.Resolver, execer db.Execer) *RepoResolver { - return &RepoResolver{config: config, enforcer: enforcer, resolver: resolver, execer: execer} +func New(config *appview.Config, enforcer *rbac.Enforcer, resolver *idresolver.Resolver, execer db.Execer) *RepoResolver { + return &RepoResolver{config: config, enforcer: enforcer, idResolver: resolver, execer: execer} } func (rr *RepoResolver) Resolve(r *http.Request) (*ResolvedRepo, error) { @@ -169,7 +170,7 @@ func (f *ResolvedRepo) Collaborators(ctx context.Context) ([]pages.Collaborator, identsToResolve[i] = collab.Did } - resolvedIdents := f.rr.resolver.ResolveIdents(ctx, identsToResolve) + resolvedIdents := f.rr.idResolver.ResolveIdents(ctx, identsToResolve) for i, resolved := range resolvedIdents { if resolved != nil { collaborators[i].Handle = resolved.Handle.String() @@ -216,7 +217,7 @@ func (f *ResolvedRepo) RepoInfo(user *oauth.User) repoinfo.RepoInfo { var sourceHandle *identity.Identity if sourceRepo != nil { - sourceHandle, err = f.rr.resolver.ResolveIdent(context.Background(), sourceRepo.Did) + sourceHandle, err = f.rr.idResolver.ResolveIdent(context.Background(), sourceRepo.Did) if err != nil { log.Println("failed to resolve source repo", err) } diff --git a/appview/state/follow.go b/appview/state/follow.go index 335472ab..4c1a1766 100644 --- a/appview/state/follow.go +++ b/appview/state/follow.go @@ -23,7 +23,7 @@ func (s *State) Follow(w http.ResponseWriter, r *http.Request) { return } - subjectIdent, err := s.resolver.ResolveIdent(r.Context(), subject) + subjectIdent, err := s.idResolver.ResolveIdent(r.Context(), subject) if err != nil { log.Println("failed to follow, invalid did") } diff --git a/appview/state/profile.go b/appview/state/profile.go index 9a00530f..0590651e 100644 --- a/appview/state/profile.go +++ b/appview/state/profile.go @@ -105,7 +105,7 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { } } - resolvedIds := s.resolver.ResolveIdents(r.Context(), didsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -415,7 +415,7 @@ func (s *State) EditPinsFragment(w http.ResponseWriter, r *http.Request) { for _, r := range allRepos { didsToResolve = append(didsToResolve, r.Did) } - resolvedIds := s.resolver.ResolveIdents(r.Context(), didsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { diff --git a/appview/state/repo.go b/appview/state/repo.go index db602027..e80c4089 100644 --- a/appview/state/repo.go +++ b/appview/state/repo.go @@ -699,7 +699,7 @@ func (s *State) AddCollaborator(w http.ResponseWriter, r *http.Request) { return } - collaboratorIdent, err := s.resolver.ResolveIdent(r.Context(), collaborator) + collaboratorIdent, err := s.idResolver.ResolveIdent(r.Context(), collaborator) if err != nil { w.Write([]byte("failed to resolve collaborator did to a handle")) return @@ -993,7 +993,7 @@ func (s *State) RepoSingleIssue(w http.ResponseWriter, r *http.Request) { return } - issueOwnerIdent, err := s.resolver.ResolveIdent(r.Context(), issue.OwnerDid) + issueOwnerIdent, err := s.idResolver.ResolveIdent(r.Context(), issue.OwnerDid) if err != nil { log.Println("failed to resolve issue owner", err) } @@ -1002,7 +1002,7 @@ func (s *State) RepoSingleIssue(w http.ResponseWriter, r *http.Request) { for i, comment := range comments { identsToResolve[i] = comment.OwnerDid } - resolvedIds := s.resolver.ResolveIdents(r.Context(), identsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -1269,7 +1269,7 @@ func (s *State) IssueComment(w http.ResponseWriter, r *http.Request) { return } - identity, err := s.resolver.ResolveIdent(r.Context(), comment.OwnerDid) + identity, err := s.idResolver.ResolveIdent(r.Context(), comment.OwnerDid) if err != nil { log.Println("failed to resolve did") return @@ -1550,7 +1550,7 @@ func (s *State) RepoIssues(w http.ResponseWriter, r *http.Request) { for i, issue := range issues { identsToResolve[i] = issue.OwnerDid } - resolvedIds := s.resolver.ResolveIdents(r.Context(), identsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { diff --git a/appview/state/repo_util.go b/appview/state/repo_util.go index 394760bb..f59587ca 100644 --- a/appview/state/repo_util.go +++ b/appview/state/repo_util.go @@ -67,7 +67,7 @@ func EmailToDidOrHandle(s *State, emails []string) map[string]string { for _, v := range emailToDid { dids = append(dids, v) } - resolvedIdents := s.resolver.ResolveIdents(context.Background(), dids) + resolvedIdents := s.idResolver.ResolveIdents(context.Background(), dids) didHandleMap := make(map[string]string) for _, identity := range resolvedIdents { diff --git a/appview/state/router.go b/appview/state/router.go index 0b3ecd1c..51fbfb1e 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -20,7 +20,7 @@ func (s *State) Router() http.Handler { s.db, s.enforcer, s.repoResolver, - s.resolver, + s.idResolver, s.pages, ) @@ -238,14 +238,14 @@ func (s *State) StandardRouter(mw *middleware.Middleware) http.Handler { func (s *State) OAuthRouter() http.Handler { oauth := &oauthhandler.OAuthHandler{ - Config: s.config, - Pages: s.pages, - Resolver: s.resolver, - Db: s.db, - Store: sessions.NewCookieStore([]byte(s.config.Core.CookieSecret)), - OAuth: s.oauth, - Enforcer: s.enforcer, - Posthog: s.posthog, + Config: s.config, + Pages: s.pages, + Idresolver: s.idResolver, + Db: s.db, + Store: sessions.NewCookieStore([]byte(s.config.Core.CookieSecret)), + OAuth: s.oauth, + Enforcer: s.enforcer, + Posthog: s.posthog, } return oauth.Router() @@ -263,6 +263,6 @@ func (s *State) SettingsRouter() http.Handler { } func (s *State) PullsRouter(mw *middleware.Middleware) http.Handler { - pulls := pulls.New(s.oauth, s.repoResolver, s.pages, s.resolver, s.db, s.config) + pulls := pulls.New(s.oauth, s.repoResolver, s.pages, s.idResolver, s.db, s.config) return pulls.Router(mw) } diff --git a/appview/state/state.go b/appview/state/state.go index bb5e2706..9743ff3c 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -21,6 +21,7 @@ import ( "tangled.sh/tangled.sh/core/api/tangled" "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" + "tangled.sh/tangled.sh/core/appview/idresolver" "tangled.sh/tangled.sh/core/appview/oauth" "tangled.sh/tangled.sh/core/appview/pages" "tangled.sh/tangled.sh/core/appview/reporesolver" @@ -35,7 +36,7 @@ type State struct { enforcer *rbac.Enforcer tidClock syntax.TIDClock pages *pages.Pages - resolver *appview.Resolver + idResolver *idresolver.Resolver posthog posthog.Client jc *jetstream.JetstreamClient config *appview.Config @@ -57,10 +58,10 @@ func Make(config *appview.Config) (*State, error) { pgs := pages.NewPages(config) - resolver, err := appview.RedisResolver(config.Redis) + res, err := idresolver.RedisResolver(config.Redis) if err != nil { log.Printf("failed to create redis resolver: %v", err) - resolver = appview.DefaultResolver() + res = idresolver.DefaultResolver() } oauth := oauth.NewOAuth(d, config) @@ -70,7 +71,7 @@ func Make(config *appview.Config) (*State, error) { return nil, fmt.Errorf("failed to create posthog client: %w", err) } - repoResolver := reporesolver.New(config, enforcer, resolver, d) + repoResolver := reporesolver.New(config, enforcer, res, d) wrapper := db.DbWrapper{d} jc, err := jetstream.NewJetstreamClient( @@ -102,7 +103,7 @@ func Make(config *appview.Config) (*State, error) { enforcer, clock, pgs, - resolver, + res, posthog, jc, config, @@ -147,7 +148,7 @@ func (s *State) Timeline(w http.ResponseWriter, r *http.Request) { } } - resolvedIds := s.resolver.ResolveIdents(r.Context(), didsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -211,7 +212,7 @@ func (s *State) Keys(w http.ResponseWriter, r *http.Request) { return } - id, err := s.resolver.ResolveIdent(r.Context(), user) + id, err := s.idResolver.ResolveIdent(r.Context(), user) if err != nil { w.WriteHeader(http.StatusInternalServerError) return @@ -381,7 +382,7 @@ func (s *State) KnotServerInfo(w http.ResponseWriter, r *http.Request) { didsToResolve = append(didsToResolve, m) } didsToResolve = append(didsToResolve, reg.ByDid) - resolvedIds := s.resolver.ResolveIdents(r.Context(), didsToResolve) + resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve) didHandleMap := make(map[string]string) for _, identity := range resolvedIds { if !identity.Handle.IsInvalidHandle() { @@ -453,7 +454,7 @@ func (s *State) AddMember(w http.ResponseWriter, r *http.Request) { return } - subjectIdentity, err := s.resolver.ResolveIdent(r.Context(), subjectIdentifier) + subjectIdentity, err := s.idResolver.ResolveIdent(r.Context(), subjectIdentifier) if err != nil { w.Write([]byte("failed to resolve member did to a handle")) return diff --git a/cmd/repoguard/main.go b/cmd/repoguard/main.go index 025577fe..c9e8ded9 100644 --- a/cmd/repoguard/main.go +++ b/cmd/repoguard/main.go @@ -13,7 +13,7 @@ import ( "time" securejoin "github.com/cyphar/filepath-securejoin" - "tangled.sh/tangled.sh/core/appview" + "tangled.sh/tangled.sh/core/appview/idresolver" ) var ( @@ -135,7 +135,7 @@ func main() { } func resolveToDid(didOrHandle string) string { - resolver := appview.DefaultResolver() + resolver := idresolver.DefaultResolver() ident, err := resolver.ResolveIdent(context.Background(), didOrHandle) if err != nil { exitWithLog(fmt.Sprintf("error resolving handle: %v", err))