package server import ( "database/sql" "net/http" "github.com/bluesky-social/indigo/atproto/auth/oauth" "github.com/go-chi/chi/v5" "github.com/gorilla/sessions" "tangled.org/core/knot2/config" "tangled.org/core/knot2/server/handler" "tangled.org/core/knot2/server/middleware" ) func Routes( cfg *config.Config, d *sql.DB, clientApp *oauth.ClientApp, ) http.Handler { r := chi.NewRouter() r.Use(middleware.CORS) r.Use(middleware.RequestLogger) r.Get("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("This is a knot server. More info at https://tangled.sh")) }) jar := sessions.NewCookieStore([]byte(cfg.OAuth.CookieSecret)) r.Get("/register", handler.Register(jar)) r.Post("/register", handler.RegisterPost(cfg, d, clientApp, jar)) r.Post("/oauth/login", handler.OauthLoginPost(clientApp)) r.Get("/oauth/client-metadata.json", handler.OauthClientMetadata(cfg, clientApp)) r.Get("/oauth/jwks.json", handler.OauthJwks(clientApp)) r.Get("/oauth/callback", handler.OauthCallback(clientApp, jar)) r.Route("/{did}/{name}", func(r chi.Router) { r.Get("/info/refs", handler.InfoRefs()) r.Post("/git-upload-pack", handler.GitUploadPack()) r.Post("/git-receive-pack", handler.GitReceivePack()) }) r.Get("/events", handler.Events()) // r.Route("/xrpc", func(r chi.Router) { // r.Post("/"+tangled.GitKeepRefNSID, handler.GitKeepRef()) // }) return r }