104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace OCA\OCCWeb\Controller;
 | |
| 
 | |
| use OCP\IRequest;
 | |
| use OCP\AppFramework\Http\TemplateResponse;
 | |
| use OCP\AppFramework\Http\DataResponse;
 | |
| use OCP\AppFramework\Controller;
 | |
| use OCP\ILogger;
 | |
| use Symfony\Component\Console\Input\StringInput;
 | |
| use Symfony\Component\Console\Output\OutputInterface;
 | |
| 
 | |
| class OccController extends Controller
 | |
| {
 | |
|   private $logger;
 | |
|   private $userId;
 | |
| 
 | |
|   private $application;
 | |
|   private $output;
 | |
| 
 | |
|   public $server;
 | |
| 
 | |
|   public function __construct(ILogger $logger, $AppName, IRequest $request, $UserId)
 | |
|   {
 | |
|     parent::__construct($AppName, $request);
 | |
|     $this->logger = $logger;
 | |
|     $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->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
 | |
|   }
 | |
| 
 | |
|   private function run($input)
 | |
|   {
 | |
|     try {
 | |
|       $this->application->run($input, $this->output);
 | |
|       return $this->output->fetch();
 | |
|     } catch (\Exception $ex) {
 | |
|       exceptionHandler($ex);
 | |
|     } catch (Error $ex) {
 | |
|       exceptionHandler($ex);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @NoAdminRequired
 | |
|    * @param string $command
 | |
|    * @return DataResponse
 | |
|    */
 | |
|   public function cmd($command)
 | |
|   {
 | |
| 
 | |
|     $this->logger->info($command);
 | |
|     $input = new StringInput($command);
 | |
|     // TODO : Interactive ?
 | |
|     $response = $this->run($input);
 | |
| //    $this->logger->info($response);
 | |
| //    $converter = new AnsiToHtmlConverter();
 | |
| //    return new DataResponse($converter->convert($response));
 | |
|     return new DataResponse($response);
 | |
|   }
 | |
| 
 | |
|   public function list() {
 | |
|     $defs = $this->application->application->all();
 | |
|     $cmds = array();
 | |
|     foreach ($defs as $d) {
 | |
|       array_push($cmds, $d->getName());
 | |
|     }
 | |
|     return new DataResponse($cmds);
 | |
|   }
 | |
| }
 | |
| 
 | |
| function exceptionHandler($exception)
 | |
| {
 | |
|   echo "An unhandled exception has been thrown:" . PHP_EOL;
 | |
|   echo $exception;
 | |
|   exit(1);
 | |
| }
 |