···
incomingUser = flag.String("user", "", "Allowed git user")
baseDirFlag = flag.String("base-dir", "/home/git", "Base directory for git repositories")
logPathFlag = flag.String("log-path", "/var/log/git-wrapper.log", "Path to log file")
-
endpoint = flag.String("internal-api", "http://localhost:5555", "Internal API endpoint")
···
-
components := filepath.SplitList(cmdParts[2])
if len(components) != 2 {
exitWithLog("invalid repo format, needs <user>/<repo>")
···
if gitCommand != "git-upload-pack" {
if !isPushPermitted(*incomingUser, qualifiedRepoName) {
exitWithLog("access denied: user not allowed")
···
func isPushPermitted(user, qualifiedRepoName string) bool {
-
url, _ := url.Parse(*endpoint + "/push-allowed/")
-
url.Query().Add(user, user)
-
url.Query().Add(user, qualifiedRepoName)
-
req, err := http.Get(url.String())
exitWithLog(fmt.Sprintf("error verifying permissions: %v", err))
return req.StatusCode == http.StatusNoContent
···
incomingUser = flag.String("user", "", "Allowed git user")
baseDirFlag = flag.String("base-dir", "/home/git", "Base directory for git repositories")
logPathFlag = flag.String("log-path", "/var/log/git-wrapper.log", "Path to log file")
+
endpoint = flag.String("internal-api", "http://localhost:5444", "Internal API endpoint")
···
+
components := strings.Split(strings.Trim(cmdParts[1], "'"), "/")
+
logEvent("Command components", map[string]interface{}{
+
"components": components,
if len(components) != 2 {
exitWithLog("invalid repo format, needs <user>/<repo>")
···
if gitCommand != "git-upload-pack" {
if !isPushPermitted(*incomingUser, qualifiedRepoName) {
+
logEvent("all infos", map[string]interface{}{
+
"reponame": qualifiedRepoName,
exitWithLog("access denied: user not allowed")
···
func isPushPermitted(user, qualifiedRepoName string) bool {
+
u, _ := url.Parse(*endpoint + "/push-allowed")
+
q.Add("repo", qualifiedRepoName)
+
u.RawQuery = q.Encode()
+
req, err := http.Get(u.String())
exitWithLog(fmt.Sprintf("error verifying permissions: %v", err))
+
logEvent("url", map[string]interface{}{
return req.StatusCode == http.StatusNoContent