move admin/plugins::post to submodule and get rid of absolute paths
This commit is contained in:
parent
abb7695624
commit
ed213c4d6d
@ -45,31 +45,6 @@ class Admin extends \Zotlabs\Web\Controller {
|
|||||||
$this->admin_page_channels_post($a);
|
$this->admin_page_channels_post($a);
|
||||||
break;
|
break;
|
||||||
case 'plugins':
|
case 'plugins':
|
||||||
if (argc() > 2 && argv(2) === 'addrepo') {
|
|
||||||
$this->admin_page_plugins_post('addrepo');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (argc() > 2 && argv(2) === 'installrepo') {
|
|
||||||
$this->admin_page_plugins_post('installrepo');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (argc() > 2 && argv(2) === 'removerepo') {
|
|
||||||
$this->admin_page_plugins_post('removerepo');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (argc() > 2 && argv(2) === 'updaterepo') {
|
|
||||||
$this->admin_page_plugins_post('updaterepo');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (argc() > 2 &&
|
|
||||||
is_file("addon/" . argv(2) . "/" . argv(2) . ".php")){
|
|
||||||
@include_once("addon/" . argv(2) . "/" . argv(2) . ".php");
|
|
||||||
if(function_exists(argv(2).'_plugin_admin_post')) {
|
|
||||||
$func = argv(2) . '_plugin_admin_post';
|
|
||||||
$func($a);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
goaway(z_root() . '/admin/plugins/' . argv(2) );
|
|
||||||
break;
|
break;
|
||||||
case 'themes':
|
case 'themes':
|
||||||
$theme = argv(2);
|
$theme = argv(2);
|
||||||
@ -1359,224 +1334,6 @@ class Admin extends \Zotlabs\Web\Controller {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
function admin_page_plugins_post($action) {
|
|
||||||
switch ($action) {
|
|
||||||
case 'updaterepo':
|
|
||||||
if (array_key_exists('repoName', $_REQUEST)) {
|
|
||||||
$repoName = $_REQUEST['repoName'];
|
|
||||||
} else {
|
|
||||||
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
|
|
||||||
}
|
|
||||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
|
||||||
$addonDir = $extendDir . '/addon';
|
|
||||||
if (!file_exists($extendDir)) {
|
|
||||||
if (!mkdir($extendDir, 0770, true)) {
|
|
||||||
logger('Error creating extend folder: ' . $extendDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
|
||||||
} else {
|
|
||||||
if (!symlink(__DIR__ . '/../../extend/addon', $addonDir)) {
|
|
||||||
logger('Error creating symlink to addon folder: ' . $addonDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$repoDir = __DIR__ . '/../../store/[data]/git/sys/extend/addon/' . $repoName;
|
|
||||||
if (!is_dir($repoDir)) {
|
|
||||||
logger('Repo directory does not exist: ' . $repoDir);
|
|
||||||
json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
|
|
||||||
}
|
|
||||||
if (!is_writable($repoDir)) {
|
|
||||||
logger('Repo directory not writable to web server: ' . $repoDir);
|
|
||||||
json_return_and_die(array('message' => 'Repo directory not writable to web server.', 'success' => false));
|
|
||||||
}
|
|
||||||
$git = new GitRepo('sys', null, false, $repoName, $repoDir);
|
|
||||||
try {
|
|
||||||
if ($git->pull()) {
|
|
||||||
$files = array_diff(scandir($repoDir), array('.', '..'));
|
|
||||||
foreach ($files as $file) {
|
|
||||||
if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
|
|
||||||
$source = '../extend/addon/' . $repoName . '/' . $file;
|
|
||||||
$target = realpath(__DIR__ . '/../../addon/') . '/' . $file;
|
|
||||||
unlink($target);
|
|
||||||
if (!symlink($source, $target)) {
|
|
||||||
logger('Error linking addons to /addon');
|
|
||||||
json_return_and_die(array('message' => 'Error linking addons to /addon', 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
json_return_and_die(array('message' => 'Repo updated.', 'success' => true));
|
|
||||||
} else {
|
|
||||||
json_return_and_die(array('message' => 'Error updating addon repo.', 'success' => false));
|
|
||||||
}
|
|
||||||
} catch (\PHPGit\Exception\GitException $e) {
|
|
||||||
json_return_and_die(array('message' => 'Error updating addon repo.', 'success' => false));
|
|
||||||
}
|
|
||||||
case 'removerepo':
|
|
||||||
if (array_key_exists('repoName', $_REQUEST)) {
|
|
||||||
$repoName = $_REQUEST['repoName'];
|
|
||||||
} else {
|
|
||||||
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
|
|
||||||
}
|
|
||||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
|
||||||
$addonDir = $extendDir . '/addon';
|
|
||||||
if (!file_exists($extendDir)) {
|
|
||||||
if (!mkdir($extendDir, 0770, true)) {
|
|
||||||
logger('Error creating extend folder: ' . $extendDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
|
||||||
} else {
|
|
||||||
if (!symlink(__DIR__ . '/../../extend/addon', $addonDir)) {
|
|
||||||
logger('Error creating symlink to addon folder: ' . $addonDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$repoDir = __DIR__ . '/../../store/[data]/git/sys/extend/addon/' . $repoName;
|
|
||||||
if (!is_dir($repoDir)) {
|
|
||||||
logger('Repo directory does not exist: ' . $repoDir);
|
|
||||||
json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
|
|
||||||
}
|
|
||||||
if (!is_writable($repoDir)) {
|
|
||||||
logger('Repo directory not writable to web server: ' . $repoDir);
|
|
||||||
json_return_and_die(array('message' => 'Repo directory not writable to web server.', 'success' => false));
|
|
||||||
}
|
|
||||||
// TODO: remove directory and unlink /addon/files
|
|
||||||
if (rrmdir($repoDir)) {
|
|
||||||
json_return_and_die(array('message' => 'Repo deleted.', 'success' => true));
|
|
||||||
} else {
|
|
||||||
json_return_and_die(array('message' => 'Error deleting addon repo.', 'success' => false));
|
|
||||||
}
|
|
||||||
case 'installrepo':
|
|
||||||
require_once('library/markdown.php');
|
|
||||||
if (array_key_exists('repoURL', $_REQUEST)) {
|
|
||||||
require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
|
|
||||||
$repoURL = $_REQUEST['repoURL'];
|
|
||||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
|
||||||
$addonDir = $extendDir . '/addon';
|
|
||||||
if (!file_exists($extendDir)) {
|
|
||||||
if (!mkdir($extendDir, 0770, true)) {
|
|
||||||
logger('Error creating extend folder: ' . $extendDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
|
||||||
} else {
|
|
||||||
if (!symlink(__DIR__ . '/../../extend/addon', $addonDir)) {
|
|
||||||
logger('Error creating symlink to addon folder: ' . $addonDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!is_writable($extendDir)) {
|
|
||||||
logger('Directory not writable to web server: ' . $extendDir);
|
|
||||||
json_return_and_die(array('message' => 'Directory not writable to web server.', 'success' => false));
|
|
||||||
}
|
|
||||||
$repoName = null;
|
|
||||||
if (array_key_exists('repoName', $_REQUEST) && $_REQUEST['repoName'] !== '') {
|
|
||||||
$repoName = $_REQUEST['repoName'];
|
|
||||||
} else {
|
|
||||||
$repoName = GitRepo::getRepoNameFromURL($repoURL);
|
|
||||||
}
|
|
||||||
if (!$repoName) {
|
|
||||||
logger('Invalid git repo');
|
|
||||||
json_return_and_die(array('message' => 'Invalid git repo', 'success' => false));
|
|
||||||
}
|
|
||||||
$repoDir = $addonDir . '/' . $repoName;
|
|
||||||
$tempRepoBaseDir = __DIR__ . '/../../store/[data]/git/sys/temp/';
|
|
||||||
$tempAddonDir = $tempRepoBaseDir . $repoName;
|
|
||||||
|
|
||||||
if (!is_writable($addonDir) || !is_writable($tempAddonDir)) {
|
|
||||||
logger('Temp repo directory or /extend/addon not writable to web server: ' . $tempAddonDir);
|
|
||||||
json_return_and_die(array('message' => 'Temp repo directory not writable to web server.', 'success' => false));
|
|
||||||
}
|
|
||||||
rename($tempAddonDir, $repoDir);
|
|
||||||
|
|
||||||
if (!is_writable(realpath(__DIR__ . '/../../addon/'))) {
|
|
||||||
logger('/addon directory not writable to web server: ' . $tempAddonDir);
|
|
||||||
json_return_and_die(array('message' => '/addon directory not writable to web server.', 'success' => false));
|
|
||||||
}
|
|
||||||
$files = array_diff(scandir($repoDir), array('.', '..'));
|
|
||||||
foreach ($files as $file) {
|
|
||||||
if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
|
|
||||||
$source = '../extend/addon/' . $repoName . '/' . $file;
|
|
||||||
$target = realpath(__DIR__ . '/../../addon/') . '/' . $file;
|
|
||||||
unlink($target);
|
|
||||||
if (!symlink($source, $target)) {
|
|
||||||
logger('Error linking addons to /addon');
|
|
||||||
json_return_and_die(array('message' => 'Error linking addons to /addon', 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$git = new GitRepo('sys', $repoURL, false, $repoName, $repoDir);
|
|
||||||
$repo = $git->probeRepo();
|
|
||||||
json_return_and_die(array('repo' => $repo, 'message' => '', 'success' => true));
|
|
||||||
}
|
|
||||||
case 'addrepo':
|
|
||||||
require_once('library/markdown.php');
|
|
||||||
if (array_key_exists('repoURL', $_REQUEST)) {
|
|
||||||
require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies
|
|
||||||
$repoURL = $_REQUEST['repoURL'];
|
|
||||||
$extendDir = __DIR__ . '/../../store/[data]/git/sys/extend';
|
|
||||||
$addonDir = $extendDir . '/addon';
|
|
||||||
$tempAddonDir = __DIR__ . '/../../store/[data]/git/sys/temp';
|
|
||||||
if (!file_exists($extendDir)) {
|
|
||||||
if (!mkdir($extendDir, 0770, true)) {
|
|
||||||
logger('Error creating extend folder: ' . $extendDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
|
||||||
} else {
|
|
||||||
if (!symlink(__DIR__ . '/../../extend/addon', $addonDir)) {
|
|
||||||
logger('Error creating symlink to addon folder: ' . $addonDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!is_dir($tempAddonDir)) {
|
|
||||||
if (!mkdir($tempAddonDir, 0770, true)) {
|
|
||||||
logger('Error creating temp plugin repo folder: ' . $tempAddonDir);
|
|
||||||
json_return_and_die(array('message' => 'Error creating temp plugin repo folder: ' . $tempAddonDir, 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$repoName = null;
|
|
||||||
if (array_key_exists('repoName', $_REQUEST) && $_REQUEST['repoName'] !== '') {
|
|
||||||
$repoName = $_REQUEST['repoName'];
|
|
||||||
} else {
|
|
||||||
$repoName = GitRepo::getRepoNameFromURL($repoURL);
|
|
||||||
}
|
|
||||||
if (!$repoName) {
|
|
||||||
logger('Invalid git repo');
|
|
||||||
json_return_and_die(array('message' => 'Invalid git repo: ' . $repoName, 'success' => false));
|
|
||||||
}
|
|
||||||
$repoDir = $tempAddonDir . '/' . $repoName;
|
|
||||||
if (!is_writable($tempAddonDir)) {
|
|
||||||
logger('Temporary directory for new addon repo is not writable to web server: ' . $tempAddonDir);
|
|
||||||
json_return_and_die(array('message' => 'Temporary directory for new addon repo is not writable to web server.', 'success' => false));
|
|
||||||
}
|
|
||||||
// clone the repo if new automatically
|
|
||||||
$git = new GitRepo('sys', $repoURL, true, $repoName, $repoDir);
|
|
||||||
|
|
||||||
$remotes = $git->git->remote();
|
|
||||||
$fetchURL = $remotes['origin']['fetch'];
|
|
||||||
if ($fetchURL !== $git->url) {
|
|
||||||
if (rrmdir($repoDir)) {
|
|
||||||
$git = new GitRepo('sys', $repoURL, true, $repoName, $repoDir);
|
|
||||||
} else {
|
|
||||||
json_return_and_die(array('message' => 'Error deleting existing addon repo.', 'success' => false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$repo = $git->probeRepo();
|
|
||||||
$repo['readme'] = $repo['manifest'] = null;
|
|
||||||
foreach ($git->git->tree('master') as $object) {
|
|
||||||
if ($object['type'] == 'blob' && (strtolower($object['file']) === 'readme.md' || strtolower($object['file']) === 'readme')) {
|
|
||||||
$repo['readme'] = Markdown($git->git->cat->blob($object['hash']));
|
|
||||||
} else if ($object['type'] == 'blob' && strtolower($object['file']) === 'manifest.json') {
|
|
||||||
$repo['manifest'] = $git->git->cat->blob($object['hash']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
json_return_and_die(array('repo' => $repo, 'message' => '', 'success' => true));
|
|
||||||
} else {
|
|
||||||
json_return_and_die(array('message' => 'No repo URL provided', 'success' => false));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function admin_page_profs_post(&$a) {
|
function admin_page_profs_post(&$a) {
|
||||||
|
|
||||||
|
@ -5,6 +5,242 @@ namespace Zotlabs\Module\Admin;
|
|||||||
|
|
||||||
class Plugins {
|
class Plugins {
|
||||||
|
|
||||||
|
|
||||||
|
function post() {
|
||||||
|
|
||||||
|
if(argc() > 2 && is_file("addon/" . argv(2) . "/" . argv(2) . ".php")) {
|
||||||
|
@include_once("addon/" . argv(2) . "/" . argv(2) . ".php");
|
||||||
|
if(function_exists(argv(2).'_plugin_admin_post')) {
|
||||||
|
$func = argv(2) . '_plugin_admin_post';
|
||||||
|
$func($a);
|
||||||
|
}
|
||||||
|
|
||||||
|
goaway(z_root() . '/admin/plugins/' . argv(2) );
|
||||||
|
|
||||||
|
}
|
||||||
|
elseif(argc() > 2) {
|
||||||
|
switch(argv(2)) {
|
||||||
|
case 'updaterepo':
|
||||||
|
if (array_key_exists('repoName', $_REQUEST)) {
|
||||||
|
$repoName = $_REQUEST['repoName'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
|
||||||
|
}
|
||||||
|
$extendDir = 'store/[data]/git/sys/extend';
|
||||||
|
$addonDir = $extendDir . '/addon';
|
||||||
|
if (!file_exists($extendDir)) {
|
||||||
|
if (!mkdir($extendDir, 0770, true)) {
|
||||||
|
logger('Error creating extend folder: ' . $extendDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!symlink('extend/addon', $addonDir)) {
|
||||||
|
logger('Error creating symlink to addon folder: ' . $addonDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$repoDir = 'store/[data]/git/sys/extend/addon/' . $repoName;
|
||||||
|
if (!is_dir($repoDir)) {
|
||||||
|
logger('Repo directory does not exist: ' . $repoDir);
|
||||||
|
json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
|
||||||
|
}
|
||||||
|
if (!is_writable($repoDir)) {
|
||||||
|
logger('Repo directory not writable to web server: ' . $repoDir);
|
||||||
|
json_return_and_die(array('message' => 'Repo directory not writable to web server.', 'success' => false));
|
||||||
|
}
|
||||||
|
$git = new GitRepo('sys', null, false, $repoName, $repoDir);
|
||||||
|
try {
|
||||||
|
if ($git->pull()) {
|
||||||
|
$files = array_diff(scandir($repoDir), array('.', '..'));
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
|
||||||
|
$source = 'extend/addon/' . $repoName . '/' . $file;
|
||||||
|
$target = realpath('addon/') . '/' . $file;
|
||||||
|
unlink($target);
|
||||||
|
if (!symlink($source, $target)) {
|
||||||
|
logger('Error linking addons to /addon');
|
||||||
|
json_return_and_die(array('message' => 'Error linking addons to /addon', 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json_return_and_die(array('message' => 'Repo updated.', 'success' => true));
|
||||||
|
} else {
|
||||||
|
json_return_and_die(array('message' => 'Error updating addon repo.', 'success' => false));
|
||||||
|
}
|
||||||
|
} catch (\PHPGit\Exception\GitException $e) {
|
||||||
|
json_return_and_die(array('message' => 'Error updating addon repo.', 'success' => false));
|
||||||
|
}
|
||||||
|
case 'removerepo':
|
||||||
|
if (array_key_exists('repoName', $_REQUEST)) {
|
||||||
|
$repoName = $_REQUEST['repoName'];
|
||||||
|
} else {
|
||||||
|
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
|
||||||
|
}
|
||||||
|
$extendDir = 'store/[data]/git/sys/extend';
|
||||||
|
$addonDir = $extendDir . '/addon';
|
||||||
|
if (!file_exists($extendDir)) {
|
||||||
|
if (!mkdir($extendDir, 0770, true)) {
|
||||||
|
logger('Error creating extend folder: ' . $extendDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
||||||
|
} else {
|
||||||
|
if (!symlink('extend/addon', $addonDir)) {
|
||||||
|
logger('Error creating symlink to addon folder: ' . $addonDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$repoDir = 'store/[data]/git/sys/extend/addon/' . $repoName;
|
||||||
|
if (!is_dir($repoDir)) {
|
||||||
|
logger('Repo directory does not exist: ' . $repoDir);
|
||||||
|
json_return_and_die(array('message' => 'Invalid addon repo.', 'success' => false));
|
||||||
|
}
|
||||||
|
if (!is_writable($repoDir)) {
|
||||||
|
logger('Repo directory not writable to web server: ' . $repoDir);
|
||||||
|
json_return_and_die(array('message' => 'Repo directory not writable to web server.', 'success' => false));
|
||||||
|
}
|
||||||
|
// TODO: remove directory and unlink /addon/files
|
||||||
|
if (rrmdir($repoDir)) {
|
||||||
|
json_return_and_die(array('message' => 'Repo deleted.', 'success' => true));
|
||||||
|
} else {
|
||||||
|
json_return_and_die(array('message' => 'Error deleting addon repo.', 'success' => false));
|
||||||
|
}
|
||||||
|
case 'installrepo':
|
||||||
|
require_once('library/markdown.php');
|
||||||
|
if (array_key_exists('repoURL', $_REQUEST)) {
|
||||||
|
require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
|
||||||
|
$repoURL = $_REQUEST['repoURL'];
|
||||||
|
$extendDir = 'store/[data]/git/sys/extend';
|
||||||
|
$addonDir = $extendDir . '/addon';
|
||||||
|
if (!file_exists($extendDir)) {
|
||||||
|
if (!mkdir($extendDir, 0770, true)) {
|
||||||
|
logger('Error creating extend folder: ' . $extendDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
||||||
|
} else {
|
||||||
|
if (!symlink('extend/addon', $addonDir)) {
|
||||||
|
logger('Error creating symlink to addon folder: ' . $addonDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!is_writable($extendDir)) {
|
||||||
|
logger('Directory not writable to web server: ' . $extendDir);
|
||||||
|
json_return_and_die(array('message' => 'Directory not writable to web server.', 'success' => false));
|
||||||
|
}
|
||||||
|
$repoName = null;
|
||||||
|
if (array_key_exists('repoName', $_REQUEST) && $_REQUEST['repoName'] !== '') {
|
||||||
|
$repoName = $_REQUEST['repoName'];
|
||||||
|
} else {
|
||||||
|
$repoName = GitRepo::getRepoNameFromURL($repoURL);
|
||||||
|
}
|
||||||
|
if (!$repoName) {
|
||||||
|
logger('Invalid git repo');
|
||||||
|
json_return_and_die(array('message' => 'Invalid git repo', 'success' => false));
|
||||||
|
}
|
||||||
|
$repoDir = $addonDir . '/' . $repoName;
|
||||||
|
$tempRepoBaseDir = 'store/[data]/git/sys/temp/';
|
||||||
|
$tempAddonDir = $tempRepoBaseDir . $repoName;
|
||||||
|
|
||||||
|
if (!is_writable($addonDir) || !is_writable($tempAddonDir)) {
|
||||||
|
logger('Temp repo directory or /extend/addon not writable to web server: ' . $tempAddonDir);
|
||||||
|
json_return_and_die(array('message' => 'Temp repo directory not writable to web server.', 'success' => false));
|
||||||
|
}
|
||||||
|
rename($tempAddonDir, $repoDir);
|
||||||
|
|
||||||
|
if (!is_writable(realpath('addon/'))) {
|
||||||
|
logger('/addon directory not writable to web server: ' . $tempAddonDir);
|
||||||
|
json_return_and_die(array('message' => '/addon directory not writable to web server.', 'success' => false));
|
||||||
|
}
|
||||||
|
$files = array_diff(scandir($repoDir), array('.', '..'));
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
|
||||||
|
$source = 'extend/addon/' . $repoName . '/' . $file;
|
||||||
|
$target = realpath('addon/') . '/' . $file;
|
||||||
|
unlink($target);
|
||||||
|
if (!symlink($source, $target)) {
|
||||||
|
logger('Error linking addons to /addon');
|
||||||
|
json_return_and_die(array('message' => 'Error linking addons to /addon', 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$git = new GitRepo('sys', $repoURL, false, $repoName, $repoDir);
|
||||||
|
$repo = $git->probeRepo();
|
||||||
|
json_return_and_die(array('repo' => $repo, 'message' => '', 'success' => true));
|
||||||
|
}
|
||||||
|
case 'addrepo':
|
||||||
|
require_once('library/markdown.php');
|
||||||
|
if (array_key_exists('repoURL', $_REQUEST)) {
|
||||||
|
require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
|
||||||
|
$repoURL = $_REQUEST['repoURL'];
|
||||||
|
$extendDir = 'store/[data]/git/sys/extend';
|
||||||
|
$addonDir = $extendDir . '/addon';
|
||||||
|
$tempAddonDir = 'store/[data]/git/sys/temp';
|
||||||
|
if (!file_exists($extendDir)) {
|
||||||
|
if (!mkdir($extendDir, 0770, true)) {
|
||||||
|
logger('Error creating extend folder: ' . $extendDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
|
||||||
|
} else {
|
||||||
|
if (!symlink('extend/addon', $addonDir)) {
|
||||||
|
logger('Error creating symlink to addon folder: ' . $addonDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!is_dir($tempAddonDir)) {
|
||||||
|
if (!mkdir($tempAddonDir, 0770, true)) {
|
||||||
|
logger('Error creating temp plugin repo folder: ' . $tempAddonDir);
|
||||||
|
json_return_and_die(array('message' => 'Error creating temp plugin repo folder: ' . $tempAddonDir, 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$repoName = null;
|
||||||
|
if (array_key_exists('repoName', $_REQUEST) && $_REQUEST['repoName'] !== '') {
|
||||||
|
$repoName = $_REQUEST['repoName'];
|
||||||
|
} else {
|
||||||
|
$repoName = GitRepo::getRepoNameFromURL($repoURL);
|
||||||
|
}
|
||||||
|
if (!$repoName) {
|
||||||
|
logger('Invalid git repo');
|
||||||
|
json_return_and_die(array('message' => 'Invalid git repo: ' . $repoName, 'success' => false));
|
||||||
|
}
|
||||||
|
$repoDir = $tempAddonDir . '/' . $repoName;
|
||||||
|
if (!is_writable($tempAddonDir)) {
|
||||||
|
logger('Temporary directory for new addon repo is not writable to web server: ' . $tempAddonDir);
|
||||||
|
json_return_and_die(array('message' => 'Temporary directory for new addon repo is not writable to web server.', 'success' => false));
|
||||||
|
}
|
||||||
|
// clone the repo if new automatically
|
||||||
|
$git = new GitRepo('sys', $repoURL, true, $repoName, $repoDir);
|
||||||
|
|
||||||
|
$remotes = $git->git->remote();
|
||||||
|
$fetchURL = $remotes['origin']['fetch'];
|
||||||
|
if ($fetchURL !== $git->url) {
|
||||||
|
if (rrmdir($repoDir)) {
|
||||||
|
$git = new GitRepo('sys', $repoURL, true, $repoName, $repoDir);
|
||||||
|
} else {
|
||||||
|
json_return_and_die(array('message' => 'Error deleting existing addon repo.', 'success' => false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$repo = $git->probeRepo();
|
||||||
|
$repo['readme'] = $repo['manifest'] = null;
|
||||||
|
foreach ($git->git->tree('master') as $object) {
|
||||||
|
if ($object['type'] == 'blob' && (strtolower($object['file']) === 'readme.md' || strtolower($object['file']) === 'readme')) {
|
||||||
|
$repo['readme'] = Markdown($git->git->cat->blob($object['hash']));
|
||||||
|
} else if ($object['type'] == 'blob' && strtolower($object['file']) === 'manifest.json') {
|
||||||
|
$repo['manifest'] = $git->git->cat->blob($object['hash']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json_return_and_die(array('repo' => $repo, 'message' => '', 'success' => true));
|
||||||
|
} else {
|
||||||
|
json_return_and_die(array('message' => 'No repo URL provided', 'success' => false));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function get() {
|
function get() {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -211,7 +447,7 @@ class Plugins {
|
|||||||
|
|
||||||
function listAddonRepos() {
|
function listAddonRepos() {
|
||||||
$addonrepos = [];
|
$addonrepos = [];
|
||||||
$addonDir = __DIR__ . '/../../extend/addon/';
|
$addonDir = 'extend/addon/';
|
||||||
if(is_dir($addonDir)) {
|
if(is_dir($addonDir)) {
|
||||||
if ($handle = opendir($addonDir)) {
|
if ($handle = opendir($addonDir)) {
|
||||||
while (false !== ($entry = readdir($handle))) {
|
while (false !== ($entry = readdir($handle))) {
|
||||||
|
Reference in New Issue
Block a user