Git Repositories

Add more help on installation.
authorCyrille Pontvieux <jrd@enialis.net>
Wed, 26 Nov 2014 23:59:06 +0000 (00:59 +0100)
committerCyrille Pontvieux <jrd@enialis.net>
Wed, 26 Nov 2014 23:59:06 +0000 (00:59 +0100)
Now use visudo to check for the sudoer file before installing it.
logged user can now create a repository.

Makefile
configure
src/include.inc.php
src/repo-list.php
tpl/git.sudo
tpl/nginx.conf

index 2b95b53..e6d5d43 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -28,6 +28,7 @@ gen/sudoers.d:
 
 gen/sudoers.d/git:
        @sed "s,__WEB_USER__,${WEB_USER},; s,__GIT_USER__,${GIT_USER},; s,__GIT_HOME__,${GIT_HOME},;" tpl/git.sudo > $@
+       @visudo -c -f $@ || cat /dev/null > $@
 
 gen/www/$(WEB_BASE_DIR)config.inc.php:
        @echo '<?php' > $@
@@ -57,6 +58,7 @@ gen/.website: gen/home gen/www/$(WEB_BASE_DIR) gen/sudoers.d gen/sudoers.d/git g
        @cp -r src/* src/.??* gen/www/${WEB_BASE_DIR}
        (cd git-master/gitweb && make prefix=/usr GITWEB_PROJECTROOT=${GIT_HOME} GITWEB_PROJECT_MAXDEPTH=50 GITWEB_EXPORT_OK=git-daemon-export-ok GITWEB_HOME_LINK_STR=/${WEB_BASE_DIR} GITWEB_SITENAME="${WEB_TITLE}" gitwebdir=${PREFIX}/${WEB_BASE_DIR}${GITWEB_DIR} all)
        @touch $@
+       @echo "Run 'make install' to install the git repositories and the web site"
 
 clean:
        @rm -rf gen
@@ -64,6 +66,14 @@ clean:
 
 install: _root gen/.website _githome _webhome _sudo
        (cd git-master/gitweb && make prefix=/usr GITWEB_PROJECTROOT=${GIT_HOME} GITWEB_PROJECT_MAXDEPTH=50 GITWEB_EXPORT_OK=git-daemon-export-ok GITWEB_HOME_LINK_STR=/${WEB_BASE_DIR} GITWEB_SITENAME="${WEB_TITLE}" gitwebdir=${PREFIX}/${WEB_BASE_DIR}${GITWEB_DIR} install)
+       @echo ""
+       @echo "Installation complete."
+       @echo ""
+       @echo "Please configure your web server using gen/${WEB_TYPE}.conf."
+       @echo "A git-daemon example script is also available in gen/git-daemon.example."
+       @echo "  Adapt it to your OS service system."
+       @echo ""
+       @echo "/!\ Don't forget to create a new admin user using: make adminuser"
 
 _root:
        @if [ $$(id -u) -ne 0 ]; then echo "You need to be root."; exit 1; fi
@@ -80,4 +90,9 @@ _sudo:
        @cp gen/sudoers.d/git /etc/sudoers.d/git
        @chmod ug=r,o= /etc/sudoers.d/git
 
-.PHONY: all _options clean install _root _githome _webhome _sudo
+adminuser: _root
+       @echo "New admin user creation"
+       @echo ""
+       @sh -c 'echo -n "Username: "; read gituser; echo -n "Password: ";       read -s gitpass; gitpass=$$(echo "$$gitpass"|md5sum|cut -d" " -f1); sudo -u ${GIT_USER} ${GIT_HOME}/gitrepo.sh create-user $$gituser $$gitpass; sudo -u ${GIT_USER} ${GIT_HOME}/gitrepo.sh user-set-admin $$gituser true'
+
+.PHONY: all _options clean install _root _githome _webhome _sudo adminuser
index e858c17..b96cb4e 100755 (executable)
--- a/configure
+++ b/configure
@@ -37,6 +37,7 @@ OPTIONS:
 EOF
 }
 
+CMD="$0"' '"$@"
 while [ -n "$1" ] && [ "$1" != "--" ]; do
   ARG="$1"
   shift
@@ -100,22 +101,23 @@ if [ ! -d "$LOGS" ]; then
   exit 2
 fi
 LOGS=$(readlink -f "$LOGS")
-if echo "$GIT_HOSTPORT"|grep -vq '^[0-9]\+$'; then
+if echo "$GIT_HOSTPORT"|grep -v -q '^[0-9]\+$'; then
   echo "Git host port $GIT_HOSTPORT does not seems to be valid." >&2
   exit 2
 fi
 GIT_HOME=$(readlink -f "$GIT_HOME")
-if [ -n "$WEB_BASE_DIR" ] && echo "$WEB_BASE_DIR"|grep -vq '/$'; then
+if [ -n "$WEB_BASE_DIR" ] && echo "$WEB_BASE_DIR"|grep -v -q '/$'; then
   WEB_BASE_DIR="$WEB_BASE_DIR/"
 fi
 GITWEB_DIR=$(echo "$GITWEB_DIR"|sed 's,/$,,')
-if grep -vq "^$WEB_USER:" /etc/passwd; then
+if ! grep -q "^$WEB_USER:" /etc/passwd; then
   echo "Web user '$WEB_USER' does not exist" >&2
   exit 2
 fi
 
 cd $(dirname "$0")
 cat <<EOF > config.mk
+# $CMD
 PREFIX = $PREFIX
 LOGS = $LOGS
 WEB_BASE_DIR = $WEB_BASE_DIR
index f56d5a4..adea2d5 100644 (file)
@@ -21,13 +21,8 @@ function gitrepoinfo($params) {
 }
 
 function isadmin($user) {
-  $admins = file('.admins');
-  if ($admins !== false) {
-    $admins = array_map('trim', $admins);
-    return in_array($user, $admins);
-  } else {
-    return false;
-  }
+  $res = gitrepoinfo('user-is-admin', $user);
+  return ($res !== false);
 }
 
 function redirectifnotadmin() {
index 8f44c85..71012bf 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 require_once('include.inc.php');
 $errorMsg = '';
-if ($admin && isset($_POST['submit_repo'])) {
+if ($logged && isset($_POST['submit_repo'])) {
   $fRepo = $_POST['new-repo'];
   $fDesc = $_POST['new-desc'];
   $res = gitrepoinfo('create', $fRepo, $fDesc);
@@ -11,7 +11,8 @@ if ($admin && isset($_POST['submit_repo'])) {
     if (isset($_POST['new-export']) && $_POST['new-export'] == 'on') {
       gitrepoinfo('export', $fRepo, 'on');
     }
-    gitrepoinfo('add-user', $fRepo, $_SESSION['username']); # add current user to the newly created repo.
+    # add current user as admin to the newly created repo.
+    gitrepoinfo('add-user', $fRepo, $_SESSION['username'], 'admin');
   }
 }
 $pageTitle = $title;
@@ -68,7 +69,7 @@ foreach ($files as $file) {
 ?>
       </table>
     </div>
-<?php if ($admin) { ?>
+<?php if ($logged) { ?>
     <div class="error"><?php echo $errorMsg; ?></div>
     <form id="repo-add" action="" method="POST">
       <fieldset>
@@ -89,6 +90,8 @@ foreach ($files as $file) {
         </table>
       </fieldset>
     </form>
+<?php } ?>
+<?php if ($admin) { ?>
     <a href="/<?php echo $gitwebroot;?>manage_users">Gestion des utilisateurs</a>
 <?php } ?>
 <?php require('footer.inc.php'); ?>
index 128d3a6..fa00dcb 100644 (file)
@@ -1,2 +1,2 @@
 # vim: syn=sudoers:
-WEB_USER ALL = (GIT_USER) NOPASSWD: GIT_DIR/gitrepo.sh
+__WEB_USER__ ALL = (__GIT_USER__) NOPASSWD: __GIT_HOME__/gitrepo.sh
index a903494..51c9ea2 100644 (file)
@@ -6,13 +6,13 @@ server {
   error_log __LOGS__/error.log;
   location /__WEB_BASE_DIR__ {
     index controller.php;
-    try_files \$uri \$uri/ /controller.php?\$args;
+    try_files $uri $uri/ /__WEB_BASE_DIR__controller.php?$args;
   }
   location ~ \.php$ {
-    gzip off
+    gzip off;
     fastcgi_pass   unix:/var/run/php-fpm.sock;
     include        fastcgi_params;
-    fastcgi_param  SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
+    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
   }
   location ~ /__WEB_BASE_DIR__readonly(/.*) {
     gzip off;
@@ -24,7 +24,7 @@ server {
     fastcgi_param GIT_HTTP_EXPORT_ALL "";
     fastcgi_param GIT_PROJECT_ROOT __GIT_HOME__;
     fastcgi_param HOME __GIT_HOME__;
-    fastcgi_param PATH_INFO \$1;
+    fastcgi_param PATH_INFO $1;
   }
   location /__WEB_BASE_DIR____GITWEB_DIR__/ {
     gzip off;
@@ -33,7 +33,7 @@ server {
     fastcgi_param  SCRIPT_NAME gitweb.cgi; 
     fastcgi_param  SCRIPT_FILENAME __PREFIX__/__WEB_BASE_DIR____GITWEB_DIR__/gitweb.cgi;
     fastcgi_param  GITWEB_CONFIG /etc/gitweb.conf;
-    if (\$uri ~ "/__WEB_BASE_DIR____GITWEB_DIR__/gitweb.cgi") {
+    if ($uri ~ "/__WEB_BASE_DIR____GITWEB_DIR__/gitweb.cgi") {
       fastcgi_pass   unix:/var/run/fcgiwrap.sock;
     }
   }