forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
this repo has no description
fork
Configure Feed
Select the types of activity you want to include in your feed.
1package knotserver
2
3import (
4 "compress/gzip"
5 "io"
6 "net/http"
7 "path/filepath"
8
9 securejoin "github.com/cyphar/filepath-securejoin"
10 "github.com/go-chi/chi/v5"
11 "github.com/sotangled/tangled/knotserver/git/service"
12)
13
14func (d *Handle) InfoRefs(w http.ResponseWriter, r *http.Request) {
15 did := chi.URLParam(r, "did")
16 name := chi.URLParam(r, "name")
17 repo, _ := securejoin.SecureJoin(d.c.Repo.ScanPath, filepath.Join(did, name))
18
19 w.Header().Set("content-type", "application/x-git-upload-pack-advertisement")
20 w.WriteHeader(http.StatusOK)
21
22 cmd := service.ServiceCommand{
23 Dir: repo,
24 Stdout: w,
25 }
26
27 if err := cmd.InfoRefs(); err != nil {
28 http.Error(w, err.Error(), 500)
29 d.l.Error("git: failed to execute git-upload-pack (info/refs)", "handler", "InfoRefs", "error", err)
30 return
31 }
32}
33
34func (d *Handle) UploadPack(w http.ResponseWriter, r *http.Request) {
35 did := chi.URLParam(r, "did")
36 name := chi.URLParam(r, "name")
37 repo, _ := securejoin.SecureJoin(d.c.Repo.ScanPath, filepath.Join(did, name))
38
39 w.Header().Set("content-type", "application/x-git-upload-pack-result")
40 w.Header().Set("Connection", "Keep-Alive")
41 w.Header().Set("Transfer-Encoding", "chunked")
42 w.WriteHeader(http.StatusOK)
43
44 cmd := service.ServiceCommand{
45 Dir: repo,
46 Stdout: w,
47 }
48
49 var reader io.ReadCloser
50 reader = r.Body
51
52 if r.Header.Get("Content-Encoding") == "gzip" {
53 reader, err := gzip.NewReader(r.Body)
54 if err != nil {
55 http.Error(w, err.Error(), 500)
56 d.l.Error("git: failed to create gzip reader", "handler", "UploadPack", "error", err)
57 return
58 }
59 defer reader.Close()
60 }
61
62 cmd.Stdin = reader
63 if err := cmd.UploadPack(); err != nil {
64 http.Error(w, err.Error(), 500)
65 d.l.Error("git: failed to execute git-upload-pack", "handler", "UploadPack", "error", err)
66 return
67 }
68}