fix app compliance
This commit is contained in:
		@@ -11,11 +11,11 @@
 | 
			
		||||
    <namespace>OCCWeb</namespace>
 | 
			
		||||
    <category>tools</category>
 | 
			
		||||
    <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>
 | 
			
		||||
    <repository>https://git.adphi.net/Adphi/OCCWeb</repository>
 | 
			
		||||
    <screenshot>https://git.adphi.net/Adphi/OCCWeb/raw/master/appinfo/screenshot.png</screenshot>
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <nextcloud min-version="13" max-version="16"/>
 | 
			
		||||
        <nextcloud min-version="13" max-version="18"/>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
    <navigations>
 | 
			
		||||
        <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;
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,16 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Created by IntelliJ IDEA.
 | 
			
		||||
 * User: philippe-adrien
 | 
			
		||||
 * Date: 2019-01-18
 | 
			
		||||
 * Time: 19:08
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace OCA\OCCWeb\Controller;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\Console\Output\BufferedOutput;
 | 
			
		||||
use Symfony\Component\Console\Output\ConsoleOutputInterface;
 | 
			
		||||
use Symfony\Component\Console\Output\ConsoleSectionOutput;
 | 
			
		||||
use Symfony\Component\Console\Output\OutputInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @method ConsoleSectionOutput section()
 | 
			
		||||
 */
 | 
			
		||||
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()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user