This repository has been archived by the owner on Nov 25, 2020. It is now read-only.
/
Command.php
122 lines (116 loc) · 4.32 KB
/
Command.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
/*
* Copyright 2007-2015 Abstrium <contact (at) pydio.com>
* This file is part of Pydio.
*
* Pydio is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Pydio 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
* along with Pydio. If not, see <http://www.gnu.org/licenses/>.
*
* The latest code can be found at <http://pyd.io/>.
*/
namespace Pydio\Core\Http\Cli;
defined('AJXP_EXEC') or die('Access not allowed');
use Symfony;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class Command extends Symfony\Component\Console\Command\Command
{
protected function configure()
{
$this->setDefinition(new FreeDefOptions());
$this
->setName('pydio')
->setDescription('Pydio Command Line')
->addOption(
'cli_username',
'u',
InputOption::VALUE_REQUIRED,
'User id or user token'
)->addOption(
'cli_password',
'p',
InputOption::VALUE_OPTIONAL,
'User Password'
)->addOption(
'cli_token',
't',
InputOption::VALUE_OPTIONAL,
'Encrypted Token used to replace password'
)->addOption(
'cli_impersonate',
'i',
InputOption::VALUE_OPTIONAL,
'Comma separated list of users to impersonate. Only possible if authenticated user is ADMIN.'
)->addOption(
'cli_repository_id',
'r',
InputOption::VALUE_REQUIRED,
'Repository ID or alias, can be a comma-separated list'
)->addOption(
'cli_action_name',
'a',
InputOption::VALUE_REQUIRED,
'Action name to apply'
)->addOption(
'cli_status_file',
's',
InputOption::VALUE_OPTIONAL,
'Path to a file to write status information about the running task'
)->addOption(
'cli_task_uuid',
'k',
InputOption::VALUE_OPTIONAL,
'Task Uuid'
)
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$server = new CliServer();
$server->registerCatchAll();
$definitionsKeys = array_keys($this->getDefinition()->getOptions());
$actionParameters = [];
$pydioCliOptions = [];
foreach ($input->getOptions() as $key => $option){
if(in_array($key, $definitionsKeys)){
if(strpos($key, "cli_") === 0) {
$shortcut = $this->getDefinition()->getOption($key)->getShortcut();
$pydioCliOptions[$shortcut] = FreeArgvOptions::removeEqualsSign($option);
}
}else{
$actionParameters[$key] = $option;
}
}
if(!is_array($pydioCliOptions["r"])){
$pydioCliOptions["r"] = [$pydioCliOptions["r"]];
}
$taskUid = $pydioCliOptions["k"];
foreach ($pydioCliOptions["r"] as $repoId){
$reqOptions = $pydioCliOptions;
$reqOptions["r"] = $repoId;
$request = $server->getRequest();
$request = $request
->withParsedBody($actionParameters)
->withAttribute("api", "cli")
->withAttribute("cli-options", $reqOptions)
->withAttribute("cli-output", $output);
if(!empty($taskUid)){
$request = $request->withAttribute("pydio-task-id", $taskUid);
}
$server->updateRequest($request);
$server->listen();
}
}
}