+12
-3
knotserver/git.go
+12
-3
knotserver/git.go
···
39
serviceName := r.URL.Query().Get("service")
40
switch serviceName {
41
case "git-upload-pack":
42
-
w.Header().Set("content-type", "application/x-git-upload-pack-advertisement")
43
w.WriteHeader(http.StatusOK)
44
45
if err := cmd.InfoRefs(); err != nil {
···
59
name := chi.URLParam(r, "name")
60
repo, err := securejoin.SecureJoin(d.c.Repo.ScanPath, filepath.Join(did, name))
61
if err != nil {
62
-
writeError(w, err.Error(), 500)
63
d.l.Error("git: failed to secure join repo path", "handler", "UploadPack", "error", err)
64
return
65
}
66
67
var bodyReader io.ReadCloser = r.Body
68
if r.Header.Get("Content-Encoding") == "gzip" {
69
gzipReader, err := gzip.NewReader(r.Body)
70
if err != nil {
71
-
writeError(w, err.Error(), 500)
72
d.l.Error("git: failed to create gzip reader", "handler", "UploadPack", "error", err)
73
return
74
}
···
78
79
w.Header().Set("Content-Type", "application/x-git-upload-pack-result")
80
w.Header().Set("Connection", "Keep-Alive")
81
82
d.l.Info("git: executing git-upload-pack", "handler", "UploadPack", "repo", repo)
83
···
39
serviceName := r.URL.Query().Get("service")
40
switch serviceName {
41
case "git-upload-pack":
42
+
w.Header().Set("Content-Type", "application/x-git-upload-pack-advertisement")
43
+
w.Header().Set("Connection", "Keep-Alive")
44
+
w.Header().Set("Cache-Control", "no-cache, max-age=0, must-revalidate")
45
w.WriteHeader(http.StatusOK)
46
47
if err := cmd.InfoRefs(); err != nil {
···
61
name := chi.URLParam(r, "name")
62
repo, err := securejoin.SecureJoin(d.c.Repo.ScanPath, filepath.Join(did, name))
63
if err != nil {
64
+
gitError(w, err.Error(), http.StatusInternalServerError)
65
d.l.Error("git: failed to secure join repo path", "handler", "UploadPack", "error", err)
66
return
67
}
68
69
+
const expectedContentType = "application/x-git-upload-pack-request"
70
+
contentType := r.Header.Get("Content-Type")
71
+
if contentType != expectedContentType {
72
+
gitError(w, fmt.Sprintf("Expected Content-Type: '%s', but received '%s'.", expectedContentType, contentType), http.StatusUnsupportedMediaType)
73
+
}
74
+
75
var bodyReader io.ReadCloser = r.Body
76
if r.Header.Get("Content-Encoding") == "gzip" {
77
gzipReader, err := gzip.NewReader(r.Body)
78
if err != nil {
79
+
gitError(w, err.Error(), http.StatusInternalServerError)
80
d.l.Error("git: failed to create gzip reader", "handler", "UploadPack", "error", err)
81
return
82
}
···
86
87
w.Header().Set("Content-Type", "application/x-git-upload-pack-result")
88
w.Header().Set("Connection", "Keep-Alive")
89
+
w.Header().Set("Cache-Control", "no-cache, max-age=0, must-revalidate")
90
91
d.l.Info("git: executing git-upload-pack", "handler", "UploadPack", "repo", repo)
92