fix app compliance
This commit is contained in:
parent
2447aea115
commit
e03bd71092
@ -11,11 +11,11 @@
|
|||||||
<namespace>OCCWeb</namespace>
|
<namespace>OCCWeb</namespace>
|
||||||
<category>tools</category>
|
<category>tools</category>
|
||||||
<website>https://git.adphi.net/Adphi/OCCWeb</website>
|
<website>https://git.adphi.net/Adphi/OCCWeb</website>
|
||||||
<screenshot>https://git.adphi.net/Adphi/OCCWeb/raw/master/appinfo/screenshot.png</screenshot>
|
|
||||||
<repository>https://git.adphi.net/Adphi/OCCWeb</repository>
|
|
||||||
<bugs>https://git.adphi.net/Adphi/OCCWeb/issues</bugs>
|
<bugs>https://git.adphi.net/Adphi/OCCWeb/issues</bugs>
|
||||||
|
<repository>https://git.adphi.net/Adphi/OCCWeb</repository>
|
||||||
|
<screenshot>https://git.adphi.net/Adphi/OCCWeb/raw/master/appinfo/screenshot.png</screenshot>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<nextcloud min-version="13" max-version="16"/>
|
<nextcloud min-version="13" max-version="18"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<navigations>
|
<navigations>
|
||||||
<navigation role="admin">
|
<navigation role="admin">
|
||||||
|
BIN
lib/Controller/.DS_Store
vendored
BIN
lib/Controller/.DS_Store
vendored
Binary file not shown.
20
lib/Controller/FakeRequest.php
Normal file
20
lib/Controller/FakeRequest.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace OCA\OCCWeb\Controller;
|
||||||
|
|
||||||
|
|
||||||
|
use OC\AppFramework\Http\Request;
|
||||||
|
|
||||||
|
class FakeRequest extends Request {
|
||||||
|
public $server = array(
|
||||||
|
'argv' => ["occ"],
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FakeRequest constructor.
|
||||||
|
*/
|
||||||
|
public function __construct() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,225 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
|
||||||
*
|
|
||||||
* @author Joas Schilling <coding@schilljs.com>
|
|
||||||
* @author Jörn Friedrich Dreyer <jfd@butonic.de>
|
|
||||||
* @author Lukas Reschke <lukas@statuscode.ch>
|
|
||||||
* @author Miha Frangez <miha.frangez@gmail.com>
|
|
||||||
* @author Morris Jobke <hey@morrisjobke.de>
|
|
||||||
* @author noveens <noveen.sachdeva@research.iiit.ac.in>
|
|
||||||
* @author Robin Appelman <robin@icewind.nl>
|
|
||||||
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
|
||||||
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
|
|
||||||
*
|
|
||||||
* @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 <http://www.gnu.org/licenses/>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
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(
|
|
||||||
// '<comment>The current PHP memory limit ' .
|
|
||||||
// 'is below the recommended value of 512MB.</comment>'
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
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(
|
|
||||||
'<comment>Nextcloud is in maintenance mode - ' .
|
|
||||||
'no apps have been loaded</comment>' . 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
namespace OCA\OCCWeb\Controller;
|
namespace OCA\OCCWeb\Controller;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use OC;
|
||||||
|
use OC\Console\Application;
|
||||||
|
use OC\MemoryInfo;
|
||||||
use OCP\IRequest;
|
use OCP\IRequest;
|
||||||
use OCP\AppFramework\Http\TemplateResponse;
|
use OCP\AppFramework\Http\TemplateResponse;
|
||||||
use OCP\AppFramework\Http\DataResponse;
|
use OCP\AppFramework\Http\DataResponse;
|
||||||
@ -18,49 +22,42 @@ class OccController extends Controller
|
|||||||
private $application;
|
private $application;
|
||||||
private $output;
|
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);
|
parent::__construct($AppName, $request);
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
$this->userId = $UserId;
|
$this->userId = $userId;
|
||||||
|
|
||||||
$this->server = array(
|
$this->application = new Application(
|
||||||
'argv' => ["occ"],
|
OC::$server->getConfig(),
|
||||||
);
|
OC::$server->getEventDispatcher(),
|
||||||
$this->application = new OCCApplication(
|
new FakeRequest(),
|
||||||
\OC::$server->getConfig(),
|
OC::$server->getLogger(),
|
||||||
\OC::$server->getEventDispatcher(),
|
OC::$server->query(MemoryInfo::class)
|
||||||
\OC::$server->getLogger()/*,
|
|
||||||
\OC::$server->query(\OC\MemoryInfo::class)*/
|
|
||||||
);
|
);
|
||||||
$this->application->setAutoExit(false);
|
$this->application->setAutoExit(false);
|
||||||
// $this->output = new OCCOutput();
|
|
||||||
$this->output = new OccOutput(OutputInterface::VERBOSITY_NORMAL, true);
|
$this->output = new OccOutput(OutputInterface::VERBOSITY_NORMAL, true);
|
||||||
$this->application->loadCommands(new StringInput(""), $this->output);
|
$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
|
* @NoCSRFRequired
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
return new TemplateResponse('occweb', 'index'); // templates/index.php
|
return new TemplateResponse('occweb', 'index');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $input
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
private function run($input)
|
private function run($input)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->application->run($input, $this->output);
|
$this->application->run($input, $this->output);
|
||||||
return $this->output->fetch();
|
return $this->output->fetch();
|
||||||
} catch (\Exception $ex) {
|
} catch (Exception $ex) {
|
||||||
exceptionHandler($ex);
|
exceptionHandler($ex);
|
||||||
} catch (Error $ex) {
|
} catch (Error $ex) {
|
||||||
exceptionHandler($ex);
|
exceptionHandler($ex);
|
||||||
@ -68,20 +65,15 @@ class OccController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @NoAdminRequired
|
|
||||||
* @param string $command
|
* @param string $command
|
||||||
* @return DataResponse
|
* @return DataResponse
|
||||||
*/
|
*/
|
||||||
public function cmd($command)
|
public function cmd($command)
|
||||||
{
|
{
|
||||||
|
$this->logger->debug($command);
|
||||||
$this->logger->info($command);
|
|
||||||
$input = new StringInput($command);
|
$input = new StringInput($command);
|
||||||
// TODO : Interactive ?
|
|
||||||
$response = $this->run($input);
|
$response = $this->run($input);
|
||||||
// $this->logger->info($response);
|
$this->logger->debug($response);
|
||||||
// $converter = new AnsiToHtmlConverter();
|
|
||||||
// return new DataResponse($converter->convert($response));
|
|
||||||
return new DataResponse($response);
|
return new DataResponse($response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,18 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* Created by IntelliJ IDEA.
|
|
||||||
* User: philippe-adrien
|
|
||||||
* Date: 2019-01-18
|
|
||||||
* Time: 19:08
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace OCA\OCCWeb\Controller;
|
namespace OCA\OCCWeb\Controller;
|
||||||
|
|
||||||
|
|
||||||
use Symfony\Component\Console\Output\BufferedOutput;
|
use Symfony\Component\Console\Output\BufferedOutput;
|
||||||
use Symfony\Component\Console\Output\ConsoleOutputInterface;
|
use Symfony\Component\Console\Output\ConsoleOutputInterface;
|
||||||
|
use Symfony\Component\Console\Output\ConsoleSectionOutput;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method ConsoleSectionOutput section()
|
||||||
|
*/
|
||||||
class OccOutput extends BufferedOutput implements ConsoleOutputInterface
|
class OccOutput extends BufferedOutput implements ConsoleOutputInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -31,4 +29,8 @@ class OccOutput extends BufferedOutput implements ConsoleOutputInterface
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __call($name, $arguments) {
|
||||||
|
// TODO: Implement @method ConsoleSectionOutput section()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user