moved the old git poc code off and away from the main directory
authorpaulr <me@pjr.cc>
Tue, 8 Nov 2011 16:42:13 +0000 (03:42 +1100)
committerpaulr <me@pjr.cc>
Tue, 8 Nov 2011 16:42:13 +0000 (03:42 +1100)
added a permission level "4" which is "can manage repo as an owner" -
which only extends to site admins and repo owners. Replaces the
gwvp_canManageRepo() function

archive/gwvpgitbackend_poccode.php [moved from gwvplib/gwvpgitbackend.php with 100% similarity]
gwvplib/gwvpauth.php
gwvplib/gwvpdebug.php
gwvplib/gwvpgitcontrol.php
gwvplib/gwvplib.php
gwvplib/gwvprepoadmin.php
gwvplib/gwvpweb.php

index e06fdde..2602256 100644 (file)
@@ -39,8 +39,8 @@ function gwvp_AskForBasicAuth()
 {
        error_log("AUTH: asking for basic auth");
        if(!isset($_SERVER["PHP_AUTH_USER"])) {
-               header('WWW-Authenticate: Basic realm="My Realm"');
-               header('HTTP/1.0 401 Unauthorized');
+               header('WWW-Authenticate: Basic realm="GIT Repo"');
+               header('HTTP/1.1 401 Unauthorized');
        } else return; 
 }
 
index dcc7c7a..4a5c303 100644 (file)
@@ -8,6 +8,21 @@ function gwvp_DebugEnabled()
 {
        global $BASE_URL, $LOGIN_TYPE;
        
+       $isgitagent = false;
+       
+       // tested the user agent bit with jgit from eclipse and normal git... seems to work
+       if(isset($_SERVER["HTTP_USER_AGENT"])) {
+               $agent = $_SERVER["HTTP_USER_AGENT"];
+               error_log("in git backend with user agent $agent");
+               if(stristr($agent, "git")!==false) {
+                       $isgitagent = true;
+               }
+       }
+       
+       // we dont wan to send this to a git agent
+       if($isgitagent) return;
+       
+       
        echo "<pre>";
        if(isset($_SERVER["PHP_AUTH_USER"])) error_log("authuser: ".$_SERVER["PHP_AUTH_USER"]."\n");
        echo "USERTYPE: $LOGIN_TYPE\n";
@@ -148,6 +163,8 @@ function gwvp_DebugCall()
 function gwvp_DebugBody()
 {
        global $BASE_URL;
+       
+       
        ?>
        <a href="<?php echo $BASE_URL?>/debug/errormessage">Generate error message</a><br>
        <a href="<?php echo $BASE_URL?>/debug/infomessage">Generate info message</a><br>
index 842d040..7c34d9b 100644 (file)
@@ -6,6 +6,9 @@ $CALL_ME_FUNCTIONS["gitcontrol"] = "gwvp_gitControlCallMe";
 //$MENU_ITEMS["20repos"]["link"] = "$BASE_URL/admin/repos";
 $HOME_PAGE_PROVIDERS["gitlog"] = "gwvp_GitLogProvider";
 
+// TODO: we could actually change backend interface such that is
+// will respond to any url's that contain "repo.git" rather then
+// having to be $BASE_URL/git/repo.git
 function gwvp_gitControlCallMe()
 {
        if(isset($_REQUEST["q"])) {
@@ -42,6 +45,20 @@ function gwvp_gitBackendInterface()
        
        // TODO: we need to stop passing the repo name around as "repo.git", it needs to be just "repo"
        
+       
+       /* bizare git problem that ignores 403's or continues on with a push despite them 
+       error_log("FLAP for ".$_SERVER["REQUEST_URI"]);
+       if(isset($_REQUEST)) {
+               $dump = print_r($_REQUEST, true);
+               error_log("FLAP, $dump");
+       }
+       if(isset($_SERVER["PHP_AUTH_USER"])) {
+               error_log("FLAP: donut hole");
+       }*/
+       
+       
+
+       
        $repo = "";
        $repoid = false;
        $newloc = "/";
@@ -71,12 +88,18 @@ function gwvp_gitBackendInterface()
        $write = false;
        if(isset($_REQUEST["service"])) {
                if($_REQUEST["service"] == "git-receive-pack") {
+                       error_log("got write as receivepack in post");
                        $write = true;
                }
        }
        if($_SERVER["REQUEST_METHOD"] == "POST") {
                $write = true;
        }
+       // THIS MAY CAUSE ISSUES LATER ON but we do it cause the git client ignores our 403 when it uses git-receive-pack after an auth
+       // no, this isnt a solution cause auth'd read attempts will come up as writes...
+       //if(isset($_SERVER["PHP_AUTH_USER"])) {
+               //$write = true;
+       //}
        
        // if its a write, we push for authentication
        if($write) {
@@ -465,6 +488,7 @@ function gwvp_createGitRepo($name, $ownerid, $desc, $bundle=null, $defaultperms=
 // 1 - visible
 // 2 - read
 // 3 - write
+// 4 - owner/administrator
 function gwvp_resolvRepoPerms($userid, $repoid)
 {
        $ownerid = gwvp_getRepoOwner($repoid);
@@ -472,9 +496,9 @@ function gwvp_resolvRepoPerms($userid, $repoid)
        
        error_log("USerid is $userid, ownerid $ownerid");
        
-       if($isadmin) return 3;
+       if($isadmin) return 4;
        
-       if($userid == $ownerid) return 3;
+       if($userid == $ownerid) return 4;
        
        // now we load the perms table and pray
        $repoperms = gwvp_getRepoPermissions($repoid);
index 0158b45..9850e97 100644 (file)
@@ -2,7 +2,6 @@
 
 
 require_once("gwvpweb.php");
-require_once("gwvpgitbackend.php");
 require_once("gwvpuseradmin.php");
 require_once("gwvprepoadmin.php");
 require_once("gwvpauth.php");
@@ -17,7 +16,7 @@ require_once("gwvpemail.php");
 require_once("gwvppluginloader.php");
 
 // only enable this if you need it:
-//require_once("gwvpdebug.php");
+require_once("gwvpdebug.php");
 
 
 ?>
\ No newline at end of file
index cc78ba4..cb533bf 100644 (file)
@@ -265,7 +265,7 @@ function gwvp_RepoAdminPageBody()
                $manordetslink = "details";
                $manordets = "Details";
                if(isset($_SESSION["id"])) {
-                       if(gwvp_canManageRepo($_SESSION["id"], $rid)) {
+                       if(gwvp_resolvRepoPerms($_SESSION["id"], $rid)>3) {
                                $manordetslink = "manage";
                                $manordets = "Manage";
                        }
index b9e7e1b..f01e537 100644 (file)
@@ -154,7 +154,6 @@ function gwvp_MenuBuilder()
        
        ksort($MENU_ITEMS);
        
-       echo "\n\n\n";
        echo "<table border=\"1\"><tr><td><b><i>Menu</i></b></td>";
        foreach($MENU_ITEMS as $key => $val) {
                $link = $val["link"];
@@ -187,7 +186,6 @@ function gwvp_MenuBuilder()
                }
        }
        echo "</tr></table>";
-       echo "\n\n\n";
        
 }
 
@@ -195,14 +193,12 @@ function gwvp_LoginBuilder()
 {
        global $WEB_ROOT_FS, $BASE_URL;
        
-       echo "\n\n\n";
        $login = gwvp_IsLoggedIn();
        if($login === false) {
                gwvp_SingleLineLoginForm();
        } else {
                echo "Hello, ".gwvp_GetFullName($login)." <a href=\"$BASE_URL/logout\">logout</a>";
        }
-       echo "\n\n\n";
 }
 
 // builds the body structure