|
|
@@ -365,7 +365,8 @@ func HTTP(ctx *context.Context) { |
|
|
|
ctx.NotFound("Smart Git HTTP", err) |
|
|
|
return |
|
|
|
} |
|
|
|
route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env, repo}) |
|
|
|
|
|
|
|
route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env}) |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
@@ -428,7 +429,6 @@ type serviceHandler struct { |
|
|
|
dir string |
|
|
|
file string |
|
|
|
environ []string |
|
|
|
repo *models.Repository |
|
|
|
} |
|
|
|
|
|
|
|
func (h *serviceHandler) setHeaderNoCache() { |
|
|
@@ -546,19 +546,6 @@ func serviceRPC(h serviceHandler, service string) { |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
content, _ := ioutil.ReadAll(reqBody) |
|
|
|
//check size |
|
|
|
if service == "receive-pack" { |
|
|
|
if err := repo_service.CheckPushSizeLimit4Http(h.repo, int64(len(content))); err != nil { |
|
|
|
h.w.WriteHeader(http.StatusOK) |
|
|
|
str := GenerateGitErrorBody(err.Error()) |
|
|
|
h.w.Write([]byte(str)) |
|
|
|
if h.w.Header().Get("Content-Type") == "" { |
|
|
|
h.w.Header().Set("Content-Type", "application/x-git-receive-pack-result") |
|
|
|
} |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// set this for allow pre-receive and post-receive execute |
|
|
|
h.environ = append(h.environ, "SSH_ORIGINAL_COMMAND="+service) |
|
|
@@ -573,7 +560,7 @@ func serviceRPC(h serviceHandler, service string) { |
|
|
|
} |
|
|
|
|
|
|
|
cmd.Stdout = h.w |
|
|
|
cmd.Stdin = bytes.NewReader(content) |
|
|
|
cmd.Stdin = reqBody |
|
|
|
cmd.Stderr = &stderr |
|
|
|
|
|
|
|
pid := process.GetManager().Add(fmt.Sprintf("%s %s %s [repo_path: %s]", git.GitExecutable, service, "--stateless-rpc", h.dir), cancel) |
|
|
@@ -585,41 +572,6 @@ func serviceRPC(h serviceHandler, service string) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func GenerateGitErrorBody(content string) string { |
|
|
|
var builder strings.Builder |
|
|
|
builder.WriteString(GenerateErrStartPKTLine()) |
|
|
|
builder.WriteString(GeneratePKTLine(content)) |
|
|
|
builder.WriteString(GenerateEndPKTLine()) |
|
|
|
return builder.String() |
|
|
|
} |
|
|
|
|
|
|
|
func GeneratePKTLine(content string) string { |
|
|
|
//\033[31m ... \033[0m |
|
|
|
//mark the text red in shell |
|
|
|
content = "\u0002\033[31m " + content + " \033[0m" |
|
|
|
l := len(content) |
|
|
|
prefixLength := 4 |
|
|
|
suffix := "\n" |
|
|
|
f := strconv.FormatInt(int64(l+prefixLength+len(suffix)), 16) |
|
|
|
lf := len(f) |
|
|
|
if lf == 1 { |
|
|
|
f = "000" + f |
|
|
|
} else if lf == 2 { |
|
|
|
f = "00" + f |
|
|
|
} else if lf == 3 { |
|
|
|
f = "0" + f |
|
|
|
} |
|
|
|
return f + content + suffix |
|
|
|
} |
|
|
|
|
|
|
|
func GenerateEndPKTLine() string { |
|
|
|
return "0000" |
|
|
|
} |
|
|
|
|
|
|
|
func GenerateErrStartPKTLine() string { |
|
|
|
return "0031\u0001000eunpack err\n0019ok refs/heads/master\n0000" |
|
|
|
} |
|
|
|
|
|
|
|
func serviceUploadPack(h serviceHandler) { |
|
|
|
serviceRPC(h, "upload-pack") |
|
|
|
} |
|
|
|