Added users support to pastafari

This commit is contained in:
Antonio de la Rosa 2025-11-01 01:02:26 +01:00
parent ba7fd8dcc9
commit 646f0bb721
5 changed files with 263 additions and 16 deletions

View file

@ -1,5 +1,5 @@
from settings import config
from flask import g, url_for, request, session, make_response
from flask import g, url_for, request, session, make_response, flash
from paramecio2.libraries.generate_admin_class import GenerateAdminClass
from paramecio2.libraries.i18n import I18n, PGetText
from paramecio2.modules.admin import admin_app, t as admin_t
@ -12,11 +12,11 @@ from modules.pastafari2.libraries.scandir import scandir
from paramecio2.libraries.db.webmodel import WebModel
from paramecio2.libraries.lists import AjaxList
from paramecio2.libraries.db.extraforms.fileform import FileForm
from paramecio2.libraries.formsutils import show_form
from paramecio2.libraries.formsutils import show_form, check_form
from modules.pastafari2.libraries.task import Task as SSHTask
from modules.pastafari2.models.tasks import Task, LogTask
from modules.pastafari2.libraries.configtask import config_task
from modules.pastafari2.models.pastafari2 import ServerGroup, ServerDbTask, UpdateServerScripts
from modules.pastafari2.models.pastafari2 import ServerGroup, ServerDbTask, UpdateServerScripts, SystemUser
from paramecio2.libraries.config_admin import config_admin
#from modules.pastafari2.settings.config_admin import pastafari_admin_i18n, pastafari_admin_i18n, pastafari_settings_i18n, pastafari_servers_i18n, pastafari_groups_i18n, pastafari_tasks_log_i18n, num_element_admin
@ -425,7 +425,7 @@ def options_options(row_id, row):
arr_options=['<a href="{}">{}</a>'.format(url_for('admin_app.pastafari2_edit_server', id=row_id, op_admin=1), _('Edit'))]
#arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.pastafari2_edit_users', id=row_id, op_admin=1), _('Users')))
arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.pastafari2_edit_users', server_id=row_id), _('Users')))
arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.pastafari2_delete_server', server_id=row_id), _('Delete')))
@ -865,22 +865,32 @@ def pastafari2_save_positions():
pass
return {'error': error, 'form': error_form, 'txt_error': txt_error}
"""
@admin_app.route('/pastafari2/edit_users')
def pastafari2_edit_users():
return t.load_template('edit_users.phtml', title=_('Edit server users'), path_module='admin_app.pastafari2_dashboard')
@admin_app.route('/pastafari2/get_server_users', methods=['POST'])
def pastafari2_get_server_users():
@admin_app.route('/pastafari2/edit_users/<int:server_id>')
def pastafari2_edit_users(server_id):
#{"fields":[["Hostname",true],["IP",true],["Selected",false],["Options",false]],"rows":[{"hostname":"debian-pc.cuchulu.com","ip":"192.168.122.10","select_id":"<input type=\"checkbox\" name=\"server_id_14\" class=\"server_id\" value=\"14\"/>","id":"<a href=\"/pastafari2/edit_server/?id=14&op_admin=1\">Edit</a><br /><a href=\"/pastafari2/edit_users?id=14&op_admin=1\">Users</a><br /><a href=\"/pastafari2/delete_server/?server_id=14\">Delete</a><br /><a href=\"/pastafari2/edit_update/?server_id=14\">Edit update task</a>"}],"html_pages":""}
db=g.connection
# {"fields": [{"Username": true, "Options": false}], "rows": [{"username": "developer", "options": ""}], "html_pages": ""}
server=ServerDbTask(db)
arr_server=server.select_a_row(server_id)
return t.load_template('edit_users.phtml', title=_('Edit server users'), path_module='admin_app.pastafari2_dashboard', server_id=server_id, server_data=arr_server)
@admin_app.route('/pastafari2/get_server_users/<int:server_id>', methods=['POST'])
def pastafari2_get_server_users(server_id):
db=g.connection
fields=[['Username', True], ['Options', False]]
rows=[{'username': 'developer', 'options': ''}]
#rows=[{'username': 'developer', 'options': ''}]
rows=[]
with db.query('select * from systemuser WHERE server_id=%s', [server_id]) as cursor:
for user in cursor:
rows.append({'username': user['username'], 'options': ''})
arr_return={'fields': fields, 'rows': rows, 'html_pages': ''}
@ -888,4 +898,115 @@ def pastafari2_get_server_users():
return json.dumps(arr_return)
"""
@admin_app.route('/pastafari2/add_user/<int:server_id>')
def pastafari2_add_user(server_id):
db=g.connection
server=ServerDbTask(db)
system_user=SystemUser(db)
system_user.fields['server_id'].name_form=HiddenForm
system_user.fields['server_id'].extra_parameters=[]
system_user.create_forms()
arr_server=server.select_a_row(server_id)
if arr_server:
#system_user.forms['server_id'].default_value=arr_server['id']
#print(system_user.forms['server_id'].default_value)
form=show_form({'server_id': arr_server['id']}, system_user.forms, t, yes_error=False, pass_values=True, modelform_tpl='forms/modelform.phtml')
#system_user.forms['server_id'].parameters=[]
return t.load_template('add_user.phtml', title=_('Add server user'), path_module='admin_app.pastafari2_dashboard', server_id=server_id, hostname=arr_server['hostname'], form=form)
return ""
@admin_app.route('/pastafari2/add_user_task/', methods=['POST'])
def pastafari2_add_user_task():
db=g.connection
error_form={}
arr_log={}
error=True
txt_error=''
task_id=0
server_id=request.form.get('server_id', '0')
system_user=SystemUser(db)
system_user.create_forms()
#(error, fields, values, post)=system_user.check_all_fields(dict(request.form), external_agent=True)
(error, error_form, post, arr_form)=check_form(dict(request.form), system_user.forms)
if not error:
with db.query('select count(*) as num_user from systemuser WHERE username=%s', [post['username']]) as cursor:
num_user=cursor.fetchone()['num_user']
if num_user==0:
with db.query('select * from serverdbtask WHERE id=%s', [server_id]) as cursor:
arr_server=cursor.fetchone()
if arr_server:
sshtask=Task(db)
if not sshtask.run_task(arr_server['ip'], 'modules.pastafari2.tasks.system.add_user', 'Create user in server', 'Create_user', 'Task for create and user in the server', {'username': post['username'], 'home': '/home/{}'.format(post['username'])}, config_task.remote_user, '', '', url_for('admin_app.pastafari2_dashboard'), ssh_key_priv=config_task.ssh_private_key, ssh_key_password=config_task.ssh_private_key_password, send_task=True, ssh_port=arr_server['ssh_port']):
error=1
else:
error=0
task_id=sshtask.task_id
if task_id:
check_task=True
while check_task:
with db.query('select * from logtask where task_id=%s order by id DESC limit 1', [task_id]) as cursor:
arr_log=cursor.fetchone()
if arr_log:
if arr_log['status']==1:
error=arr_log['error']
error_form['#username_error']=arr_log['message']
check_task=False
if not error:
flash(_('The user was added successfully'))
else:
error=1
error_form['#username_error']=_('User exists')
else:
error=1
error_form['#username_error']='Username invalid'
return {'error': error, 'txt_error': txt_error, 'error_form': error_form, 'task_id': task_id, 'log': arr_log}