Added users support to pastafari
This commit is contained in:
parent
ba7fd8dcc9
commit
646f0bb721
5 changed files with 263 additions and 16 deletions
|
|
@ -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/edit_users/<int:server_id>')
|
||||
def pastafari2_edit_users(server_id):
|
||||
|
||||
@admin_app.route('/pastafari2/get_server_users', methods=['POST'])
|
||||
def pastafari2_get_server_users():
|
||||
db=g.connection
|
||||
|
||||
#{"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":""}
|
||||
server=ServerDbTask(db)
|
||||
|
||||
# {"fields": [{"Username": true, "Options": false}], "rows": [{"username": "developer", "options": ""}], "html_pages": ""}
|
||||
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}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ from paramecio2.libraries.db.extrafields.filefield import FileField
|
|||
from paramecio2.libraries.urls import make_media_url
|
||||
from paramecio2.libraries import datetime
|
||||
from paramecio2.modules.admin.models.admin import UserAdmin
|
||||
from paramecio2.libraries.db.extrafields.usernamefield import UserNameField
|
||||
from modules.pastafari2.models.tasks import LonelyIpField
|
||||
from paramecio2.libraries.db.extrafields.passwordfield import PasswordField
|
||||
#from modules.monit.models.monit import Server
|
||||
|
|
@ -115,4 +116,12 @@ class UserToken(WebModel):
|
|||
self.register(corefields.ForeignKeyField('user_id', UserAdmin(connection), 11, True, 'id', 'group', select_fields=[]))
|
||||
self.register(DateTimeField('last_login'))
|
||||
|
||||
class SystemUser(WebModel):
|
||||
|
||||
def __init__(self, connection):
|
||||
|
||||
super().__init__(connection)
|
||||
self.register(UserNameField('username', 4096), True)
|
||||
#self.register(corefields.CharField('home', 4096))
|
||||
self.register(corefields.ForeignKeyField('server_id', ServerDbTask(connection), 11, False, 'id', 'group', select_fields=[]))
|
||||
|
||||
|
|
|
|||
53
scripts/system/add_user.py
Normal file
53
scripts/system/add_user.py
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
#!/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='add_user.py', description='A user to the linux system')
|
||||
|
||||
parser.add_argument('--user', help='The unix user', required=True)
|
||||
|
||||
parser.add_argument('--home', help='The home of the unix user')
|
||||
|
||||
parser.add_argument('--shell', help='The home of the unix user')
|
||||
|
||||
args=parser.parse_args()
|
||||
|
||||
if not linux.shell_command('sudo useradd -m -d {} -s {} {}'.format(args.home, args.shell, args.user)):
|
||||
linux.json_log('Sorry, cannot create the new user, please check permissions and the users not exists', error=1, status=1, progress=100, no_progress=0, return_message=0, result=None)
|
||||
exit(1)
|
||||
|
||||
"""
|
||||
if args.password:
|
||||
|
||||
password_user=args.password
|
||||
|
||||
ret_pass=change_password(args.user, password_user)
|
||||
|
||||
if not ret_pass[0]:
|
||||
print('Error, cannot change password for %s' % args.user+"\n"+ret_pass[1]+"\n")
|
||||
exit(1)
|
||||
else:
|
||||
|
||||
print('Changed password succesfully...\n')
|
||||
"""
|
||||
"""
|
||||
if args.ssh_pub_key_file:
|
||||
|
||||
if call("sudo su - %s -s /bin/bash -c 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys' && sudo cat %s >> /home/%s/.ssh/authorized_keys && sudo usermod --shell /bin/bash %s" % (args.user, args.ssh_pub_key_file, args.user, args.user), shell=True) > 0:
|
||||
print('Error, cannot add ssh pub key to user %s' % args.user )
|
||||
exit(1)
|
||||
else:
|
||||
print('Added ssh key successfully...\n')
|
||||
"""
|
||||
46
templates/admin/add_user.phtml
Normal file
46
templates/admin/add_user.phtml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<%inherit file="dashboard.phtml"/>
|
||||
<%block name="content">
|
||||
<p><a href="${url_for('admin_app.pastafari2_dashboard')}">${_('Servers')}</a> >> <a href="${url_for('admin_app.pastafari2_edit_users', server_id=server_id)}">${hostname} - ${_('Users')}</a> >> ${_('Add user')}</p>
|
||||
<form method="post" name="add_user_form" id="add_user_form" >
|
||||
${form|n}
|
||||
<p><input type="submit" value="${_('Add user')}" />
|
||||
</form>
|
||||
<p><a href="${url_for('admin_app.pastafari2_dashboard')}">${_('Servers')}</a> >> <a href="${url_for('admin_app.pastafari2_edit_users', server_id=server_id)}">${hostname} - ${_('Users')}</a> >> ${_('Add user')}</p>
|
||||
</%block>
|
||||
<%block name="jscript_block">
|
||||
<script type="text/javascript" src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||
<script>
|
||||
|
||||
var options={url: "${url_for('.pastafari2_add_user_task')}", loading: '#layer_loading', success: function (data) {
|
||||
|
||||
/*task_id=data.task_id;
|
||||
|
||||
if(task_id>0) {
|
||||
|
||||
//location.href="${url_for('.pastafari2_progress')}?task_id="+task_id;
|
||||
$('#layer_loading').show();
|
||||
|
||||
}*/
|
||||
if(!data.error) {
|
||||
|
||||
window.location='${url_for("admin_app.pastafari2_edit_users", server_id=server_id)}';
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
alert(_('Cannot add the new users!.'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}, error_data: function (data) {
|
||||
|
||||
console.log(JSON.stringify(data));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
jQuery('#add_user_form').sendPost(options);
|
||||
|
||||
</script>
|
||||
</%block>
|
||||
18
templates/admin/edit_users.phtml
Normal file
18
templates/admin/edit_users.phtml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<%inherit file="dashboard.phtml"/>
|
||||
<%block name="content">
|
||||
<p><a href="${url_for('admin_app.pastafari2_dashboard')}">${_('Servers')}</a> >> ${server_data['hostname']} - ${_('Users')}</p>
|
||||
<p><a href="${url_for('admin_app.pastafari2_add_user', server_id=server_id)}">${_('Add new user to server')}</a></p>
|
||||
<div id="table_users">
|
||||
</div>
|
||||
<p><strong>*${_('Only can edit users system created from this control panel')}</strong></p>
|
||||
<p><a href="${url_for('admin_app.pastafari2_dashboard')}">${_('Servers')}</a> >> ${server_data['hostname']} - ${_('Users')}</p>
|
||||
</%block>
|
||||
<%block name="jscript_block">
|
||||
<script src="${make_media_url('js/jsutils/posting2.js', 'pastafari2')}"></script>
|
||||
<script src="${make_media_url('js/jsutils/ajax_list.js', 'pastafari2')}"></script>
|
||||
<script>
|
||||
options={'url': "${url_for('.pastafari2_get_server_users', server_id=server_id)}"};
|
||||
|
||||
alist=$('#table_users').ajaxList('table_list', options);
|
||||
</script>
|
||||
</%block>
|
||||
Loading…
Add table
Add a link
Reference in a new issue