Monorepo for Tangled tangled.org
1package server 2 3import ( 4 "database/sql" 5 "net/http" 6 7 "github.com/bluesky-social/indigo/atproto/auth/oauth" 8 "github.com/go-chi/chi/v5" 9 "github.com/gorilla/sessions" 10 "tangled.org/core/api/tangled" 11 "tangled.org/core/knot2/config" 12 "tangled.org/core/knot2/server/handler" 13 "tangled.org/core/knot2/server/middleware" 14) 15 16func Routes( 17 cfg *config.Config, 18 d *sql.DB, 19 clientApp *oauth.ClientApp, 20) http.Handler { 21 r := chi.NewRouter() 22 23 r.Use(middleware.CORS) 24 r.Use(middleware.RequestLogger) 25 26 r.Get("/", func(w http.ResponseWriter, r *http.Request) { 27 w.Write([]byte("This is a knot server. More info at https://tangled.sh")) 28 }) 29 30 jar := sessions.NewCookieStore([]byte(cfg.OAuth.CookieSecret)) 31 32 r.Get("/register", handler.Register(jar)) 33 r.Post("/register", handler.RegisterPost(cfg, d, clientApp, jar)) 34 r.Post("/oauth/login", handler.OauthLoginPost(clientApp)) 35 r.Get("/oauth/client-metadata.json", handler.OauthClientMetadata(cfg, clientApp)) 36 r.Get("/oauth/jwks.json", handler.OauthJwks(clientApp)) 37 r.Get("/oauth/callback", handler.OauthCallback(clientApp, jar)) 38 39 r.Route("/{did}/{name}", func(r chi.Router) { 40 r.Get("/info/refs", handler.InfoRefs()) 41 r.Post("/git-upload-pack", handler.GitUploadPack()) 42 r.Post("/git-receive-pack", handler.GitReceivePack()) 43 }) 44 45 r.Get("/events", handler.Events()) 46 47 r.Route("/xrpc", func(r chi.Router) { 48 r.Post("/"+tangled.GitKeepCommitNSID, handler.XrpcGitKeepCommit(cfg)) 49 }) 50 51 return r 52}