X-Git-Url: http://git.pjr.cc/?a=blobdiff_plain;f=plugins%2Fadmin.php;h=e7dcd142e81f10eb956bd970450387cd4471aef9;hb=155c0a1bc81dff4fc1bb4bcebb754c961e457499;hp=af5ed85612d29a2d12b129c0f9c3bbd04e42f9e5;hpb=f3bb1ef4d1fb0297498f8a1a30c2332e2e5905e8;p=glcas.git diff --git a/plugins/admin.php b/plugins/admin.php index af5ed85..e7dcd14 100644 --- a/plugins/admin.php +++ b/plugins/admin.php @@ -2,8 +2,14 @@ error_log("admin loaded"); +global $BASE_URL, $MENU_ITEMS; +$MENU_ITEMS["10admin"]["name"] = "Admin"; +$MENU_ITEMS["10admin"]["link"] = "$BASE_URL/admin"; + global $URL_HANDLERS; $URL_HANDLERS["admin.*"] = "GLCASAdmin"; +global $CRON_CLASSES; +$CRON_CLASSES["GLCASAdmin"] = "GLCASAdmin"; class GLCASAdmin { function __construct($config) @@ -19,10 +25,33 @@ class GLCASAdmin { if(isset($_REQUEST["action"])) { switch($_REQUEST["action"]) { - case "addrepo": - GLCASpageBuilder($this,"doAddRepoForm"); + case "updaterepo": + error_log("in updaterepo"); + GLCASpageBuilder($this,"doUpdateRepo"); + return; + case "reponext": + error_log("in reponext"); + GLCASpageBuilder($this,"doRepoNextForm"); return; break; + case "addrepoapt": + GLCASpageBuilder($this,"doAddRepoApt"); + return; + case "addrepoyum": + GLCASpageBuilder($this,"doAddRepoYum"); + return; + case "deleterepo": + error_log("call delete repo"); + GLCASpageBuilder($this, "doRemoveRepo"); + return; + case "setstorage": + error_log("call setstorage"); + GLCASpageBuilder($this, "setStorage"); + return; + case "freezerepo": + error_log("call freezerepo"); + GLCASpageBuilder($this, "freezeRepo"); + return; case "scanrepo": break; } @@ -30,6 +59,34 @@ class GLCASAdmin { GLCASpageBuilder($this, "body"); } + function cron() + { + echo "ADMIN CRON: nothing to see here
"; + // TODO: touch cronstamp file here + + // make a backup of the config.. but.. errr. how to tell if theres an old backup? + // backups will occur... weekly and be called $configpath.DDMMYYYY + $configpath = glcas_getWebConfigPath(); + $basepath = dirname($configpath); + echo "ADMIN CRON: backing up config, $configpath, $basepath
"; + $nowtime = time(); + $oneday = 3600 * 24; // 1 hour in seconds, by 24 hours + for($i = 0; $i < 7; $i ++) { + $cdatestr = strftime("%d-%h-%Y", $nowtime - ($oneday*$i)); + $backupfile = "$configpath.$cdatestr"; + error_log("checking for backup of config as $backupfile"); + if(file_exists($backupfile)) { + error_log("backupconfig exists as $backupfile, exit"); + echo "ADMIN CRON: backup of config is $backupfile, created $i days ago, not creating new one
"; + return; + } + } + $nowdatestr = strftime("%d-%h-%Y"); + $backupfile = "$configpath.$nowdatestr"; + copy($configpath, $backupfile); + echo "ADMIN CRON: createing backup of config as $backupfile
"; + } + function body($url) { // for the main admin body, we hae the following components @@ -44,11 +101,49 @@ class GLCASAdmin { $this->mainBody($url); } - function doAddRepoForm($url) + function freezeRepo($url) + { + $repo = $_REQUEST["repo"]; + + + $myRep = new GLCASRepo($this->config); + + + error_log("called freeze repo on $repo"); + $myRep->freezeRepo($repo); + + global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL; + header("Location: $BASE_URL/admin/"); + + } + + function doRemoveRepo($url) { + $repo = $_REQUEST["repo"]; $myRep = new GLCASRepo($this->config); + + error_log("called delete repo on $repo"); + $myRep->deleteRepo($repo); + + global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL; + header("Location: $BASE_URL/admin/"); + } + + + function setStorage($url) + { + + } + + function doRepoNextForm($url) + { + $myRep = new GLCASRepo($this->config); + + $kos = getKnownOSList(); + $wasyum = false; + $wasapt = false; if($_REQUEST["repotype"] == "yumbase") { $glt = $myRep->getRepoDetailsYum($_REQUEST["repourl"]); $wasyum = true; @@ -57,62 +152,313 @@ class GLCASAdmin { $wasyum = true; } else if($_REQUEST["repotype"] == "apt") { $glt = $myRep->getRepoDetailsApt($_REQUEST["repourl"]); + $wasapt = true; } + if($wasapt) { + error_log("in wasapt"); + $repourl = $_REQUEST["repourl"]; + + if($glt === false) { + echo "Could not find any apt repository at $repourl
"; + return; + } + + $extratext = ""; + $provides = ""; + if($glt["nrepos"] > 0) { + + foreach($glt["knownrepo"] as $key => $val) { + $reponame = $kos["apt"][$val]; + //echo "Fount a repo, $val which is $reponame
"; + $provides .= "$reponame\n"; + } + $extratext = " for ".$glt["distros"]; + } else { + //echo "Looks like an apt repo, but I cant find any known distro's
"; + } + //$existing_repos["distros"] = "Ubuntu, Debian"; + //$existing_repos["versions"] = "8.04LTS, 9.10, 10.04LTS, 10.10, 11.04, 11.10"; + //$existing_repos["arch"] = "x86_64, i386"; + + + $distros = $glt["distros"]; + $version = $glt["versions"]; + $archs = $glt["arch"]; + + //echo "
";
+			//print_r($glt);
+			//echo "
"; + + echo "The joy of apt is that there could be a million distro's under the root of an apt mirror"; + echo "if it doesn't list here, but you know its there, its still usable for glcas"; + echo "
"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + + // TODO: deal with block bit + echo ""; + //echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
Description
Provides (tick those you wish to BLOCK - not implemented)"; + foreach($glt["knownrepo"] as $key => $val) { + $reponame = $kos["apt"][$val["name"]]; + $a = ""; + $b = ""; + if($glt["knownrepo"][$key]["i386"]) $a = "i386"; + if($glt["knownrepo"][$key]["amd64"]) $b = "x86_64"; + if($a != "" && $b != "") $archs = "$a/$b"; + else $archs = "$a$b"; + echo " $reponame ($archs)
"; + } + + echo "
Provides
Short URL
URL Prefix (blank for none)
Expire time for Meta Data days
"; + echo "
"; + return true; + } if($wasyum) { $os = $glt["OS"]; $version = $glt["version"]; $arch = $glt["arch"]; - echo "
"; - echo "OS:
"; - echo "Version:
"; - echo "Architecture:
"; - echo "Short URL
"; - echo "URL Prefix (blank for none)
"; - echo "
"; + $other = $glt["other"]; + $repourl = $_REQUEST["repourl"]; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
Description
OS
Version
Architecture
Other (OS, Updates, etc)
Short URL
URL Prefix (blank for none)
Do Initial Update (can take a while, but done in background)
Expire time for Meta Data days
"; echo "
"; - } else { - // apt is much tricker cause one repo can provide multiple versions, OS's and architectures. } } + + function doAddRepoApt($url) + { + $repo = new GLCASRepo($this->config); + + $desc = $_REQUEST["desc"]; + $OS = $_REQUEST["distro"]; + $version = $_REQUEST["provides"]; + $arch = $_REQUEST["arch"]; + $shorturl = $_REQUEST["shorturl"]; + $prefix = $_REQUEST["prefix"]; + $repurl = $_REQUEST["repourl"]; + $expiretime = $REQUEST["expiretime"]; + $init = false; + if(isset($_REQUEST["initial"])) $init = true; + + $blocklist = null; + $bn = 0; + foreach($_REQUEST as $key => $val) { + if(preg_match("/^blocked-*/", $key)) { + $blocked = preg_replace("/^blocked-/", "", $key); + //echo "
got block for $blocked
"; + $blocklist[$bn] = "dists\/$blocked.*"; + $bn++; + } + } + + //echo "
";
+		//print_r($_REQUEST);
+		//echo "
"; + + //exit(0); + + $repo->addRepo($desc, $OS, $version, $arch, "-", $shorturl, $prefix, $repurl, "APT", $init, $expiretime, $blocklist); + + // next we need to deal with that "blocked" bit + + global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL; + header("Location: $BASE_URL/admin/"); + } + + function doAddRepoYum($url) + { + $repo = new GLCASRepo($this->config); + + $desc = $_REQUEST["desc"]; + $OS = $_REQUEST["OS"]; + $version = $_REQUEST["version"]; + $arch = $_REQUEST["arch"]; + $other = $_REQUEST["other"]; + $shorturl = $_REQUEST["shorturl"]; + $prefix = $_REQUEST["prefix"]; + $repurl = $_REQUEST["repourl"]; + $expiretime = $REQUEST["expiretime"]; + $init = false; + if(isset($_REQUEST["initial"])) $init = true; + + + + $repo->addRepo($desc, $OS, $version, $arch, $other, $shorturl, $prefix, $repurl, "YUM", $init, $expiretime); + + global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL; + header("Location: $BASE_URL/admin/"); + } + + function doUpdateRepo($url) + { + $rkey = $_REQUEST["repo"]; + + error_log("would update for repo"); + + $repo = new GLCASRepo($this->config); + + $repo->updateRepo($rkey); + global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL; + header("Location: $BASE_URL/admin/"); + } function mainBody($url) { + global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL; + // first, list available repos - echo "

Repositories


"; - echo ""; + echo "

Repositories

"; + echo "
NameTypeVersionBrowseControl
"; + echo ""; + + // now iterate thru the repos and print them + $repo = new GLCASRepo($this->config); + $repos = $repo->getRepos(); + + foreach($repos as $rkey => $rval) { + $desc = $rval["desc"]; + $os = $rval["os"]; + $version = $rval["version"]; + $arch = $rval["arch"]; + $other = $rval["other"]; + $repotype = $rval["repotype"]; + $prefix = $rval["prefix"]; + $shorturl = $rval["shorturl"]; + if(isset($rval["frozen"])) $frozen = $rval["frozen"]; + else $frozen = false; + if($prefix == "") $prefix = "-"; + if($shorturl == "") $shorturl = "-"; + if($frozen) { + $bgcol = "bgcolor=\"#bbbbff\""; + $frotext = "Unfreeze"; + } else { + $frotext = "Freeze"; + $bgcol = ""; + } + echo ""; + + // get url + $browseurl = "$BASE_URL/repo/$rkey"; + if($shorturl!="-") { + $brurl = $shorturl; + if($prefix != "-") $brurl = "$prefix/$shorturl"; + $browseurl = "$BASE_URL/$brurl/"; + } + + echo ""; + echo ""; + } + echo "
NameTypeOSVersionArchitectureOtherPrefixShort URLBrowseControl
$desc$repotype$os$version$arch$other$prefix$shorturlBrowse"; + + // Edit + echo "Edit "; + // update + if(!$frozen) echo "Update "; + // freeze + echo "$frotext "; + // deactivate + echo "Disable "; + // clean + echo "Clean "; + // Remove + echo "Delete"; + + echo "


"; + //echo "
";
+		//if($repos !== false) print_r($repos);
+		//echo "
"; // wrap all this in a table - echo "
"; + echo "
"; // now, add a repo echo "

Add A Repo

"; - echo "
"; + echo ""; echo "Type
"; echo "URL
"; echo "
"; - echo "

"; + echo ""; echo "
"; // now scan for a repo - echo "

Scan For Repos

"; + echo "

Scan For Repos - not implemented

"; echo "
"; echo "Hint
"; echo "URL
"; echo "
"; echo "
"; + echo "
"; + + // now for mirror lists + echo "

Via Mirrolist - not implemented

"; + echo "
"; + echo "Distro
"; + echo "Architecture
"; + echo "Version
"; + echo "Get updates too
"; + echo "
"; + echo "
"; + + echo "
"; + + // repo storage location + echo "

Storage


"; + echo "
"; + $storloc = $this->config->getConfig("storagelocation"); + echo ""; + echo ""; + echo "
"; + + echo "
"; + echo "

Proxy Config


"; + echo "
"; + $proxyaddress = $this->config->getConfig("proxyaddress"); + $proxylogin = $this->config->getConfig("proxylogin"); + $proxypass = $this->config->getConfig("proxypass"); + echo "Proxy Address
"; + echo "Proxy Login
"; + echo "Proxy Password
"; + echo ""; + echo "
"; + } private $config;