summaryrefslogtreecommitdiff
path: root/src/run
diff options
context:
space:
mode:
authorGravatar Matthias Lucas Jaros <jarlucmat@mailbox.org>2025-10-20 10:20:42 +0200
committerGravatar Matthias Lucas Jaros <jarlucmat@mailbox.org>2025-10-20 10:20:42 +0200
commit9d9355a379f8a9922645ecd87b66f68acbb6bc89 (patch)
tree3491b69ae5d327556f0e5d4bd732ec6208746ece /src/run
parentbaaa4d83c98b42a1df98e70b972774ad8f5b8ead (diff)
Moved files to src and renamed variables
Diffstat (limited to 'src/run')
-rwxr-xr-xsrc/run25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/run b/src/run
new file mode 100755
index 0000000..a1ae7d5
--- /dev/null
+++ b/src/run
@@ -0,0 +1,25 @@
+#!/usr/bin/env fish
+
+set REPO_PERMISSIONS_FILE /etc/repo-permissions
+# unify repo regex somehow
+set GIT_VALIDATION_REGEX "^(git-(?:upload-pack|receive-pack|upload-archive)) '((?:\/[a-zA-Z-]+)+.git)'\$"
+
+# check given git command
+set -l matcher (string match -r -g $GIT_VALIDATION_REGEX "$argv")
+if test (count $matcher) -ne 2
+ # there should be two groups otherwise something is wrong
+ exit 1
+end
+
+# echo check for permissions
+set -l checkUser (whoami)
+set -l gitCommand $matcher[1]
+set -l repo $matcher[2]
+# adjust repo path to /srv/repos
+set -l repoDir srv repos
+set -l repoDir /(string join -n '/' $repoDir (string split '/' $repo))
+cat $REPO_PERMISSIONS_FILE | grep -q -E "^$repoDir:$checkUser\$"
+or exit 1;
+
+# execute parsed git command
+/usr/bin/sudo -u git /usr/bin/git-shell -c "$gitCommand '$repoDir'"