mirror of
https://github.com/marcus-alicia/iRedAdmin-Pro-SQL.git
synced 2026-05-26 23:19:45 +00:00
Add files via upload
This commit is contained in:
180
controllers/panel/log.py
Normal file
180
controllers/panel/log.py
Normal file
@@ -0,0 +1,180 @@
|
||||
# Author: Zhang Huangbin <zhb@iredmail.org>
|
||||
|
||||
import web
|
||||
import settings
|
||||
from libs import __url_license_terms__
|
||||
from libs import sysinfo
|
||||
from controllers import decorators
|
||||
from libs.panel import LOG_EVENTS, log as loglib
|
||||
|
||||
session = web.config.get('_session')
|
||||
|
||||
if settings.backend == 'ldap':
|
||||
from libs.ldaplib.core import LDAPWrap
|
||||
from libs.ldaplib import admin as ldap_lib_admin
|
||||
from libs import __version_ldap__ as __version__
|
||||
elif settings.backend in ['mysql', 'pgsql']:
|
||||
from libs import __version_sql__ as __version__
|
||||
from libs.sqllib import SQLWrap, admin as sql_lib_admin
|
||||
|
||||
|
||||
class Log:
|
||||
@decorators.require_admin_login
|
||||
def GET(self):
|
||||
form = web.input(_unicode=False)
|
||||
|
||||
# Get queries.
|
||||
form_event = web.safestr(form.get('event', 'all'))
|
||||
form_domain = web.safestr(form.get('domain', 'all'))
|
||||
form_admin = web.safestr(form.get('admin', 'all'))
|
||||
form_cur_page = web.safestr(form.get('page', '1'))
|
||||
|
||||
if not form_cur_page.isdigit() or form_cur_page == '0':
|
||||
form_cur_page = 1
|
||||
else:
|
||||
form_cur_page = int(form_cur_page)
|
||||
|
||||
total, entries = loglib.list_logs(event=form_event,
|
||||
domain=form_domain,
|
||||
admin=form_admin,
|
||||
cur_page=form_cur_page)
|
||||
|
||||
# Pre-defined
|
||||
all_domain_names = []
|
||||
all_admin_emails = []
|
||||
|
||||
if settings.backend == 'ldap':
|
||||
_wrap = LDAPWrap()
|
||||
conn = _wrap.conn
|
||||
|
||||
# Get all managed domains under control.
|
||||
qr = ldap_lib_admin.get_managed_domains(
|
||||
admin=session.get('username'),
|
||||
domain_name_only=True,
|
||||
conn=conn,
|
||||
)
|
||||
if qr[0]:
|
||||
all_domain_names = qr[1]
|
||||
|
||||
# Get all admins.
|
||||
if session.get('is_global_admin'):
|
||||
result = ldap_lib_admin.list_accounts(attributes=['mail'], conn=conn)
|
||||
if result[0] is not False:
|
||||
all_admin_emails = [v[1]['mail'][0] for v in result[1]]
|
||||
else:
|
||||
all_admin_emails = [form_admin]
|
||||
|
||||
elif settings.backend in ['mysql', 'pgsql']:
|
||||
# Get all managed domains under control.
|
||||
_wrap = SQLWrap()
|
||||
conn = _wrap.conn
|
||||
qr = sql_lib_admin.get_managed_domains(
|
||||
admin=session.get('username'),
|
||||
domain_name_only=True,
|
||||
conn=conn,
|
||||
)
|
||||
if qr[0]:
|
||||
all_domain_names = qr[1]
|
||||
|
||||
# Get all admins.
|
||||
if session.get('is_global_admin'):
|
||||
qr = sql_lib_admin.get_all_admins(columns=['username'], email_only=True, conn=conn)
|
||||
if qr[0]:
|
||||
all_admin_emails = qr[1]
|
||||
else:
|
||||
all_admin_emails = [form_admin]
|
||||
|
||||
all_domain_names.sort()
|
||||
all_admin_emails.sort()
|
||||
|
||||
return web.render('panel/log.html',
|
||||
event=form_event,
|
||||
domain=form_domain,
|
||||
admin=form_admin,
|
||||
log_events=LOG_EVENTS,
|
||||
cur_page=form_cur_page,
|
||||
total=total,
|
||||
entries=entries,
|
||||
all_domain_names=all_domain_names,
|
||||
all_admin_emails=all_admin_emails,
|
||||
msg=form.get('msg'))
|
||||
|
||||
@decorators.require_global_admin
|
||||
@decorators.csrf_protected
|
||||
@decorators.require_admin_login
|
||||
def POST(self):
|
||||
form = web.input(_unicode=False, id=[])
|
||||
action = form.get('action', 'delete')
|
||||
|
||||
delete_all = False
|
||||
if action == 'deleteAll':
|
||||
delete_all = True
|
||||
|
||||
qr = loglib.delete_logs(form=form, delete_all=delete_all)
|
||||
if qr[0]:
|
||||
# Keep the log filter.
|
||||
form_domain = web.safestr(form.get('domain'))
|
||||
form_admin = web.safestr(form.get('admin'))
|
||||
form_event = web.safestr(form.get('event'))
|
||||
url = 'domain={}&admin={}&event={}'.format(form_domain, form_admin, form_event)
|
||||
|
||||
raise web.seeother('/activities/admins?%s&msg=DELETED' % url)
|
||||
else:
|
||||
raise web.seeother('/activities/admins?msg=%s' % web.urlquote(qr[1]))
|
||||
|
||||
|
||||
class License:
|
||||
@decorators.require_global_admin
|
||||
def GET(self):
|
||||
qr_info = sysinfo.get_license_info()
|
||||
|
||||
if qr_info[0]:
|
||||
latest_ver = qr_info[1].get('latestversion', '1.0')
|
||||
|
||||
has_update = False
|
||||
try:
|
||||
# Convert version number to major + minor numbers, then
|
||||
# convert to integer and compare.
|
||||
#
|
||||
# Warning: Comparing (float) numbers in string format is not
|
||||
# accurate. For example, version "4.10" is "older" than "4.9".
|
||||
latest_vers = latest_ver.split(".", 1)
|
||||
if len(latest_vers) == 2:
|
||||
latest_major = latest_vers[0]
|
||||
latest_minor = latest_vers[1]
|
||||
else:
|
||||
latest_major = latest_ver
|
||||
latest_minor = "0"
|
||||
|
||||
cur_vers = __version__.split(".", 1)
|
||||
if len(cur_vers) == 2:
|
||||
cur_major = cur_vers[0]
|
||||
cur_minor = cur_vers[1]
|
||||
else:
|
||||
cur_major = __version__
|
||||
cur_minor = "0"
|
||||
|
||||
# Convert to int.
|
||||
i_latest_major = int(latest_major)
|
||||
i_latest_minor = int(latest_minor)
|
||||
i_cur_major = int(cur_major)
|
||||
i_cur_minor = int(cur_minor)
|
||||
|
||||
if i_latest_major > i_cur_major:
|
||||
has_update = True
|
||||
|
||||
if (i_latest_major == i_cur_major) and (i_latest_minor > i_cur_minor):
|
||||
has_update = True
|
||||
|
||||
if has_update:
|
||||
session['new_version_available'] = True
|
||||
session['new_version'] = latest_ver
|
||||
except:
|
||||
pass
|
||||
|
||||
return web.render('panel/license.html',
|
||||
info=qr_info[1],
|
||||
url_license_terms=__url_license_terms__,
|
||||
version=__version__)
|
||||
else:
|
||||
return web.render('panel/license.html', error=qr_info[1])
|
||||
Reference in New Issue
Block a user