24b6a9c620cdf324e7c7fc773df6ae7aab65d41c
Benjamin Renard Initial commit

Benjamin Renard authored 11 years ago

1) <?php
2) 
3) class AddRepoPlugin extends VGPlugin
4) {
5) 	function __construct() {
6) 		global $conf;
7) 		if (isset($conf['addrepo'])) {
8) 			$this->register_action('addrepo');
9) 			$this->register_hook('header');
10) 			$this->register_hook('page_start');
11) 			$this->register_hook('summary');
12) 		}
13) 	}
14) 
15) 	function action($action) {
16) 		if ($action === 'addrepo') {
17) 			global $page;
18) 			global $conf;
Benjamin Renard Add 'nopassword' parameter

Benjamin Renard authored 10 years ago

19) 			if (isset($_POST['repo_name']) && isset($_POST['repo_desc'])) {
Benjamin Renard Initial commit

Benjamin Renard authored 11 years ago

20) 				$create=True;
21) 				$name=rtrim($_POST['repo_name']);
22) 				if (!$this -> validate_repo_name($name)) {
23) 					$this -> add_display_message('Invalid name of repository. Must only contain letters, numbers or caraters "_" or "-". ',True);
24) 					$create=False;
25) 				}
26) 				$desc=rtrim($_POST['repo_desc']);
27) 				if (empty($desc)) {
28) 					$this -> add_display_message('Repository description is required.',True);
29) 					$create=False;
30) 				}
31) 
Benjamin Renard Add 'nopassword' parameter

Benjamin Renard authored 10 years ago

32) 				if (!isset($conf['addrepo']['nopassword']) || ($conf['addrepo']['nopassword']===False)) {
33) 					if (!isset($conf['addrepo']['password']) || empty($conf['addrepo']['password'])) {
34) 						$this -> add_display_message('Password not defined in configuration. Creation disable.',True);
Benjamin Renard Initial commit

Benjamin Renard authored 11 years ago

35) 						$create=False;
36) 					}
Benjamin Renard Add 'nopassword' parameter

Benjamin Renard authored 10 years ago

37) 					else {
38) 						$pwd=rtrim($_POST['repo_pwd']);
39) 						if ($pwd!=$conf['addrepo']['password']) {
40) 							$this -> add_display_message('Password incorrect',True);
41) 							$create=False;
42) 						}
43) 					}
Benjamin Renard Initial commit

Benjamin Renard authored 11 years ago

44) 				}
45) 
46) 				if ($create && $this -> create_repo($name,$desc)) {
47) 					$this -> add_display_message("Repository $name successfully created !<br>To access to your new repository, click <a href='?a=summary&p=$name'>here</a>.");
48) 				}
49) 				else {
50) 					$page['addrepo']['values']['name']=$name;
51) 					$page['addrepo']['values']['desc']=$desc;
52) 				}
53) 			}
54) 			$this->display_plugin_template('addrepo');
55) 		}
56) 	}
57) 
58) 	function hook($type) {
59) 		if ($type == 'header') {
60) 			echo "\t<link rel='stylesheet' href='plugins/addrepo/style.css' type='text/css' />\n";
61) 		}
62) 		elseif ($type == 'page_start') {
63) 			$this->display_plugin_template('start',False);
64) 		}
65) 		elseif ($type == 'summary') {
66) 			global $page;
67) 			global $conf;
68) 			$infos=get_project_info($page['project']);
69) 			if (empty($infos['head_hash'])) {
70) 				if (isset($conf['addrepo']['url_format'])) {
71) 					$page['addrepo']['URL']=sprintf($conf['addrepo']['url_format'],$page['project']);
72) 				}
73) 				else {
74) 					$page['addrepo']['URL']='[URL]';
75) 				}
76) 				$this->display_plugin_template('summary',False);
77) 			}
78) 		}
79) 	}
80) 
81)         /**
82)          * Display the given template.
83)          * Fixe global variables inclusion
84)          */
85)         function display_template($template, $with_headers = true) {
86)                 global $conf;
87)                 global $page;
88)                 if ($with_headers) {
89)                         require 'templates/header.php';
90)                 }
91)                 require "$template";
92)                 if ($with_headers) {
93)                         require 'templates/footer.php';
94)                 }
95)         }
96) 
97) 	function add_display_message($msg,$error=false) {
98) 		global $page;
99) 		if ($error) {
100) 			$page['addrepo']['error'][]=$msg;
101) 		}
102) 		else {
103) 			$page['addrepo']['msg'][]=$msg;
104) 		}
105) 	}
106) 
107) 	function validate_repo_name($name) {
108) 		if (preg_match('/^[a-zA-Z0-9\-\_]*$/',$name)) {
109) 			return True;
110) 		}
111) 		return False;
112) 	}
113) 
114) 	function create_repo($name,$desc) {
115) 		global $conf;
116) 		if (!isset($conf['addrepo']['root_path'])) {
117) 			$this -> add_display_message('Root path not configured !',True);
118) 			return;
119) 		}
120) 		elseif(!is_dir($conf['addrepo']['root_path'])) {
121) 			 $this -> add_display_message('Root directory not found. Check your configuration !',True);
122) 			 return;
123) 		}
124) 		$path=$conf['addrepo']['root_path'].'/'.$name;
125) 		if (is_dir($path)) {
126) 			$this -> add_display_message("Repository $name still exist !",True);
127) 			return;
128) 		}
129) 
130) 		if (!mkdir($path)) {
131) 			$this -> add_display_message("Fail to create repository's directory. Check permission.",True);
132) 			return;
133) 		}
134) 
135) 		global $conf;
136) 		$conf['project'][$name]=array(
137) 			'repo'  => $path
138) 		);
139) 
140) 		$cmd = $conf['git'] ." --git-dir=$path init";
141) 		exec($cmd,$out,$ret);
142) 		if ($ret !== 0) {
143) 			$this -> add_display_message("Error initializing repository !");
144) 			return;
145) 		}
146) 
147) 		try {
148) 			$fd = fopen($path.'/description','w');
149) 			fwrite($fd,$desc);
150) 			fclose($fd);
151) 		}
152) 		catch (Exception $e) {
153) 			 $this -> add_display_message("Error setting repository's description : ".$e->getMessage());
154) 			 return;
155) 		}
Benjamin Renard Added chmod g+rw after repo...

Benjamin Renard authored 11 years ago

156) 
157) 		$cmd = "chmod g+rw -R $path";
158) 		exec($cmd,$out,$ret);
159) 		if ($ret !== 0) {
160) 			$this -> add_display_message("Error fixing repository permission. You may not be able to push in this repository.");
161) 		}