diff --git a/appinfo/info.xml b/appinfo/info.xml
index cc6bcd0..7b1cde4 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -11,11 +11,11 @@
OCCWeb
tools
https://git.adphi.net/Adphi/OCCWeb
- https://git.adphi.net/Adphi/OCCWeb/raw/master/appinfo/screenshot.png
- https://git.adphi.net/Adphi/OCCWeb
https://git.adphi.net/Adphi/OCCWeb/issues
+ https://git.adphi.net/Adphi/OCCWeb
+ https://git.adphi.net/Adphi/OCCWeb/raw/master/appinfo/screenshot.png
-
+
diff --git a/lib/Controller/.DS_Store b/lib/Controller/.DS_Store
deleted file mode 100644
index 5008ddf..0000000
Binary files a/lib/Controller/.DS_Store and /dev/null differ
diff --git a/lib/Controller/FakeRequest.php b/lib/Controller/FakeRequest.php
new file mode 100644
index 0000000..d4dce50
--- /dev/null
+++ b/lib/Controller/FakeRequest.php
@@ -0,0 +1,20 @@
+ ["occ"],
+ );
+
+ /**
+ * FakeRequest constructor.
+ */
+ public function __construct() {
+ }
+
+}
diff --git a/lib/Controller/OCCApplication.php b/lib/Controller/OCCApplication.php
deleted file mode 100644
index 928d264..0000000
--- a/lib/Controller/OCCApplication.php
+++ /dev/null
@@ -1,225 +0,0 @@
-
- * @author Jörn Friedrich Dreyer
- * @author Lukas Reschke
- * @author Miha Frangez
- * @author Morris Jobke
- * @author noveens
- * @author Robin Appelman
- * @author Thomas Müller
- * @author Victor Dubiniuk
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see
- *
- */
-namespace OCA\OCCWeb\Controller;
-
-//use OC\MemoryInfo;
-use OC\NeedsUpdateException;
-use OC_App;
-use OCP\AppFramework\QueryException;
-use OCP\Console\ConsoleEvent;
-use OCP\IConfig;
-use OCP\ILogger;
-use Symfony\Component\Console\Application as SymfonyApplication;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\ConsoleOutputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-
-class OCCApplication {
- /** @var IConfig */
- private $config;
- /** @var EventDispatcherInterface */
- private $dispatcher;
- /** @var ILogger */
- private $logger;
-// /** @var MemoryInfo */
-// private $memoryInfo;
-
- /**
- * @param IConfig $config
- * @param EventDispatcherInterface $dispatcher
- * @param ILogger $logger
- * @param MemoryInfo $memoryInfo
- */
- public function __construct(IConfig $config,
- EventDispatcherInterface $dispatcher,
- ILogger $logger/*,
- MemoryInfo $memoryInfo*/) {
- $defaults = \OC::$server->getThemingDefaults();
- $this->config = $config;
- $this->application = new SymfonyApplication($defaults->getName(), \OC_Util::getVersionString());
- $this->dispatcher = $dispatcher;
- $this->logger = $logger;
-// $this->memoryInfo = $memoryInfo;
- }
-
- /**
- * @param InputInterface $input
- * @param ConsoleOutputInterface $output
- * @throws \Exception
- */
- public function loadCommands(
- InputInterface $input,
- ConsoleOutputInterface $output
- ) {
- // $application is required to be defined in the register_command scripts
- $application = $this->application;
- $inputDefinition = $application->getDefinition();
- $inputDefinition->addOption(
- new InputOption(
- 'no-warnings',
- null,
- InputOption::VALUE_NONE,
- 'Skip global warnings, show command output only',
- null
- )
- );
- try {
- $input->bind($inputDefinition);
- } catch (\RuntimeException $e) {
- //expected if there are extra options
- }
- if ($input->getOption('no-warnings')) {
- $output->setVerbosity(OutputInterface::VERBOSITY_QUIET);
- }
-
-// if ($this->memoryInfo->isMemoryLimitSufficient() === false) {
-// $output->getErrorOutput()->writeln(
-// 'The current PHP memory limit ' .
-// 'is below the recommended value of 512MB.'
-// );
-// }
-
- try {
- require_once \OC::$SERVERROOT . '/core/register_command.php';
- if ($this->config->getSystemValue('installed', false)) {
- if (\OCP\Util::needUpgrade()) {
- throw new NeedsUpdateException();
- } elseif ($this->config->getSystemValue('maintenance', false)) {
- $this->writeMaintenanceModeInfo($input, $output);
- } else {
- OC_App::loadApps();
- foreach (\OC::$server->getAppManager()->getInstalledApps() as $app) {
- $appPath = \OC_App::getAppPath($app);
- if ($appPath === false) {
- continue;
- }
- // load commands using info.xml
- $info = \OC_App::getAppInfo($app);
- if (isset($info['commands'])) {
- $this->loadCommandsFromInfoXml($info['commands']);
- }
- // load from register_command.php
- \OC_App::registerAutoloading($app, $appPath);
- $file = $appPath . '/appinfo/register_command.php';
- if (file_exists($file)) {
- try {
- require $file;
- } catch (\Exception $e) {
- $this->logger->logException($e);
- }
- }
- }
- }
- } else if ($input->getArgument('command') !== '_completion' && $input->getArgument('command') !== 'maintenance:install') {
- $output->writeln("Nextcloud is not installed - only a limited number of commands are available");
- }
- } catch(NeedsUpdateException $e) {
- if ($input->getArgument('command') !== '_completion') {
- $output->writeln("Nextcloud or one of the apps require upgrade - only a limited number of commands are available");
- $output->writeln("You may use your browser or the occ upgrade command to do the upgrade");
- }
- }
-
- if ($input->getFirstArgument() !== 'check') {
- $errors = \OC_Util::checkServer(\OC::$server->getSystemConfig());
- if (!empty($errors)) {
- foreach ($errors as $error) {
- $output->writeln((string)$error['error']);
- $output->writeln((string)$error['hint']);
- $output->writeln('');
- }
- throw new \Exception("Environment not properly prepared.");
- }
- }
- }
-
- /**
- * Write a maintenance mode info.
- * The commands "_completion" and "maintenance:mode" are excluded.
- *
- * @param InputInterface $input The input implementation for reading inputs.
- * @param ConsoleOutputInterface $output The output implementation
- * for writing outputs.
- * @return void
- */
- private function writeMaintenanceModeInfo(
- InputInterface $input, ConsoleOutputInterface $output
- ) {
- if ($input->getArgument('command') !== '_completion'
- && $input->getArgument('command') !== 'maintenance:mode') {
- $errOutput = $output->getErrorOutput();
- $errOutput->writeln(
- 'Nextcloud is in maintenance mode - ' .
- 'no apps have been loaded' . PHP_EOL
- );
- }
- }
-
- /**
- * Sets whether to automatically exit after a command execution or not.
- *
- * @param bool $boolean Whether to automatically exit after a command execution or not
- */
- public function setAutoExit($boolean) {
- $this->application->setAutoExit($boolean);
- }
-
- /**
- * @param InputInterface $input
- * @param OutputInterface $output
- * @return int
- * @throws \Exception
- */
- public function run(InputInterface $input = null, OutputInterface $output = null) {
- $this->dispatcher->dispatch(ConsoleEvent::EVENT_RUN, new ConsoleEvent(
- ConsoleEvent::EVENT_RUN,
- ['occ']
- ));
- return $this->application->run($input, $output);
- }
-
- private function loadCommandsFromInfoXml($commands) {
- foreach ($commands as $command) {
- try {
- $c = \OC::$server->query($command);
- } catch (QueryException $e) {
- if (class_exists($command)) {
- $c = new $command();
- } else {
- throw new \Exception("Console command '$command' is unknown and could not be loaded");
- }
- }
-
- $this->application->add($c);
- }
- }
-}
diff --git a/lib/Controller/OCCController.php b/lib/Controller/OCCController.php
index 38dcc9b..ac0b64c 100644
--- a/lib/Controller/OCCController.php
+++ b/lib/Controller/OCCController.php
@@ -2,6 +2,10 @@
namespace OCA\OCCWeb\Controller;
+use Exception;
+use OC;
+use OC\Console\Application;
+use OC\MemoryInfo;
use OCP\IRequest;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http\DataResponse;
@@ -18,49 +22,42 @@ class OccController extends Controller
private $application;
private $output;
- public $server;
-
- public function __construct(ILogger $logger, $AppName, IRequest $request, $UserId)
+ public function __construct(ILogger $logger, $AppName, IRequest $request, $userId)
{
parent::__construct($AppName, $request);
$this->logger = $logger;
- $this->userId = $UserId;
+ $this->userId = $userId;
- $this->server = array(
- 'argv' => ["occ"],
- );
- $this->application = new OCCApplication(
- \OC::$server->getConfig(),
- \OC::$server->getEventDispatcher(),
- \OC::$server->getLogger()/*,
- \OC::$server->query(\OC\MemoryInfo::class)*/
+ $this->application = new Application(
+ OC::$server->getConfig(),
+ OC::$server->getEventDispatcher(),
+ new FakeRequest(),
+ OC::$server->getLogger(),
+ OC::$server->query(MemoryInfo::class)
);
$this->application->setAutoExit(false);
-// $this->output = new OCCOutput();
$this->output = new OccOutput(OutputInterface::VERBOSITY_NORMAL, true);
$this->application->loadCommands(new StringInput(""), $this->output);
}
/**
- * CAUTION: the @Stuff turns off security checks; for this page no admin is
- * required and no CSRF check. If you don't know what CSRF is, read
- * it up in the docs or you might create a security hole. This is
- * basically the only required method to add this exemption, don't
- * add it to any other method if you don't exactly know what it does
- *
* @NoCSRFRequired
*/
public function index()
{
- return new TemplateResponse('occweb', 'index'); // templates/index.php
+ return new TemplateResponse('occweb', 'index');
}
+ /**
+ * @param $input
+ * @return string
+ */
private function run($input)
{
try {
$this->application->run($input, $this->output);
return $this->output->fetch();
- } catch (\Exception $ex) {
+ } catch (Exception $ex) {
exceptionHandler($ex);
} catch (Error $ex) {
exceptionHandler($ex);
@@ -68,20 +65,15 @@ class OccController extends Controller
}
/**
- * @NoAdminRequired
* @param string $command
* @return DataResponse
*/
public function cmd($command)
{
-
- $this->logger->info($command);
+ $this->logger->debug($command);
$input = new StringInput($command);
- // TODO : Interactive ?
$response = $this->run($input);
-// $this->logger->info($response);
-// $converter = new AnsiToHtmlConverter();
-// return new DataResponse($converter->convert($response));
+ $this->logger->debug($response);
return new DataResponse($response);
}
diff --git a/lib/Controller/OCCOutput.php b/lib/Controller/OCCOutput.php
index 2cedece..6f8546e 100644
--- a/lib/Controller/OCCOutput.php
+++ b/lib/Controller/OCCOutput.php
@@ -1,18 +1,16 @@