3 error_log("admin loaded");
5 global $BASE_URL, $MENU_ITEMS;
6 $MENU_ITEMS["30repoadmin"]["name"] = "Repo Admin";
7 $MENU_ITEMS["30repoadmin"]["link"] = "$BASE_URL/repoadmin";
10 $URL_HANDLERS["repoadmin.*"] = "GLCASRepoAdmin";
12 $CRON_CLASSES["GLCASAdmin"] = "GLCASRepoAdmin";
14 class GLCASRepoAdmin {
15 function __construct($config)
17 $this->config = $config;
18 error_log("constructor for GLCASRepoAdmin");
24 error_log("repo:go called");
26 if(isset($_REQUEST["action"])) {
27 switch($_REQUEST["action"]) {
29 error_log("in updaterepo");
30 GLCASpageBuilder($this,"doUpdateRepo");
33 error_log("in reponext");
34 GLCASpageBuilder($this,"doRepoNextForm");
38 GLCASpageBuilder($this,"doAddRepoApt");
41 GLCASpageBuilder($this,"doAddRepoYum");
44 error_log("call delete repo");
45 GLCASpageBuilder($this, "doRemoveRepo");
48 error_log("call setstorage");
49 GLCASpageBuilder($this, "setStorage");
52 error_log("call freezerepo");
53 GLCASpageBuilder($this, "freezeRepo");
59 GLCASpageBuilder($this, "body");
64 echo "REPOADMIN CRON: nothing to see here<br>";
65 // TODO: touch cronstamp file here
67 // make a backup of the config.. but.. errr. how to tell if theres an old backup?
68 // backups will occur... weekly and be called $configpath.DDMMYYYY
69 $configpath = glcas_getWebConfigPath();
70 $basepath = dirname($configpath);
71 echo "REPOADMIN CRON: backing up config, $configpath, $basepath<br>";
73 $oneday = 3600 * 24; // 1 hour in seconds, by 24 hours
74 for($i = 0; $i < 7; $i ++) {
75 $cdatestr = strftime("%d-%h-%Y", $nowtime - ($oneday*$i));
76 $backupfile = "$configpath.$cdatestr";
77 error_log("checking for backup of config as $backupfile");
78 if(file_exists($backupfile)) {
79 error_log("backupconfig exists as $backupfile, exit");
80 echo "ADMIN CRON: backup of config is $backupfile, created $i days ago, not creating new one<br>";
84 $nowdatestr = strftime("%d-%h-%Y");
85 $backupfile = "$configpath.$nowdatestr";
86 copy($configpath, $backupfile);
87 echo "REPOADMIN CRON: createing backup of config as $backupfile<br>";
92 // for the main admin body, we hae the following components
94 // 1. list of currently available repos and stuff
96 // 2. way to add a repo direct
98 // 3. way to scan for a repo given a url
100 // so first, lets do the main body
101 $this->mainBody($url);
104 function freezeRepo($url)
106 $repo = $_REQUEST["repo"];
109 $myRep = new GLCASRepo($this->config);
112 error_log("called freeze repo on $repo");
113 $myRep->freezeRepo($repo);
115 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
116 header("Location: $BASE_URL/repoadmin/");
120 function doRemoveRepo($url)
122 $repo = $_REQUEST["repo"];
123 $myRep = new GLCASRepo($this->config);
126 error_log("called delete repo on $repo");
127 $myRep->deleteRepo($repo);
129 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
130 header("Location: $BASE_URL/repoadmin/");
134 function setStorage($url)
139 function doRepoNextForm($url)
141 $myRep = new GLCASRepo($this->config);
143 $kos = getKnownOSList();
147 if($_REQUEST["repotype"] == "yumbase") {
148 $glt = $myRep->getRepoDetailsYum($_REQUEST["repourl"]);
150 } else if($_REQUEST["repotype"] == "yummirrorlist") {
151 $glt = $myRep->getRepoDetailsYum($_REQUEST["repourl"], true);
153 } else if($_REQUEST["repotype"] == "apt") {
154 $glt = $myRep->getRepoDetailsApt($_REQUEST["repourl"]);
159 error_log("in wasapt");
160 $repourl = $_REQUEST["repourl"];
163 echo "Could not find any apt repository at $repourl<br>";
169 if($glt["nrepos"] > 0) {
171 foreach($glt["knownrepo"] as $key => $val) {
172 $reponame = $kos["apt"][$val];
173 //echo "Fount a repo, $val which is $reponame<br>";
174 $provides .= "$reponame\n";
176 $extratext = " for ".$glt["distros"];
178 //echo "Looks like an apt repo, but I cant find any known distro's<br>";
180 //$existing_repos["distros"] = "Ubuntu, Debian";
181 //$existing_repos["versions"] = "8.04LTS, 9.10, 10.04LTS, 10.10, 11.04, 11.10";
182 //$existing_repos["arch"] = "x86_64, i386";
185 $distros = $glt["distros"];
186 $version = $glt["versions"];
187 $archs = $glt["arch"];
193 echo "The joy of apt is that there could be a million distro's under the root of an apt mirror";
194 echo "if it doesn't list here, but you know its there, its still usable for glcas";
195 echo "<form method=\"post\" action=\"?action=addrepoapt\">";
196 echo "<input type=\"hidden\" name=\"repourl\" value=\"$repourl\">";
197 echo "<input type=\"hidden\" name=\"distro\" value=\"$distros\">";
198 echo "<input type=\"hidden\" name=\"provides\" value=\"Multiple\">";
199 echo "<input type=\"hidden\" name=\"arch\" value=\"$archs\">";
201 echo "<tr><td>Description</td><td><input type=\"text\" name=\"desc\" value=\"APT Repo$extratext\"></td>";
203 // TODO: deal with block bit
204 echo "<tr><td>Provides (tick those you wish to BLOCK - not implemented)</td><td>";
205 foreach($glt["knownrepo"] as $key => $val) {
206 $reponame = $kos["apt"][$val["name"]];
209 if($glt["knownrepo"][$key]["i386"]) $a = "i386";
210 if($glt["knownrepo"][$key]["amd64"]) $b = "x86_64";
211 if($a != "" && $b != "") $archs = "$a/$b";
212 else $archs = "$a$b";
213 echo "<input type=\"checkbox\" name=\"blocked-".$val["name"]."\"> $reponame ($archs)<br>";
217 //echo "<tr><td>Provides</td><td><textarea name=\"provides\" rows=\"".$glt["nrepos"]."\" cols=\"100\">$provides</textarea></td></tr>";
218 echo "<tr><td>Short URL</td><td><input type=\"text\" name=\"shorturl\"></td></tr>";
219 echo "<tr><td>URL Prefix (blank for none)</td><td><input type=\"text\" name=\"prefix\"></td></tr>";
220 echo "<tr><td>Expire time for Meta Data</td><td><input type=\"text\" name=\"expiretime\" value=\"3\"> days</td></tr>";
221 echo "<tr><td><input type=\"submit\" name=\"Add\" value=\"Add\"></td></tr>";
229 $version = $glt["version"];
230 $arch = $glt["arch"];
231 $other = $glt["other"];
232 $repourl = $_REQUEST["repourl"];
233 echo "<form method=\"post\" action=\"?action=addrepoyum\">";
234 echo "<input type=\"hidden\" name=\"repourl\" value=\"$repourl\">";
236 echo "<tr><td>Description</td><td><input type=\"text\" name=\"desc\" value=\"$os, $version, $arch - $other\"></td></tr>";
237 echo "<tr><td>OS</td><td><input type=\"text\" name=\"OS\" value=\"$os\"></td></tr>";
238 echo "<tr><td>Version</td><td><input type=\"text\" name=\"version\" value=\"$version\"></td></tr>";
239 echo "<tr><td>Architecture</td><td><input type=\"text\" name=\"arch\" value=\"$arch\"></td></tr>";
240 echo "<tr><td>Other (OS, Updates, etc)</td><td><input type=\"text\" name=\"other\" value=\"$other\"></td></tr>";
241 echo "<tr><td>Short URL</td><td><input type=\"text\" name=\"shorturl\"></td></tr>";
242 echo "<tr><td>URL Prefix (blank for none)</td><td><input type=\"text\" name=\"prefix\"></td></tr>";
243 echo "<tr><td>Do Initial Update (can take a while, but done in background)</td><td><input type=\"checkbox\" name=\"initial\" checked></td></tr>";
244 echo "<tr><td>Expire time for Meta Data</td><td><input type=\"text\" name=\"expiretime\" value=\"3\"> days</td></tr>";
245 echo "<tr><td><input type=\"submit\" name=\"Add\" value=\"Add\"></td></tr>";
251 function doAddRepoApt($url)
253 $repo = new GLCASRepo($this->config);
255 $desc = $_REQUEST["desc"];
256 $OS = $_REQUEST["distro"];
257 $version = $_REQUEST["provides"];
258 $arch = $_REQUEST["arch"];
259 $shorturl = $_REQUEST["shorturl"];
260 $prefix = $_REQUEST["prefix"];
261 $repurl = $_REQUEST["repourl"];
262 $expiretime = $REQUEST["expiretime"];
264 if(isset($_REQUEST["initial"])) $init = true;
268 foreach($_REQUEST as $key => $val) {
269 if(preg_match("/^blocked-*/", $key)) {
270 $blocked = preg_replace("/^blocked-/", "", $key);
271 //echo "<br>got block for $blocked<br>";
272 $blocklist[$bn] = "dists\/$blocked.*";
278 //print_r($_REQUEST);
283 $repo->addRepo($desc, $OS, $version, $arch, "-", $shorturl, $prefix, $repurl, "APT", $init, $expiretime, $blocklist);
285 // next we need to deal with that "blocked" bit
287 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
288 header("Location: $BASE_URL/repoadmin/");
291 function doAddRepoYum($url)
293 $repo = new GLCASRepo($this->config);
295 $desc = $_REQUEST["desc"];
296 $OS = $_REQUEST["OS"];
297 $version = $_REQUEST["version"];
298 $arch = $_REQUEST["arch"];
299 $other = $_REQUEST["other"];
300 $shorturl = $_REQUEST["shorturl"];
301 $prefix = $_REQUEST["prefix"];
302 $repurl = $_REQUEST["repourl"];
303 $expiretime = $REQUEST["expiretime"];
305 if(isset($_REQUEST["initial"])) $init = true;
309 $repo->addRepo($desc, $OS, $version, $arch, $other, $shorturl, $prefix, $repurl, "YUM", $init, $expiretime);
311 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
312 header("Location: $BASE_URL/repoadmin/");
315 function doUpdateRepo($url)
317 $rkey = $_REQUEST["repo"];
319 error_log("would update for repo");
321 $repo = new GLCASRepo($this->config);
323 $repo->updateRepo($rkey);
324 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
325 header("Location: $BASE_URL/repoadmin/");
328 function mainBody($url)
330 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
332 // first, list available repos
333 echo "<h3>Repositories</h3>";
334 echo "<br><table border=\"1\">";
335 echo "<tr><th>Name</th><th>Type</th><th>OS</th><th>Version</th><th>Architecture</th><th>Other</th><th>Prefix</th><th>Short URL</th><th>Browse</th><th>Control</th></tr>";
337 // now iterate thru the repos and print them
338 $repo = new GLCASRepo($this->config);
339 $repos = $repo->getRepos();
341 foreach($repos as $rkey => $rval) {
342 $desc = $rval["desc"];
344 $version = $rval["version"];
345 $arch = $rval["arch"];
346 $other = $rval["other"];
347 $repotype = $rval["repotype"];
348 $prefix = $rval["prefix"];
349 $shorturl = $rval["shorturl"];
350 if(isset($rval["frozen"])) $frozen = $rval["frozen"];
351 else $frozen = false;
352 if($prefix == "") $prefix = "-";
353 if($shorturl == "") $shorturl = "-";
355 $bgcol = "bgcolor=\"#bbbbff\"";
356 $frotext = "Unfreeze";
361 echo "<tr $bgcol><td>$desc</td><td>$repotype</td><td>$os</td><td>$version</td><td>$arch</td><td>$other</td><td>$prefix</td><td>$shorturl</td>";
364 $browseurl = "$BASE_URL/repo/$rkey";
367 if($prefix != "-") $brurl = "$prefix/$shorturl";
368 $browseurl = "$BASE_URL/$brurl/";
371 echo "<td><a href=\"$browseurl\">Browse</td><td>";
374 echo "<a href=\"?action=editrepo&repo=$rkey\">Edit</a> ";
376 if(!$frozen) echo "<a href=\"?action=updaterepo&repo=$rkey\">Update</a> ";
378 echo "<a href=\"?action=freezerepo&repo=$rkey\">$frotext</a> ";
380 echo "<a href=\"?action=disablerepo&repo=$rkey\">Disable</a> ";
382 echo "<a href=\"?action=cleanrepo&repo=$rkey\">Clean</a> ";
384 echo "<a href=\"?action=deleterepo&repo=$rkey\">Delete</a>";
390 echo "</table><br><hr>";
392 //if($repos !== false) print_r($repos);
395 // wrap all this in a table
396 echo "<table border=\"1\"><tr><td valign=\"top\">";
398 echo "<h3>Add A Repo</h3>";
399 echo "<form method=\"post\" action=\"?action=reponext\">";
400 echo "Type <select name=\"repotype\">";
401 echo "<option value=\"yumbase\">YUM (Base URL)</option>";
402 echo "<option value=\"apt\">APT</option>";
403 echo "</select><br>";
404 echo "URL <input type=\"text\" name=\"repourl\"><br>";
405 echo "<input type=\"submit\" name=\"Add\" value=\"Add\"><br>";
408 echo "</td><td valign=\"top\">";
410 // now scan for a repo
411 echo "<h3>Scan For Repos - not implemented</h3>";
412 echo "<form method=\"post\" action=\"?action=scanrepo\">";
413 echo "Hint <select name=\"repohint\">";
414 echo "<option value=\"fedora\">Fedora</option>";
415 echo "<option value=\"centos\">Centos</option>";
416 echo "</select><br>";
417 echo "URL <input type=\"text\" name=\"repourl\"><br>";
418 echo "<input type=\"submit\" name=\"Scan\" value=\"Scan\"><br>";
421 echo "</td><td valign=\"top\">";
423 // now for mirror lists
424 echo "<h3>Via Mirrolist - not implemented</h3>";
425 echo "<form method=\"post\" action=\"?action=mirrorlist\">";
426 echo "Distro <select name=\"mirrordistro\">";
427 echo "<option value=\"fedora\">Fedora</option>";
428 echo "<option value=\"centos\">Centos</option>";
429 echo "</select><br>";
430 echo "Architecture <select name=\"arch\">";
431 echo "<option value=\"x86_64\">64 bit</option>";
432 echo "<option value=\"i386\">32 bit</option>";
433 echo "</select><br>";
434 echo "Version <input type=\"text\" name=\"version\"><br>";
435 echo "Get updates too <input type=\"checkbox\" name=\"getupdates\"><br>";
436 echo "<input type=\"submit\" name=\"Scan\" value=\"Scan\"><br>";
440 echo "</td></tr></table>";
442 // repo storage location
443 echo "<h3>Storage</h3><br>";
444 echo "<form method=\"post\" action=\"?action=setstorage\">";
445 $storloc = $this->config->getConfig("storagelocation");
446 echo "<input class=\"storage\" type=\"text\" name=\"storageloc\" value=\"$storloc\" size=\"100\">";
447 echo "<input type=\"submit\" name=\"Set\" value=\"Set\">";
451 echo "<h3>Proxy Config</h3><br>";
452 echo "<form method=\"post\" action=\"?action=setproxy\">";
453 $proxyaddress = $this->config->getConfig("proxyaddress");
454 $proxylogin = $this->config->getConfig("proxylogin");
455 $proxypass = $this->config->getConfig("proxypass");
456 echo "Proxy Address <input type=\"text\" name=\"proxyaddress\" value=\"$proxyaddress\" size=\"100\"><br>";
457 echo "Proxy Login <input type=\"text\" name=\"proxylogin\" value=\"$proxylogin\" size=\"100\"><br>";
458 echo "Proxy Password <input type=\"text\" name=\"proxypassword\" value=\"$proxypass\" size=\"100\"><br>";
459 echo "<input type=\"submit\" name=\"Set\" value=\"Set\">";