Added files
This commit is contained in:
commit
25aaa0a4bf
31 changed files with 4035 additions and 0 deletions
946
admin/app.py
Normal file
946
admin/app.py
Normal file
|
|
@ -0,0 +1,946 @@
|
|||
from settings import config
|
||||
from flask import g, url_for, request, session, make_response
|
||||
from paramecio2.libraries.generate_admin_class import GenerateAdminClass
|
||||
from paramecio2.libraries.lists import SimpleList
|
||||
from paramecio2.libraries.i18n import I18n
|
||||
from paramecio2.modules.admin import admin_app, t as admin_t
|
||||
from paramecio2.libraries.db.webmodel import WebModel
|
||||
from paramecio2.libraries.lists import AjaxList
|
||||
from modules.pastafari2.models.pastafari2 import ServerGroup, ServerDbTask, UpdateServerScripts
|
||||
from modules.pastafari2.models.tasks import Task as SSHTask
|
||||
from modules.apache.models.webservers import VirtualHost, UsersFtp, WebServer, WebServerPort
|
||||
from paramecio2.libraries.mtemplates import PTemplate, env_theme
|
||||
from paramecio2.libraries.formsutils import show_form
|
||||
from paramecio2.libraries.db.coreforms import HiddenForm, SelectForm, TextForm, PasswordForm
|
||||
from paramecio2.libraries.slugify import slugify
|
||||
from modules.pastafari2.libraries.configtask import config_task
|
||||
from modules.pastafari2.libraries.progress import load_progress
|
||||
import os
|
||||
|
||||
try:
|
||||
import ujson as json
|
||||
except:
|
||||
import json
|
||||
|
||||
env=env_theme(__file__)
|
||||
|
||||
t=PTemplate(env)
|
||||
|
||||
t.env.directories=admin_t.env.directories
|
||||
|
||||
t.env.directories.insert(1, os.path.dirname(__file__).replace('/admin', '')+'/templates/admin')
|
||||
t.env.directories.insert(2, '../pastafari2/templates/admin')
|
||||
|
||||
@admin_app.route('/webservers/servers/')
|
||||
def webservers():
|
||||
|
||||
return t.load_template('webservers.phtml', title=I18n.lang('webservers', 'webservers', 'Webservers'), path_module='admin_app.webservers')
|
||||
|
||||
@admin_app.route('/get_webservers', methods=['POST'])
|
||||
def get_webservers():
|
||||
|
||||
|
||||
db=g.connection
|
||||
|
||||
group_sql=''
|
||||
|
||||
count_data=[]
|
||||
sql_data=[]
|
||||
|
||||
fields=[[I18n.lang('webservers', 'hostname', 'Hostname'), True], ['IP', True], [I18n.lang('webservers', 'options', 'Options'), False]]
|
||||
arr_order_fields=['hostname', 'ip']
|
||||
|
||||
count_query=['select count(webserver.id) as num_elements from webserver', count_data]
|
||||
|
||||
# server.id as select_id,
|
||||
|
||||
# select hostname, ip, date, num_updates, id from serverofuser where user_id=%s;
|
||||
|
||||
#str_query=['select webserver.hostname, webserver.ip, webserver.id from webserver,serverdbtask', sql_data]
|
||||
|
||||
str_query=['select serverdbtask.hostname, serverdbtask.ip, webserver.id as id from webserver, serverdbtask WHERE serverdbtask.id=webserver.server_id', sql_data]
|
||||
|
||||
ajax=AjaxList(db, fields, arr_order_fields, count_query, str_query)
|
||||
|
||||
#ajax.func_fields['id']=options_server
|
||||
#ajax.func_fields['ip']=options_ip
|
||||
#ajax.func_fields['select_id']=options_selected
|
||||
ajax.func_fields['id']=options_options
|
||||
ajax.limit=0
|
||||
|
||||
return ajax.show()
|
||||
|
||||
|
||||
def options_options(row_id, row):
|
||||
|
||||
#arr_options=['<a href="{}">{}</a>'.format(url_for('admin_app.virtualhost', server_id=row_id), I18n.lang('webserver', 'server_users', 'Server users'))]
|
||||
arr_options=['<a href="{}">{}</a>'.format(url_for('admin_app.virtualhost', webserver_id=row_id), I18n.lang('webserver', 'websites', 'Websites'))]
|
||||
#
|
||||
#arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.ports', webserver_id=row_id), I18n.lang('webserver', 'http_ports', 'HTTP Ports')))
|
||||
#arr_options.append('<a href="{}">{}</a>'.format("", I18n.lang('webserver', 'edit', 'Edit')))
|
||||
arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.delete_webserver', webserver_id=row_id), I18n.lang('webserver', 'delete', 'Delete')))
|
||||
|
||||
return '<br />'.join(arr_options)
|
||||
|
||||
def post_virtual_update(admin, item_id):
|
||||
|
||||
with admin.model.query('select * from virtualhost where id=%s', [admin.virtualhost_id]) as cursor:
|
||||
arr_virtualhost=cursor.fetchone()
|
||||
|
||||
with admin.model.query('select uid_hosting, gid_hosting from webserver where id=%s', [arr_virtualhost['webserver_id']]) as cursor:
|
||||
arr_webserver=cursor.fetchone()
|
||||
|
||||
if virtualhost:
|
||||
|
||||
#arr_user=admin.model.select_a_row(item_id, [], True)
|
||||
|
||||
home_user=arr_virtualhost['home']
|
||||
|
||||
admin.model.query('update usersftp set uid=%s, gid=%s, home=%s, virtualhost_id=%s WHERE id=%s', [arr_webserver['uid_hosting'], arr_webserver['gid_hosting'], home_user, admin.virtualhost_id, item_id])
|
||||
|
||||
#virtualhost_id=request.args.get('')
|
||||
|
||||
return True
|
||||
|
||||
@admin_app.route('/webservers/delete/<int:webserver_id>', methods=['GET', 'POST'])
|
||||
def delete_webserver(webserver_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
arr_webserver=webserver.select_a_row(webserver_id)
|
||||
|
||||
if arr_webserver:
|
||||
|
||||
return t.load_template('del_webserver.phtml', title=I18n.lang('webservers', 'remove_webserver', 'Remove webserver'), path_module='admin_app.webservers', webserver_id=arr_webserver['id'], domain=arr_webserver['server_id'])
|
||||
|
||||
else:
|
||||
return ""
|
||||
|
||||
@admin_app.route('/delete_webserver/<int:webserver_id>', methods=['GET', 'POST'])
|
||||
def delete_webserver_db(webserver_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
error=1
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
if webserver.set_conditions('WHERE id=%s', [webserver_id]).delete():
|
||||
|
||||
error=0
|
||||
|
||||
return {'error': error}
|
||||
|
||||
# Ports of ftp server
|
||||
|
||||
@admin_app.route('/webservers/ports/<int:webserver_id>', methods=['GET', 'POST'])
|
||||
def ports(webserver_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
ports=WebServerPort(db)
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
arr_webserver=webserver.select_a_row(webserver_id)
|
||||
|
||||
#print(arr_webserver)
|
||||
|
||||
ports.set_conditions('WHERE webserver_id=%s', [webserver_id])
|
||||
|
||||
ports.fields['webserver_id'].name_form=HiddenForm
|
||||
ports.fields['webserver_id'].extra_parameters=[]
|
||||
|
||||
ports.fields['webserver_id'].default_value=request.args.get('webserver_id', webserver_id)
|
||||
|
||||
admin=GenerateAdminClass(ports, url_for('admin_app.ports', webserver_id=webserver_id), t)
|
||||
|
||||
admin.list.fields_showed=['ip', 'port']
|
||||
|
||||
#usersftp=UsersFtp(db)
|
||||
|
||||
#arr_user=usersftp.select_a_row(user_id, [], True)
|
||||
|
||||
form_admin=admin.show()
|
||||
|
||||
if type(form_admin).__name__=='str':
|
||||
|
||||
return t.load_template('ports.phtml', title=I18n.lang('webservers', 'server_ports', 'Server ports'), path_module='admin_app.ports', form_admin=form_admin, webserver_id=webserver_id, hostname=arr_webserver['server_id'])
|
||||
else:
|
||||
|
||||
return form_admin
|
||||
|
||||
"""
|
||||
webserver=WebServer(db)
|
||||
|
||||
arr_webserver=webserver.select_a_row(webserver_id, [], True)
|
||||
|
||||
if arr_webserver:
|
||||
|
||||
return t.load_template('virtualhosts.phtml', title=I18n.lang('webservers', 'virtualhost', 'Virtual Hosts'), path_module='admin_app.webservers', webserver_id=webserver_id)
|
||||
|
||||
else:
|
||||
|
||||
return ''
|
||||
"""
|
||||
|
||||
|
||||
# FTP USERS for virtualhost
|
||||
|
||||
@admin_app.route('/webservers/server_users/<int:virtualhost_id>', methods=['GET', 'POST'])
|
||||
def server_users(virtualhost_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
usersftp=UsersFtp(db)
|
||||
|
||||
usersftp.set_conditions('WHERE virtualhost_id=%s', [virtualhost_id])
|
||||
|
||||
usersftp.fields['passwd'].protected=False
|
||||
|
||||
vhost=VirtualHost(db)
|
||||
|
||||
arr_vhost=vhost.select_a_row(virtualhost_id, [], True)
|
||||
|
||||
webserver_id=arr_vhost['webserver_id']
|
||||
|
||||
#usersftp.check_user=False
|
||||
#usersftp.check_email=False
|
||||
|
||||
admin=GenerateAdminClass(usersftp, url_for('admin_app.server_users', virtualhost_id=virtualhost_id), t)
|
||||
|
||||
#admin.arr_fields_edit=['user', 'passwd']
|
||||
admin.list.search_fields=['user']
|
||||
admin.list.fields_showed=['user', 'quota_mb']
|
||||
|
||||
admin.arr_fields_edit=['user', 'email', 'passwd', 'repeat_password', 'quota_mb']
|
||||
|
||||
admin.virtualhost_id=virtualhost_id
|
||||
|
||||
admin.post_update=post_virtual_update
|
||||
|
||||
admin.list.arr_extra_options=[option_users]
|
||||
|
||||
#admin.post_update=
|
||||
|
||||
#return t.load_template('serverusers.phtml', title=I18n.lang('webservers', 'server_users', 'Server users'), path_module='admin_app.server_users', admin=admin)
|
||||
|
||||
form_admin=admin.show()
|
||||
|
||||
if type(form_admin).__name__=='str':
|
||||
|
||||
return t.load_template('serverusers.phtml', title=I18n.lang('webservers', 'ftp_users', 'FTP users'), path_module='admin_app.webservers', form_admin=form_admin, webserver_id=webserver_id)
|
||||
else:
|
||||
|
||||
return form_admin
|
||||
|
||||
def option_users(url, row_id, row):
|
||||
|
||||
#arr_options=['<a href="{}">{}</a>'.format(url_for('admin_app.virtualhost, user_id=user_id), I18n.lang('webserver', 'server_users', 'Server users'))]
|
||||
#
|
||||
#arr_options.append('<a href="{}">{}</a>'.format("", I18n.lang('webserver', 'edit', 'Edit')))
|
||||
#arr_options.append('<a href="{}">{}</a>'.format("", I18n.lang('webserver', 'delete', 'Delete')))
|
||||
|
||||
#return '<br />'.join(arr_options)
|
||||
|
||||
arr_options=[] #['<a href="'+url_for('admin_app.virtualhost', user_id=row_id)+'">'+I18n.lang('webservers', 'virtualhosts', 'Virtual Hosts')+'</a>']
|
||||
|
||||
arr_options+=SimpleList.standard_options(url, row_id, row)
|
||||
|
||||
return arr_options
|
||||
|
||||
@admin_app.route('/webservers/virtualhost/<int:webserver_id>')
|
||||
def virtualhost(webserver_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
#usersftp=UsersFtp(db)
|
||||
|
||||
#arr_user=usersftp.select_a_row(user_id, [], True)
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
#arr_webserver=webserver.select_a_row(webserver_id, [], True)
|
||||
arr_webserver=None
|
||||
with db.query('select webserver.id, serverdbtask.hostname from webserver, serverdbtask where webserver.server_id=serverdbtask.id AND webserver.id=%s', [webserver_id]) as cursor:
|
||||
arr_webserver=cursor.fetchone()
|
||||
|
||||
if arr_webserver:
|
||||
|
||||
return t.load_template('virtualhosts.phtml', title=I18n.lang('webservers', 'virtualhost', 'Virtual Hosts'), path_module='admin_app.webservers', webserver_id=webserver_id, hostname=arr_webserver['hostname'])
|
||||
|
||||
else:
|
||||
|
||||
return ''
|
||||
|
||||
def options_vhosts(row_id, row):
|
||||
|
||||
arr_options=[]
|
||||
|
||||
#arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.server_users', virtualhost_id=row_id), I18n.lang('webserver', 'ftp_users', 'Ftp users')))
|
||||
arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.webapps', virtualhost_id=row_id), I18n.lang('webserver', 'webapps', 'Webapps')))
|
||||
arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.edit_virtualhost', virtualhost_id=row_id), I18n.lang('webserver', 'edit', 'Edit')))
|
||||
arr_options.append('<a href="{}">{}</a>'.format(url_for('admin_app.virtualhost_delete', virtualhost_id=row_id), I18n.lang('webserver', 'delete', 'Delete')))
|
||||
|
||||
return '<br />'.join(arr_options)
|
||||
|
||||
def options_username(row_id, row):
|
||||
|
||||
return '<a class="change_password" href="'+url_for('admin_app.change_user_password')+'">'+row['username']+'</a>'
|
||||
|
||||
@admin_app.route('/get_virtualhosts', methods=['POST'])
|
||||
def get_virtualhosts():
|
||||
|
||||
db=g.connection
|
||||
|
||||
user_id=request.args.get('webserver_id', '0')
|
||||
|
||||
group_sql=''
|
||||
|
||||
count_data=[]
|
||||
sql_data=[user_id]
|
||||
|
||||
fields=[[I18n.lang('webservers', 'domain', 'Domain'), True], [I18n.lang('webservers', 'user', 'User'), True], [I18n.lang('webservers', 'options', 'Options'), False]]
|
||||
arr_order_fields=['domain']
|
||||
|
||||
count_query=['select count(virtualhost.id) as num_elements from virtualhost', count_data]
|
||||
|
||||
# server.id as select_id,
|
||||
|
||||
# select hostname, ip, date, num_updates, id from serverofuser where user_id=%s;
|
||||
|
||||
#str_query=['select webserver.hostname, webserver.ip, webserver.id from webserver,serverdbtask', sql_data]
|
||||
|
||||
str_query=['select domain, username, id from virtualhost WHERE webserver_id=%s', sql_data]
|
||||
|
||||
ajax=AjaxList(db, fields, arr_order_fields, count_query, str_query)
|
||||
|
||||
#ajax.func_fields['id']=options_server
|
||||
#ajax.func_fields['ip']=options_ip
|
||||
#ajax.func_fields['select_id']=options_selected
|
||||
|
||||
ajax.func_fields['username']=options_username
|
||||
ajax.func_fields['id']=options_vhosts
|
||||
ajax.limit=0
|
||||
|
||||
return ajax.show()
|
||||
|
||||
|
||||
@admin_app.route('/add_virtualhost/<int:webserver_id>', methods=['GET'])
|
||||
def add_virtualhost(webserver_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
#usersftp=UsersFtp(db)
|
||||
|
||||
#arr_user=usersftp.select_a_row(user_id, [], True)
|
||||
|
||||
#webserver_id=arr_user['webserver_id']
|
||||
|
||||
virtual=VirtualHost(db)
|
||||
|
||||
virtual.fields['webserver_id'].name_form=HiddenForm
|
||||
virtual.fields['webserver_id'].extra_parameters=[]
|
||||
|
||||
virtual.fields['webserver_id'].default_value=request.args.get('webserver_id', webserver_id)
|
||||
|
||||
#virtual.fields['cgi_type'].name_form=SelectForm
|
||||
#virtual.fields['cgi_type'].extra_parameters=[{'': I18n.lang('webservers', 'anything', 'Anything cgi content'), 'php74': 'PHP 7.4 (php-fpm)', 'php80': 'PHP 8.0 (php-fpm)', 'php81': 'PHP 8.1 (php-fpm)', 'php82': 'PHP 8.2 (php-fpm)', 'python3': 'Python3 (mod_wsgi)'}]
|
||||
virtual.fields['username'].label=I18n.lang('webservers', 'username_vhost', 'Virtualhost user')
|
||||
virtual.fields['username'].help=I18n.lang('webservers', 'username_vhost_explain', 'The virtualhost is saved inside unix user. You can set the username in this field')
|
||||
|
||||
virtual.fields['cgi_type'].default_value=request.args.get('cgi_type', '')
|
||||
|
||||
virtual.fields['ip'].label=I18n.lang('webservers', 'ip_if_empty', 'Ip of virtualhost, empty if server default')
|
||||
virtual.fields['ip'].help=I18n.lang('webservers', 'ip_if_empty_explain', 'Ip of virtualhost, empty if server default. If you don\'t know that value your need, leave it empty')
|
||||
|
||||
virtual.fields['domain'].help=I18n.lang('webservers', 'domain_explain', 'The domain of new website')
|
||||
|
||||
virtual.fields['port'].help=I18n.lang('webservers', 'port_explain', 'Change the base port used for the website if you want use behind of a reverse proxy')
|
||||
|
||||
virtual.fields['port'].default_value=80
|
||||
|
||||
#virtual.fields['user_id'].name_form=
|
||||
|
||||
#'php74', 'php80', 'php81', 'php82', 'wsgi'
|
||||
|
||||
virtual.create_forms(['domain', 'webserver_id', 'ip', 'username'])
|
||||
|
||||
"""
|
||||
virtual.forms['password']=PasswordForm('password', '')
|
||||
virtual.forms['password'].label=I18n.lang('webservers', 'user_password', 'User password')
|
||||
virtual.forms['password'].help=I18n.lang('webservers', 'user_password_explain', 'User password used for the user if you want access to this server using this user. <strong>Remember, the password is not saved in pastafari</strong>')
|
||||
virtual.forms['repeat_password']=PasswordForm('repeat_password', '')
|
||||
virtual.forms['repeat_password'].label=I18n.lang('webservers', 'rpeat_user_password', 'Repeat User password')
|
||||
"""
|
||||
|
||||
|
||||
#print(virtual.fields.keys())
|
||||
|
||||
arr_form=virtual.forms
|
||||
#print(arr_form['user_id'].model.fields.keys())
|
||||
|
||||
|
||||
form=show_form({}, arr_form, t, yes_error=True, pass_values=False, modelform_tpl='forms/modelform.phtml')
|
||||
|
||||
return t.load_template('add_virtualhost.phtml', title=I18n.lang('webservers', 'add_website', 'Add Website'), path_module='admin_app.webservers', form=form, webserver_id=webserver_id)
|
||||
|
||||
|
||||
@admin_app.route('/save_virtualhost/', methods=['POST'])
|
||||
def save_virtualhost():
|
||||
|
||||
db=g.connection
|
||||
|
||||
domain=request.form.get('domain', '').strip()
|
||||
|
||||
#home=slugify(request.form.get('home' '').strip())
|
||||
|
||||
webserver_id=request.form.get('webserver_id', '0')
|
||||
|
||||
cgi_type=request.form.get('cgi_type', '')
|
||||
|
||||
port=80 #request.form.get('port', '0')
|
||||
|
||||
ip=request.form.get('ip', '')
|
||||
|
||||
error=0
|
||||
|
||||
error_form={}
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
virtualhost=VirtualHost(db)
|
||||
|
||||
if virtualhost.fields['domain'].check(domain)=='':
|
||||
error_form['#domain_error']='Sorry, invalid domain'
|
||||
error=1
|
||||
|
||||
check_port=int(virtualhost.fields['port'].check(port))
|
||||
|
||||
if check_port==0 or check_port<0 or (check_port<1000 and check_port!=80) or check_port>65536:
|
||||
error_form['#port_error']='Sorry, invalid port'
|
||||
error=1
|
||||
else:
|
||||
port=check_port
|
||||
|
||||
ip=virtualhost.fields['ip'].check(ip)
|
||||
|
||||
if ip=='':
|
||||
ip='*'
|
||||
|
||||
username=virtualhost.fields['username'].check(request.form.get('username', ''))
|
||||
|
||||
if username=='':
|
||||
error_form['#username_error']='Sorry, invalid username'
|
||||
error=1
|
||||
|
||||
arr_virtualhost=virtualhost.set_conditions('WHERE domain=%s', [domain]).select_a_row_where([], True)
|
||||
|
||||
if arr_virtualhost:
|
||||
error_form['#domain_error']='Sorry, domain exists in server'
|
||||
error=1
|
||||
|
||||
"""
|
||||
if 'password' in post and 'repeat_password' in post:
|
||||
|
||||
if post['password'].strip()!='' and post['password']==post['repeat_password']:
|
||||
|
||||
self.data['password']=post['password'].strip()
|
||||
|
||||
else:
|
||||
|
||||
self.arr_form['password'].error=True
|
||||
self.arr_form['password'].txt_error='Passwords doesn\'t match'
|
||||
error=True
|
||||
"""
|
||||
|
||||
"""
|
||||
password=request.form.get('password', '')
|
||||
|
||||
repeat_password=request.form.get('repeat_password', '')
|
||||
|
||||
if password!=repeat_password:
|
||||
error_form['#password_error']='Passwords doesn\'t match'
|
||||
error=1
|
||||
"""
|
||||
|
||||
"""
|
||||
if virtualhost.fields['home'].check(home)=='':
|
||||
error_form['#home_error']='Sorry, invalid home'
|
||||
error=1
|
||||
"""
|
||||
|
||||
task_id=0
|
||||
|
||||
serverdb=ServerDbTask(db)
|
||||
|
||||
arr_webserver=webserver.set_conditions('WHERE webserver.id=%s', [webserver_id]).select_a_row_where([], True)
|
||||
|
||||
if arr_webserver and not error:
|
||||
|
||||
arr_server=serverdb.select_a_row(arr_webserver['server_id'], [], True)
|
||||
|
||||
#username=arr_webserver['username']
|
||||
|
||||
#print(arr_user)
|
||||
|
||||
#server_id=arr_user['webserver_id_server_id']
|
||||
|
||||
#username=arr_user['webserver_id_username']
|
||||
|
||||
#Check if not exists domain, etc
|
||||
|
||||
#arr_server=serverdb.select_a_row(server_id)
|
||||
|
||||
#print(arr_server)
|
||||
|
||||
sshtask=SSHTask(db)
|
||||
|
||||
#user=config_task.remote_user
|
||||
|
||||
ssh_key_priv='./ssh/id_rsa'
|
||||
|
||||
#run_task(self, server, path, name_task, codename_task, description_task, data={}, user='', password='', where_sql_server='', url='', ssh_key_priv='', ssh_key_password='', send_task=True)
|
||||
# user=user, password='', where_sql_server=where_sql, ssh_key_priv=ssh_key_priv, url='', data=data, send_task=True
|
||||
|
||||
root_dir='/home/'+username+'/sites/'+domain
|
||||
|
||||
#ftp_user=arr_user['user']
|
||||
|
||||
if not sshtask.run_task(arr_server['ip'], 'modules.apache.tasks.apache.apache.add_vhost', 'Add Apache virtualhost', 'add_apache_virtualhost', 'Task for add new virtualhost to Apache Server', {'domain': domain, 'email': config.portal_email, 'webserver_id': arr_webserver['id'], 'user': username, 'root_dir': root_dir, 'cgi_type': cgi_type, 'ip': ip, 'port': port}, config_task.remote_user, '', '', url_for('admin_app.virtualhost', webserver_id=arr_webserver['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
|
||||
|
||||
else:
|
||||
|
||||
|
||||
error=1
|
||||
|
||||
return {'error': error, 'error_form': error_form, 'task_id': task_id}
|
||||
|
||||
@admin_app.route('/virtualhost/progress/<int:webserver_id>/')
|
||||
def virtualhost_progress(webserver_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
#Webservers list >> Web users >> Virtual Hosts
|
||||
#cursor=db.query('select `usersftp`.`id` from `usersftp`')
|
||||
|
||||
return_tree='<p><a href="'+url_for('admin_app.webservers')+'">'+I18n.lang('webservers', 'webservers_list', 'Webservers list')+'</a> >> <a href="'+url_for('admin_app.virtualhost', webserver_id=webserver_id)+'">'+I18n.lang('webservers', 'websites', 'Websites')+'</a></p>'
|
||||
|
||||
return load_progress(db, t, return_tree=return_tree, path_module='admin_app.webservers')
|
||||
|
||||
@admin_app.route('/virtualhost/delete/<int:virtualhost_id>')
|
||||
def virtualhost_delete(virtualhost_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
vhost=VirtualHost(db)
|
||||
|
||||
usersftp=UsersFtp(db)
|
||||
|
||||
arr_virtualhost=vhost.select_a_row(virtualhost_id, [], True)
|
||||
|
||||
#arr_user=usersftp.select_a_row(arr_virtualhost['user_id'], [], True)
|
||||
|
||||
return t.load_template('del_virtualhost.phtml', title=I18n.lang('webservers', 'remove_virtualhost', 'Remove Virtual Host'), path_module='admin_app.webservers', webserver_id=arr_virtualhost['webserver_id'], virtualhost_id=virtualhost_id, domain=arr_virtualhost['domain'])
|
||||
|
||||
@admin_app.route('/delete_virtualhost/', methods=['POST'])
|
||||
def delete_virtualhost():
|
||||
|
||||
virtualhost_id=request.form.get('virtualhost_id', '0')
|
||||
|
||||
error=0
|
||||
|
||||
error_form={}
|
||||
|
||||
task_id=0
|
||||
|
||||
db=g.connection
|
||||
|
||||
vhost=VirtualHost(db)
|
||||
|
||||
#usersftp=UsersFtp(db)
|
||||
|
||||
arr_virtualhost=vhost.select_a_row(virtualhost_id, [], True)
|
||||
|
||||
if arr_virtualhost:
|
||||
|
||||
webserver_id=arr_virtualhost['webserver_id']
|
||||
|
||||
#arr_user=usersftp.set_conditions('WHERE usersftp.id=%s', [webserver_id]).select_a_row_where([])
|
||||
|
||||
#server_id=arr_virtualhost['server_id']
|
||||
|
||||
#username=arr_virtualhost['username']
|
||||
|
||||
root_dir=arr_virtualhost['home']
|
||||
|
||||
#ftp_user=arr_user['user']
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
arr_webserver=webserver.select_a_row(webserver_id, [], True)
|
||||
|
||||
#username=arr_webserver['username']
|
||||
|
||||
serverdb=ServerDbTask(db)
|
||||
|
||||
arr_server=serverdb.select_a_row(arr_webserver['server_id'], [], True)
|
||||
|
||||
domain=arr_virtualhost['domain']
|
||||
username=arr_virtualhost['username']
|
||||
|
||||
if arr_virtualhost:
|
||||
|
||||
sshtask=SSHTask(db)
|
||||
|
||||
ssh_key_priv='./ssh/id_rsa'
|
||||
|
||||
if not sshtask.run_task(arr_server['ip'], 'modules.apache.tasks.apache.apache.delete_vhost', 'Remove Apache virtualhost', 'remove_apache_virtualhost', 'Task for remove a virtualhost to Apache Server', {'domain': domain, 'email': config.portal_email, 'webserver_id': arr_webserver['id'], 'user': username, 'root_dir': root_dir, 'cgi_type': ''}, config_task.remote_user, '', '', url_for('admin_app.virtualhost', webserver_id=webserver_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
|
||||
|
||||
else:
|
||||
|
||||
error=1
|
||||
|
||||
pass
|
||||
else:
|
||||
error=1
|
||||
|
||||
return {'error': error, 'error_form': error_form, 'task_id': task_id}
|
||||
|
||||
@admin_app.route('/edit_virtualhost/<int:virtualhost_id>', methods=['GET'])
|
||||
def edit_virtualhost(virtualhost_id):
|
||||
|
||||
db=g.connection
|
||||
|
||||
vhost=VirtualHost(db)
|
||||
|
||||
arr_vhost=vhost.select_a_row(virtualhost_id, [], True)
|
||||
|
||||
if arr_vhost:
|
||||
|
||||
virtual=VirtualHost(db)
|
||||
|
||||
virtual.fields['aliases'].label=I18n.lang('webservers', 'domain_alias', 'Domain aliases')
|
||||
virtual.fields['aliases'].help=I18n.lang('webservers', 'domain_alias_explain', 'Domain aliases are the other domain names of this server. For example www.domain.com, other-site.domain.com. You can separate the domains with commas')
|
||||
|
||||
virtual.fields['webserver_id'].name_form=HiddenForm
|
||||
virtual.fields['webserver_id'].extra_parameters=[]
|
||||
|
||||
#virtual.fields['webserver_id'].default_value=arr_vhost['webserver_id']
|
||||
|
||||
#virtual.fields['cgi_type'].name_form=SelectForm
|
||||
#virtual.fields['cgi_type'].extra_parameters=[{'': I18n.lang('webservers', 'anything', 'Anything cgi content'), 'php74': 'PHP 7.4 (php-fpm)', 'php80': 'PHP 8.0 (php-fpm)', 'php81': 'PHP 8.1 (php-fpm)', 'php82': 'PHP 8.2 (php-fpm)', 'python3': 'Python3 (mod_wsgi)'}]
|
||||
|
||||
#virtual.fields['cgi_type'].default_value=arr_vhost['cgi_type']
|
||||
|
||||
virtual.fields['ip'].label=I18n.lang('webservers', 'ip_if_empty', 'Ip of virtualhost, empty if server default')
|
||||
virtual.fields['ip'].help=I18n.lang('webservers', 'ip_if_empty_explain', 'Ip of virtualhost, empty if server default. If you don\'t know that value your need, leave it empty')
|
||||
|
||||
virtual.fields['domain'].help=I18n.lang('webservers', 'domain_explain', 'The domain of new website')
|
||||
|
||||
virtual.fields['port'].help=I18n.lang('webservers', 'port_explain', 'Change the base port used for the website if you want use behind of a reverse proxy. The port need to be specified in http ports edit in webservers')
|
||||
virtual.fields['ssl_port'].help=I18n.lang('webservers', 'port_explain', 'Change the base port used for the website if you want use behind of a reverse proxy. The port need to be specified in http ports edit in webservers')
|
||||
|
||||
virtual.fields['ssl'].name_form=SelectForm
|
||||
virtual.fields['ssl'].extra_parameters=[{0: 'No', 1: 'Lets Encrypt', 2: 'SSL Files'}]
|
||||
|
||||
virtual.fields['redirect_ssl'].name_form=SelectForm
|
||||
virtual.fields['redirect_ssl'].extra_parameters=[{0: I18n.lang('webservers', 'no', 'No'), 1: I18n.lang('webservers', 'yes', 'Yes')}]
|
||||
|
||||
virtual.fields['indexes'].name_form=SelectForm
|
||||
virtual.fields['indexes'].extra_parameters=[{0: I18n.lang('webservers', 'no', 'No'), 1: I18n.lang('webservers', 'yes', 'Yes')}]
|
||||
virtual.fields['indexes'].help=I18n.lang('webservers', 'add_support_for_show_files_if_index_not_exists', 'Add support show files if index.html not exists?')
|
||||
|
||||
virtual.fields['allow_override'].name_form=SelectForm
|
||||
virtual.fields['allow_override'].extra_parameters=[{0: I18n.lang('webservers', 'no', 'No'), 1: I18n.lang('webservers', 'yes', 'Yes')}]
|
||||
virtual.fields['allow_override'].help=I18n.lang('webservers', 'add_support_for_.htaccess', 'Add support for htaccess?')
|
||||
|
||||
|
||||
virtual.fields['php'].label=I18n.lang('webservers', 'php_support', 'PHP support')
|
||||
virtual.fields['php'].name_form=SelectForm
|
||||
virtual.fields['php'].extra_parameters=[{'': 'No php support', '7.4': 'PHP 7.4', '8.0': 'PHP 8.0', '8.1': 'PHP 8.1', '8.2': 'PHP 8.2'}]
|
||||
virtual.fields['php'].help=I18n.lang('webservers', 'add_php_support_to_virtualhost', 'Add support to php to virtualhost. You can choose ophp version that you prefer')
|
||||
|
||||
#'port', 'ssl_port',
|
||||
|
||||
virtual.create_forms(['domain', 'aliases', 'webserver_id', 'ip', 'indexes', 'allow_override', 'redirect_ssl', 'ssl', 'php'])
|
||||
|
||||
|
||||
#print(virtual.fields.keys())
|
||||
|
||||
arr_form=virtual.forms
|
||||
#print(arr_form['user_id'].model.fields.keys())
|
||||
|
||||
arr_form['ssl_crt']=TextForm('ssl_crt', '')
|
||||
|
||||
arr_form['ssl_crt'].help=I18n.lang('webservers', 'ssl_crt_explain', 'Certificate text from file of ssl certificate, normally ending with .crt')
|
||||
|
||||
arr_form['ssl_crt'].label=I18n.lang('webservers', 'ssl_crt', 'Ssl certificate')
|
||||
|
||||
arr_form['ssl_crt'].css='hide_form'
|
||||
|
||||
arr_form['ssl_key']=TextForm('ssl_key', '')
|
||||
|
||||
arr_form['ssl_key'].help=I18n.lang('webservers', 'ssl_key_explain', 'Key text from file of ssl certificate, normally ending with .key')
|
||||
|
||||
arr_form['ssl_key'].label=I18n.lang('webservers', 'ssl_key', 'Ssl key')
|
||||
|
||||
arr_form['ssl_key'].css='hide_form'
|
||||
|
||||
if arr_vhost['ssl_port']==0:
|
||||
arr_vhost['ssl_port']=443
|
||||
|
||||
form=show_form(arr_vhost, arr_form, t, yes_error=True, pass_values=True, modelform_tpl='forms/modelform.phtml')
|
||||
|
||||
return t.load_template('edit_virtualhost.phtml', title=I18n.lang('webservers', 'edit_virtualhost', 'Edit Virtual Host'), path_module='admin_app.webservers', form=form, webserver_id=arr_vhost['webserver_id'], virtualhost_id=virtualhost_id)
|
||||
|
||||
pass
|
||||
|
||||
return ""
|
||||
|
||||
@admin_app.route('/save_edit_virtualhost/', methods=['POST'])
|
||||
def save_edit_virtualhost():
|
||||
|
||||
db=g.connection
|
||||
|
||||
domain=request.form.get('domain', '').strip()
|
||||
|
||||
#home=slugify(request.form.get('home' '').strip())
|
||||
|
||||
webserver_id=request.form.get('webserver_id', '0')
|
||||
virtualhost_id=request.args.get('virtualhost_id', '0')
|
||||
|
||||
cgi_type=request.form.get('cgi_type', '')
|
||||
|
||||
#port=request.form.get('port', '0')
|
||||
|
||||
#ssl_port=request.form.get('ssl_port', '0')
|
||||
port=80
|
||||
ssl_port=443
|
||||
|
||||
|
||||
ssl=request.form.get('ssl', '0')
|
||||
|
||||
indexes=request.form.get('indexes', '0')
|
||||
|
||||
redirect_ssl=request.form.get('redirect_ssl', '0')
|
||||
|
||||
if indexes!='1':
|
||||
indexes='0'
|
||||
|
||||
allow_override=request.form.get('allow_override', '0')
|
||||
|
||||
if allow_override!='1':
|
||||
allow_override='0'
|
||||
|
||||
ip=request.form.get('ip', '')
|
||||
|
||||
error=0
|
||||
|
||||
error_form={}
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
virtualhost=VirtualHost(db)
|
||||
|
||||
if virtualhost.fields['domain'].check(domain)=='':
|
||||
error_form['#domain_error']='Sorry, invalid domain'
|
||||
error=1
|
||||
|
||||
check_port=int(virtualhost.fields['port'].check(port))
|
||||
|
||||
if check_port==0 or check_port<0 or (check_port<1000 and check_port!=80) or check_port>65536:
|
||||
error_form['#port_error']='Sorry, invalid port'
|
||||
error=1
|
||||
else:
|
||||
port=check_port
|
||||
|
||||
check_ssl_port=int(virtualhost.fields['ssl_port'].check(ssl_port))
|
||||
|
||||
if check_ssl_port==0 or check_ssl_port<0 or (check_ssl_port<1000 and check_ssl_port!=443) or check_ssl_port>65536:
|
||||
error_form['#ssl_port_error']='Sorry, invalid port'
|
||||
error=1
|
||||
else:
|
||||
ssl_port=check_ssl_port
|
||||
|
||||
check_ssl=int(virtualhost.fields['ssl'].check(ssl))
|
||||
|
||||
if check_ssl<0 and check_ssl>2:
|
||||
error_form['#ssl_error']='Sorry, invalid ssl options'
|
||||
error=1
|
||||
else:
|
||||
ssl=check_ssl
|
||||
|
||||
if ssl==2:
|
||||
#Load text ssl files
|
||||
ssl_crt_text=request.form.get('ssl_crt', '').strip()
|
||||
ssl_key_text=request.form.get('ssl_key', '').strip()
|
||||
|
||||
if ssl_crt_text!='':
|
||||
with open('modules/webservers/scripts/files/'+domain+'-ssl.crt', 'w') as f:
|
||||
f.write(ssl_crt_text)
|
||||
|
||||
if ssl_key_text!='':
|
||||
with open('modules/webservers/scripts/files/'+domain+'-ssl.key', 'w') as f:
|
||||
f.write(ssl_key_text)
|
||||
|
||||
ip=virtualhost.fields['ip'].check(ip)
|
||||
|
||||
if ip=='':
|
||||
ip='*'
|
||||
|
||||
"""
|
||||
if virtualhost.fields['home'].check(home)=='':
|
||||
error_form['#home_error']='Sorry, invalid home'
|
||||
error=1
|
||||
"""
|
||||
aliases=request.form.get('aliases', '')
|
||||
|
||||
arr_aliases=[]
|
||||
|
||||
if aliases!='':
|
||||
arr_aliases=[virtualhost.fields['domain'].check(alias.strip()) for alias in aliases.split(',') if virtualhost.fields['domain'].check(alias.strip())!='']
|
||||
|
||||
if len(arr_aliases)>0:
|
||||
aliases=",".join(arr_aliases)
|
||||
|
||||
php=request.form.get('php', '')
|
||||
|
||||
if php!='':
|
||||
if php!='7.4' and php!='8.0' and php!='8.1' and php!='8.2':
|
||||
php=''
|
||||
|
||||
task_id=0
|
||||
|
||||
serverdb=ServerDbTask(db)
|
||||
|
||||
arr_webserver=webserver.set_conditions('WHERE webserver.id=%s', [webserver_id]).select_a_row_where([], True)
|
||||
|
||||
if arr_webserver and not error:
|
||||
|
||||
arr_server=serverdb.select_a_row(arr_webserver['server_id'], [], True)
|
||||
|
||||
arr_virtualhost=virtualhost.select_a_row(virtualhost_id, [], True)
|
||||
|
||||
username=arr_virtualhost['username']
|
||||
|
||||
#print(arr_user)
|
||||
|
||||
#server_id=arr_user['webserver_id_server_id']
|
||||
|
||||
#username=arr_user['webserver_id_username']
|
||||
|
||||
#Check if not exists domain, etc
|
||||
|
||||
#arr_server=serverdb.select_a_row(server_id)
|
||||
|
||||
#print(arr_server)
|
||||
|
||||
sshtask=SSHTask(db)
|
||||
|
||||
#user=config_task.remote_user
|
||||
|
||||
ssh_key_priv='./ssh/id_rsa'
|
||||
|
||||
#run_task(self, server, path, name_task, codename_task, description_task, data={}, user='', password='', where_sql_server='', url='', ssh_key_priv='', ssh_key_password='', send_task=True)
|
||||
# user=user, password='', where_sql_server=where_sql, ssh_key_priv=ssh_key_priv, url='', data=data, send_task=True
|
||||
|
||||
root_dir=arr_virtualhost['home']
|
||||
|
||||
#ftp_user=arr_user['user']
|
||||
|
||||
if not sshtask.run_task(arr_server['ip'], 'modules.apache.tasks.apache.apache.edit_vhost', 'Edit Apache virtualhost', 'edit_apache_virtualhost', 'Task for edit a virtualhost to Apache Server', {'domain': domain, 'email': config.portal_email, 'webserver_id': arr_webserver['id'], 'user': username, 'root_dir': root_dir, 'cgi_type': cgi_type, 'ip': ip, 'port': port, 'ssl': ssl, 'ssl_port': ssl_port, 'aliases': aliases, 'indexes': indexes, 'allow_override': allow_override, 'virtualhost_id': virtualhost_id, 'redirect_ssl': redirect_ssl, 'php': php}, config_task.remote_user, '', '', url_for('admin_app.virtualhost', webserver_id=arr_webserver['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
|
||||
|
||||
else:
|
||||
|
||||
|
||||
error=1
|
||||
|
||||
return {'error': error, 'error_form': error_form, 'task_id': task_id}
|
||||
|
||||
@admin_app.route('/webservers/change_user_password', methods=['POST'])
|
||||
def change_user_password():
|
||||
|
||||
webserver_id=request.args.get('webserver_id', '0')
|
||||
|
||||
error=0
|
||||
|
||||
error_form={}
|
||||
|
||||
task_id=0
|
||||
|
||||
db=g.connection
|
||||
|
||||
vhost=VirtualHost(db)
|
||||
|
||||
#usersftp=UsersFtp(db)
|
||||
|
||||
webserver=WebServer(db)
|
||||
|
||||
arr_webserver=webserver.select_a_row(webserver_id, [], True)
|
||||
|
||||
if arr_webserver:
|
||||
"""
|
||||
password=request.form.get('password', '')
|
||||
|
||||
repeat_password=request.form.get('repeat_password', '')
|
||||
|
||||
if password!=repeat_password and password!='':
|
||||
error_form['#password_error']='Passwords doesn\'t match'
|
||||
password=''
|
||||
error=1
|
||||
"""
|
||||
|
||||
#ssh-keygen -l -f id_rsa.pub
|
||||
|
||||
ssh_pub_key=request.form.get('ssh_pub_key', '')
|
||||
|
||||
user=request.form.get('user', '')
|
||||
|
||||
if user=='':
|
||||
error_form['#user_error']=I18n.lang('webservers', 'error_you_need_an_user', 'Error: you need an user')
|
||||
error=1
|
||||
|
||||
if ssh_pub_key=='':
|
||||
error_form['#ssh_pub_key_error']=I18n.lang('webservers', 'error_you_need_a_ssh_pub_key', 'Error: you need a ssh public key')
|
||||
error=1
|
||||
|
||||
#username=arr_webserver['username']
|
||||
|
||||
serverdb=ServerDbTask(db)
|
||||
|
||||
arr_server=serverdb.select_a_row(arr_webserver['server_id'], [], True)
|
||||
|
||||
sshtask=SSHTask(db)
|
||||
|
||||
ssh_key_priv='./ssh/id_rsa'
|
||||
|
||||
#'password': password
|
||||
|
||||
if not sshtask.run_task(arr_server['ip'], 'modules.pastafari2.tasks.system.change_password_user', 'Change user password', 'Change user password', 'Task for change unix user password', {'user': user, 'ssh_pub_key': ssh_pub_key}, config_task.remote_user, '', '', url_for('admin_app.virtualhost', webserver_id=webserver_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
|
||||
|
||||
else:
|
||||
error=1
|
||||
|
||||
return {'error': error, 'error_form': error_form, 'task_id': task_id}
|
||||
|
||||
@admin_app.route('/webservers/users_list', methods=['GET'])
|
||||
def users_list():
|
||||
|
||||
return {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue