aboutsummaryrefslogtreecommitdiffstats
path: root/Zotlabs/Module
diff options
context:
space:
mode:
authorAndrew Manning <tamanning@zoho.com>2016-05-01 22:29:51 -0400
committerAndrew Manning <tamanning@zoho.com>2016-05-01 22:29:51 -0400
commitc2d15e6c3bd8a29bae89d184a999ddac15fcb807 (patch)
tree96cbbfa98f131d830fbfd154f82e37383bb37bd8 /Zotlabs/Module
parentb1ae4d776c7c093c7f3ff6905e1a5302fbd5e3f6 (diff)
downloadvolse-hubzilla-c2d15e6c3bd8a29bae89d184a999ddac15fcb807.tar.gz
volse-hubzilla-c2d15e6c3bd8a29bae89d184a999ddac15fcb807.tar.bz2
volse-hubzilla-c2d15e6c3bd8a29bae89d184a999ddac15fcb807.zip
New plugin repo is cloned to /store/pluginrepos/REPONAME for analysis
Diffstat (limited to 'Zotlabs/Module')
-rw-r--r--Zotlabs/Module/Admin.php58
1 files changed, 57 insertions, 1 deletions
diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php
index 1f228a991..9bc0482c0 100644
--- a/Zotlabs/Module/Admin.php
+++ b/Zotlabs/Module/Admin.php
@@ -1,5 +1,8 @@
<?php
namespace Zotlabs\Module;
+
+use PHPGit\Git as Git;
+
/**
* @file mod/admin.php
* @brief Hubzilla's admin controller.
@@ -36,6 +39,10 @@ class Admin extends \Zotlabs\Web\Controller {
$this->admin_page_channels_post($a);
break;
case 'plugins':
+ if (argc() > 2 && argv(2) === 'addrepo') {
+ $this->admin_page_plugins_post('addrepo');
+ break;
+ }
if (argc() > 2 &&
is_file("addon/" . argv(2) . "/" . argv(2) . ".php")){
@include_once("addon/" . argv(2) . "/" . argv(2) . ".php");
@@ -1329,7 +1336,7 @@ class Admin extends \Zotlabs\Web\Controller {
$admin_plugins_add_repo_form= replace_macros(
get_markup_template('admin_plugins_addrepo.tpl'), array(
- '$post' => 'admin/plugins',
+ '$post' => 'admin/plugins/addrepo',
'$desc' => t('Enter the public git repository URL of the plugin repo.'),
'$repoURL' => array('repoURL', t('Plugin repo git URL'), '', ''),
'$submit' => t('Download Plugin Repo')
@@ -1638,6 +1645,55 @@ class Admin extends \Zotlabs\Web\Controller {
));
}
+ function admin_page_plugins_post($action) {
+ switch($action) {
+ case 'addrepo':
+
+ if(array_key_exists('repoURL',$_REQUEST)) {
+ require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
+ info('Repo URL submitted: ' . $_REQUEST['repoURL']);
+ //$git = new Git();
+ $repoURL = $_REQUEST['repoURL'];
+ //logger('hubsites: new git object created: ' . json_encode($git));
+ $urlpath = parse_url($repoURL, PHP_URL_PATH);
+ $lastslash = strrpos($urlpath, '/') + 1;
+ $gitext = strrpos($urlpath, '.');
+ if ($gitext) {
+ $reponame = substr($urlpath, $lastslash, $gitext - $lastslash);
+ } else {
+ logger('invalid git repo URL');
+ notice('Invalid git repo URL');
+ break;
+ }
+ $storepath = realpath(__DIR__ . '/../../store/');
+ logger('storepath: ' . $storepath);
+ $repopath = $storepath . '/pluginrepos/' . $reponame;
+
+ if (!file_exists($repopath)) {
+ logger('epopath does not exist');
+ if (mkdir($repopath, 0770, true)) {
+ logger('repopath created');
+ $git = new Git();
+ logger('new git object created');
+ $cloned = $git->clone($repoURL, $repopath);
+ if (!$cloned) {
+ logger('git clone failed');
+ notice('Repo coule not be cloned. Filesystem path error.');
+ return null;
+ }
+ } else {
+ logger('repopath could not be created');
+ notice('Repo coule not be cloned. Filesystem path error.');
+ return null;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
function admin_page_profs_post(&$a) {
if(array_key_exists('basic',$_REQUEST)) {