mirror of https://git.48k.eu/ogcp
views: add direct cmd execution view
Reorganize "Run" section of Commands view as follows: Commands └── Run ├── Script: run script from folder ├── Cmd: direct command execution └── Display output: results of last execution Adapt API REST call to the new interface. Remove strange legacy ;|\n\r terminator. Remove "echo" field and add "inline" field.master
parent
92ab31650c
commit
76fe1b775a
|
@ -172,6 +172,11 @@ class RunScriptForm(FlaskForm):
|
|||
arguments = StringField(label=_l('Arguments'))
|
||||
submit = SubmitField(label=_l('Submit'))
|
||||
|
||||
class RunCmdForm(FlaskForm):
|
||||
ips = HiddenField()
|
||||
command = StringField(label=_l('Command'))
|
||||
submit = SubmitField(label=_l('Submit'))
|
||||
|
||||
class ImportClientsForm(FlaskForm):
|
||||
server = HiddenField()
|
||||
room = SelectField(label=_l('Room'))
|
||||
|
|
|
@ -97,11 +97,13 @@
|
|||
|
||||
<div class="dropdown btn">
|
||||
<button class="btn btn-secondary btn-light dropdown-toggle{% block nav_script %}{% endblock %}" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-expanded="false">
|
||||
{{ _('Script') }}
|
||||
{{ _('Run') }}
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<input class="btn btn-light dropdown-item{% block nav_run_script %}{% endblock %}" type="submit" value="{{ _('Run') }}"
|
||||
<input class="btn btn-light dropdown-item{% block nav_run_script %}{% endblock %}" type="submit" value="{{ _('Script') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_run_script') }}" formmethod="get">
|
||||
<input class="btn btn-light dropdown-item{% block nav_run_cmd %}{% endblock %}" type="submit" value="{{ _('Cmd') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_run_cmd') }}" formmethod="get">
|
||||
<input class="btn btn-light dropdown-item{% block nav_display_output %}{% endblock %}" type="submit" value="{{ _('Display output') }}"
|
||||
form="scopesForm" formaction="{{ url_for('action_script_display_output') }}" formmethod="get">
|
||||
</div>
|
||||
|
|
|
@ -15,7 +15,7 @@ from ogcp.forms.action_forms import (
|
|||
GenericForm, SelectClientForm, ImageUpdateForm, ImportClientsForm,
|
||||
ServerForm, DeleteRepositoryForm, RepoForm, FolderForm, CacheForm,
|
||||
ClientMoveForm, RunScriptForm, ImageConfigForm, ImageFetchForm,
|
||||
ServerConfigurationForm, SetRepoForm
|
||||
ServerConfigurationForm, SetRepoForm, RunCmdForm
|
||||
)
|
||||
from flask_login import (
|
||||
current_user, LoginManager,
|
||||
|
@ -2218,6 +2218,42 @@ def action_client_delete():
|
|||
else:
|
||||
return redirect(url_for('scopes'))
|
||||
|
||||
@app.route('/action/cmd/run', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def action_run_cmd():
|
||||
form = RunCmdForm(request.form)
|
||||
if request.method == 'POST':
|
||||
ips = form.ips.data.split(' ')
|
||||
if not validate_elements(ips):
|
||||
return redirect(url_for('commands'))
|
||||
|
||||
payload = {
|
||||
'clients': ips,
|
||||
'run': form.command.data,
|
||||
'inline': True
|
||||
}
|
||||
server = get_server_from_clients(ips)
|
||||
r = server.post('/shell/run', payload)
|
||||
|
||||
if not r:
|
||||
return ogserver_down('commands')
|
||||
if r.status_code != requests.codes.ok:
|
||||
return ogserver_error('commands')
|
||||
|
||||
flash(_('Command sent successfully'), category='info')
|
||||
return redirect(url_for('commands'))
|
||||
else:
|
||||
ips = parse_elements(request.args.to_dict())
|
||||
form.ips.data = " ".join(ips)
|
||||
if not validate_elements(ips):
|
||||
return redirect(url_for('commands'))
|
||||
|
||||
scopes, clients = get_scopes(set(ips))
|
||||
selected_clients = list(get_selected_clients(scopes['scope']).items())
|
||||
return render_template('actions/script_run.html', form=form,
|
||||
selected_clients=selected_clients,
|
||||
scopes=scopes)
|
||||
|
||||
@app.route('/action/script/run', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def action_run_script():
|
||||
|
@ -2232,8 +2268,8 @@ def action_run_script():
|
|||
|
||||
payload = {
|
||||
'clients': ips,
|
||||
'run': ';|\n\r'.join(cmd_elems),
|
||||
'echo': True
|
||||
'run': ' '.join(cmd_elems),
|
||||
'inline': False
|
||||
}
|
||||
server = get_server_from_clients(ips)
|
||||
r = server.post('/shell/run', payload)
|
||||
|
|
Loading…
Reference in New Issue