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}