···2526}
270000000000000000028func (s *State) UploadPack(w http.ResponseWriter, r *http.Request) {
29 user, ok := r.Context().Value("resolvedId").(identity.Identity)
30 if !ok {
···2526}
2728+func (s *State) UploadArchive(w http.ResponseWriter, r *http.Request) {
29+ user, ok := r.Context().Value("resolvedId").(identity.Identity)
30+ if !ok {
31+ http.Error(w, "failed to resolve user", http.StatusInternalServerError)
32+ return
33+ }
34+ repo := r.Context().Value("repo").(*models.Repo)
35+36+ scheme := "https"
37+ if s.config.Core.Dev {
38+ scheme = "http"
39+ }
40+41+ targetURL := fmt.Sprintf("%s://%s/%s/%s/git-upload-archive?%s", scheme, repo.Knot, user.DID, repo.Name, r.URL.RawQuery)
42+ s.proxyRequest(w, r, targetURL)
43+}
44+45func (s *State) UploadPack(w http.ResponseWriter, r *http.Request) {
46 user, ok := r.Context().Value("resolvedId").(identity.Identity)
47 if !ok {
+1
appview/state/router.go
···101102 // These routes get proxied to the knot
103 r.Get("/info/refs", s.InfoRefs)
0104 r.Post("/git-upload-pack", s.UploadPack)
105 r.Post("/git-receive-pack", s.ReceivePack)
106
···101102 // These routes get proxied to the knot
103 r.Get("/info/refs", s.InfoRefs)
104+ r.Post("/git-upload-archive", s.UploadArchive)
105 r.Post("/git-upload-pack", s.UploadPack)
106 r.Post("/git-receive-pack", s.ReceivePack)
107