Added delete user support.
This commit is contained in:
parent
88e2428a71
commit
980193c347
5 changed files with 191 additions and 3 deletions
|
|
@ -890,7 +890,7 @@ def pastafari2_get_server_users(server_id):
|
|||
|
||||
with db.query('select * from systemuser WHERE server_id=%s', [server_id]) as cursor:
|
||||
for user in cursor:
|
||||
rows.append({'username': '<a href="#" class="change_password">'+user['username']+'</a>', 'options': ''})
|
||||
rows.append({'username': '<a href="#" class="change_password">'+user['username']+'</a>', 'options': '<a href="'+url_for('admin_app.pastafari2_delete_user', server_id=server_id, username=user['username'])+'">'+_('Delete')+'</a>'})
|
||||
|
||||
|
||||
arr_return={'fields': fields, 'rows': rows, 'html_pages': ''}
|
||||
|
|
@ -1067,3 +1067,71 @@ def pastafari2_change_user_password(server_id):
|
|||
return {'error': error, 'error_form': error_form, 'task_id': task_id}
|
||||
|
||||
|
||||
@admin_app.route('/pastafari2/delete_user/')
|
||||
def pastafari2_delete_user():
|
||||
|
||||
db=g.connection
|
||||
|
||||
server=ServerDbTask(db)
|
||||
|
||||
server_id=request.args.get('server_id', '0')
|
||||
|
||||
user=SystemUser(db)
|
||||
|
||||
arr_server=server.select_a_row(server_id)
|
||||
|
||||
username=request.args.get('username')
|
||||
|
||||
arr_user=user.set_conditions('WHERE username=%s AND server_id=%s', [username, server_id]).select_a_row_where()
|
||||
|
||||
if arr_server and arr_user:
|
||||
|
||||
return t.load_template('delete_user.phtml', title=_('Delete user'), path_module='admin_app.pastafari2_dashboard', server_id=server_id, server=arr_server, username=username, user_id=arr_user['id'])
|
||||
|
||||
else:
|
||||
|
||||
return ""
|
||||
|
||||
@admin_app.route('/pastafari2/delete_user_db/<int:server_id>', methods=['POST'])
|
||||
def pastafari2_delete_user_db(server_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
error=0
|
||||
|
||||
server=ServerDbTask(db)
|
||||
|
||||
user=SystemUser(db)
|
||||
|
||||
arr_server=server.set_conditions('WHERE id=%s', [server_id]).select_a_row_where([], True)
|
||||
|
||||
user_id=request.form.get('user_id', '0')
|
||||
|
||||
arr_user=user.set_conditions('WHERE id=%s AND server_id=%s', [user_id, server_id]).select_a_row_where([], True)
|
||||
|
||||
error_form={}
|
||||
|
||||
#server.set_conditions('WHERE id=%s', [server_id]).delete()
|
||||
|
||||
if arr_server and arr_user:
|
||||
#user.set_conditions('WHERE id=%s',[arr_user['id']]).delete()
|
||||
sshtask=Task(db)
|
||||
|
||||
ssh_key_priv=config_task.ssh_private_key
|
||||
|
||||
if not sshtask.run_task(arr_server['ip'], 'modules.pastafari2.tasks.system.delete_user', 'Delete user', 'Delete', 'Task for delete a unix user', {'user_id': user_id, 'username': arr_user['username']}, config_task.remote_user, '', '', url_for('admin_app.pastafari2_dashboard', server_id=server_id), ssh_key_priv=ssh_key_priv, ssh_key_password='', send_task=True, ssh_port=arr_server['ssh_port']):
|
||||
|
||||
error=1
|
||||
|
||||
task_id=sshtask.task_id
|
||||
|
||||
if task_id:
|
||||
|
||||
log=check_task_status(_('User deleted'), db, task_id)
|
||||
|
||||
error=log['error']
|
||||
|
||||
error_form['#user_delete_error']=log['message']
|
||||
|
||||
return {'error': error, 'error_form': error_form, 'task_id': task_id}
|
||||
|
||||
|
|
|
|||
26
scripts/system/delete_user.py
Normal file
26
scripts/system/delete_user.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/python3 -u
|
||||
|
||||
import sys
|
||||
import argparse
|
||||
import os
|
||||
#from pastafariutils.unix import add_user, del_user, change_password
|
||||
from pathlib import Path
|
||||
from subprocess import call, DEVNULL
|
||||
import json
|
||||
import time
|
||||
import shutil
|
||||
import pwd
|
||||
import distro
|
||||
import subprocess
|
||||
from pastafariutils import linux
|
||||
|
||||
parser=argparse.ArgumentParser(prog='delete_user.py', description='Delete user in linux system')
|
||||
|
||||
parser.add_argument('--user', help='The unix user', required=True)
|
||||
|
||||
args=parser.parse_args()
|
||||
|
||||
if not linux.shell_command('sudo userdel -r {}'.format(args.user)):
|
||||
linux.json_log('Sorry, cannot delete theuser, please check permissions and the user exists', error=1, status=1, progress=100, no_progress=0, return_message=0, result=None)
|
||||
exit(1)
|
||||
|
||||
|
|
@ -60,7 +60,5 @@ class ServerTask(Task):
|
|||
system_user.create_forms()
|
||||
|
||||
system_user.insert({'username': self.data['username'], 'home': self.data['home'], 'server_id': arr_server['id']})
|
||||
|
||||
#with self.connection.query('insert into systemuser (username, home, server_id) VALUES (%s, %s, %s)', [self.data['username'], self.data['home']]) as cursor:
|
||||
|
||||
return True
|
||||
|
|
|
|||
64
tasks/system/delete_user.py
Normal file
64
tasks/system/delete_user.py
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
#/usr/bin/env python3
|
||||
|
||||
from collections import OrderedDict
|
||||
import json
|
||||
from modules.pastafari2.libraries.task import Task
|
||||
from modules.pastafari2.models.pastafari2 import ServerDbTask, SystemUser
|
||||
from modules.pastafari2.libraries.configtask import config_task
|
||||
#import distro
|
||||
|
||||
class ServerTask(Task):
|
||||
|
||||
def __init__(self, server, conn, remote_user='root', remote_password='', private_key='./ssh/id_rsa', password_key='', remote_path='pastafari2', task_id=0, data={}, port=22):
|
||||
|
||||
super().__init__(server, conn, remote_user, remote_password, private_key, password_key, remote_path, task_id, data, port)
|
||||
|
||||
self.name_task='Delete user to server'
|
||||
|
||||
self.description_task='Delete user to the selected server'
|
||||
|
||||
self.codename_task='delete_user'
|
||||
|
||||
self.files=[]
|
||||
|
||||
self.files=[['modules/pastafari2/scripts/system/delete_user.py', 0o750]]
|
||||
|
||||
# Format first array element is command with the interpreter, the task is agnostic, the files in os directory. The commands are setted with 750 permission.
|
||||
# First element is the file, next elements are the arguments
|
||||
|
||||
self.commands_to_execute=[['modules/pastafari2/scripts/system/delete_user.py', '']]
|
||||
|
||||
#THe files to delete
|
||||
|
||||
self.delete_files=[]
|
||||
|
||||
self.delete_directories=['modules/pastafari2/scripts']
|
||||
|
||||
#self.task=Task(conn)
|
||||
|
||||
self.one_time=False
|
||||
|
||||
self.version='1.0'
|
||||
|
||||
self.path_module='admin_app.pastafari2_dashboard'
|
||||
|
||||
def pre_task(self):
|
||||
|
||||
|
||||
self.commands_to_execute=[['/home/{}/pythonenv/bin/python3 -u modules/pastafari2/scripts/system/delete_user.py'.format(config_task.remote_user), '--user={}'.format(self.data['username'])]]
|
||||
|
||||
return True
|
||||
|
||||
def post_task(self):
|
||||
|
||||
serverdb=ServerDbTask(self.connection)
|
||||
|
||||
system_user=SystemUser(self.connection)
|
||||
|
||||
arr_server=serverdb.set_conditions('WHERE ip=%s', [self.server]).select_a_row_where()
|
||||
|
||||
system_user.create_forms()
|
||||
|
||||
system_user.set_conditions('WHERE id=%s', self.data['user_id']).delete()
|
||||
|
||||
return True
|
||||
32
templates/admin/delete_user.phtml
Normal file
32
templates/admin/delete_user.phtml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<%inherit file="dashboard.phtml"/>
|
||||
<%block name="content">
|
||||
<p><a href="${url_for('.pastafari2_dashboard')}">${_('Servers')}</a> >> <a href="${url_for('admin_app.pastafari2_edit_users', server_id=server_id)}">${server['hostname']} - ${_('Users')}</a> >> ${_('Delete user')}</p>
|
||||
<div class="form">
|
||||
<form method="post" id="delete_user">
|
||||
<p><strong>${_('User')}</strong>: ${username}</p>
|
||||
<p><strong>${_('WARNING: The user is only deleted from database because if is deleted and is necessary for any service, you lost this services. Please, check the services used by the user and delete using other gui services how webmin.')}</strong></p>
|
||||
<input type="hidden" name="user_id" value="${user_id}" />
|
||||
<p id="user_delete_error" class="error"></p>
|
||||
<p><input type="submit" value="${_('Confirm delete user?')}" /></p>
|
||||
</form>
|
||||
</div>
|
||||
<p><a href="${url_for('.pastafari2_dashboard')}">${_('Servers')}</a> >> <a href="${url_for('admin_app.pastafari2_edit_users', server_id=server_id)}">${server['hostname']} - ${_('Users')}</a> >> ${_('Delete user')}</p>
|
||||
</%block>
|
||||
<%block name="jscript_block">
|
||||
<script language="Javascript" src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||
<script>
|
||||
|
||||
var options={url: "${url_for('admin_app.pastafari2_delete_user_db', server_id=server_id)}", loading: '#layer_loading', pre_callback: function (data) {
|
||||
|
||||
//alert('This action overwrite all ssh keys');
|
||||
|
||||
}, success: function (data) {
|
||||
|
||||
location.href="${url_for('admin_app.pastafari2_edit_users', server_id=server_id)}";
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
$('#delete_user').sendPost(options);
|
||||
</script>
|
||||
</%block>
|
||||
Loading…
Add table
Add a link
Reference in a new issue