Git Repositories

First step to using Bootstrap.
[simple-git-host.git] / src / include.inc.php
1 <?php
2 require('config.inc.php');
3 setlocale(LC_CTYPE, 'fr_FR.UTF-8');
4 session_start();
5 $errorMsg = '';
6 $logged = false;
7 $admin = false;
8
9 function gitrepoinfo($params) {
10   global $gituser, $gitdir;
11   $p = '';
12   foreach (func_get_args() as $param) {
13     $p .= ' ' . escapeshellarg($param);
14   }
15   exec("sudo -u $gituser $gitdir/gitrepo.sh $p", $ret, $state);
16   if ($state == 0) {
17     return $ret;
18   } else {
19     return false;
20   }
21 }
22
23 function isadmin($user) {
24   $res = gitrepoinfo('user-is-admin', $user);
25   return ($res !== false);
26 }
27
28 function isrepoadmin($repo, $user) {
29   $isadmin = false;
30   foreach (gitrepoinfo('show-users', $repo) as $userinfo) {
31     $info = explode(':', $userinfo);
32     if ($info[0] == $user) {
33       $isadmin = ($info[1] == 'admin');
34       break;
35     }
36   }
37   return $isadmin;
38 }
39
40 function redirectifnotadmin() {
41   global $admin, $gitwebroot;
42   if (!$admin) {
43     header('Location: /' . $gitwebroot);
44     exit;
45   }
46 }
47
48 function redirectifnotrepoadmin($repo) {
49   global $logged, $admin, $gitwebroot;
50   if (!$logged || (!$admin && !isrepoadmin($repo, $_SESSION['username']))) {
51     header('Location: /' . $gitwebroot);
52     exit;
53   }
54 }
55
56 function auth() {
57   global $errorMsg, $logged, $admin, $gitwebroot;
58   if (isset($_POST['submit_auth'])) {
59     $fUsername = $_POST['username'];
60     $fPassword = $_POST['password'];
61     $password = gitrepoinfo('show-pwd', $fUsername);
62     if ($password !== false) {
63       $password = implode('', $password);
64       if (empty($password)) {
65         // autorisé
66         $_SESSION['username'] = $fUsername;
67       } elseif (md5($fPassword) == $password) {
68         // autorisé
69         $_SESSION['username'] = $fUsername;
70       } else {
71         unset($_SESSION['username']);
72         $errorMsg = "Mot de passe incorrect.";
73       }
74     } else {
75       unset($_SESSION['username']);
76       $errorMsg = "L'utilisateur $fUsername n'existe pas.";
77     }
78     $logged = !empty($_SESSION['username']);
79     if ($logged) {
80       // Test si l'utilisateur est admin
81       $admin = isadmin($_SESSION['username']);
82       // Redirige pour éviter de reposter le formulaire.
83       header('Location: /' . $gitwebroot);
84       exit;
85     }
86   } else {
87     $logged = !empty($_SESSION['username']);
88     if ($logged) {
89       // Test si l'utilisateur est admin
90       $admin = isadmin($_SESSION['username']);
91     }
92   }
93 }
94
95 if (!$logged) {
96   auth();
97 }