Compare commits

..

1 Commits

Author SHA1 Message Date
CptainObvious 06f4271b50 Blacklist implemented + WIP on error message formatting 2020-03-02 09:12:51 +00:00
3 changed files with 22 additions and 13 deletions

View File

@ -1,16 +1,10 @@
# ⚠️ Deprecated ⚠️ OCCWeb terminal
# OCCWeb terminal
### A web terminal for admins to launch Nextcloud's occ commands
![occweb](https://git.adphi.net/Adphi/OCCWeb/raw/master/appinfo/screenshot.png)
## ⚠️ Deprecated ⚠️
As nextcloudd has no native support for asynchronous operations, due to the use of php, this aplication is deprecated, and will no longer support the Nextcloud' future versions (19+). I did not find a way to implemement true support for interactive and long running occ tasks in a web terminal whitout introducing addtional dependencies (through websockets, for example), the lack of true asynchronous occ operations can lead to serious alterations of voluminous instances.
[This issue](https://github.com/nextcloud/server/issues/16726) may give some hints on why I decided to not support this application anymore.
And over all of this , I want to say I really dislike, even dispise the overall Nextloud teams communication, the "we are the best", and other "look, we make so many commits", witout fixing good old issues, moving fast forward, "we make more commits than pydio"! what a good point ! your more than 10x their developpers ! What a 'prouesse' !!!
## Install
Place this app in **nextcloud/apps/**
@ -19,7 +13,7 @@ Place this app in **nextcloud/apps/**
- The application is not a real interactive terminal and does not support long running tasks.
So if your instance is pretty big, commands like `occ files:scan` will time out and fail.
- Do not use `occ maintenance:mode --on`, obvious...
- Do not use `occ maintenance:mode -on`, obvious...
## TODOs:
See [open issues](https://git.adphi.net/Adphi/OCCWeb/issues)

View File

@ -28,7 +28,11 @@
}).done(function (response) {
term.echo('\n' + response).resume();
}).fail(function (response, code) {
term.echo('\n' + response).resume();
if (response.status === 403) {
term.echo(response.responseJSON.error).resume();
} else {
term.echo('\n[[;red;]Error]\n' + response).resume();
}
});
}
}, {

View File

@ -21,13 +21,13 @@ class OccController extends Controller
private $application;
private $output;
private $blacklist;
public function __construct(ILogger $logger, $AppName, IRequest $request, $userId)
{
parent::__construct($AppName, $request);
$this->logger = $logger;
$this->userId = $userId;
$this->blacklist = array("maintenance:mode on");
$this->application = new Application(
OC::$server->getConfig(),
OC::$server->getEventDispatcher(),
@ -58,8 +58,9 @@ class OccController extends Controller
$this->application->run($input, $this->output);
return $this->output->fetch();
} catch (Exception $ex) {
$this->logger->logException($ex);
return "error: " . $ex->getMessage();
exceptionHandler($ex);
} catch (Error $ex) {
exceptionHandler($ex);
}
}
@ -70,6 +71,10 @@ class OccController extends Controller
public function cmd($command)
{
$this->logger->debug($command);
if (in_array($command, $this->blacklist)) {
$this->logger->debug("Command blacklist");
return new DataResponse(array("error" => "\n".'\u001b[37;41m \u001b[39;49m'."\n".'\u001b[37;41m Command blacklisted. \u001b[39;49m'."\n".'\u001b[37;41m \u001b[39;49m'."\n\n"), 403);
}
$input = new StringInput($command);
$response = $this->run($input);
$this->logger->debug($response);
@ -86,3 +91,9 @@ class OccController extends Controller
}
}
function exceptionHandler($exception)
{
echo "An unhandled exception has been thrown:" . PHP_EOL;
echo $exception;
exit(1);
}