2015-12-01 02:43:10 +03:00
|
|
|
|
# coding: utf-8
|
|
|
|
|
|
|
|
|
|
from uuid import uuid4
|
|
|
|
|
from flask import Blueprint
|
|
|
|
|
from flask import request
|
|
|
|
|
from flask import session
|
|
|
|
|
from flask import redirect
|
|
|
|
|
from flask import render_template
|
|
|
|
|
from flask import url_for
|
|
|
|
|
from flask import g
|
|
|
|
|
from app import models
|
2015-12-02 02:34:17 +03:00
|
|
|
|
from app.cloud.controllers.common import special_match
|
|
|
|
|
from app.cloud.controllers.common import ControllerMessagesEmail
|
|
|
|
|
from app.cloud.controllers.administrators import ControllerAdministrators
|
2015-12-11 08:23:56 +03:00
|
|
|
|
from app.cloud.controllers.users.manage import ControllerManageUsers
|
|
|
|
|
from app.cloud.controllers.users.manage import ControllerManageUsersDetails
|
|
|
|
|
from app.cloud.controllers.users.manage import ControllerManageUsersBalance
|
2015-12-11 09:02:14 +03:00
|
|
|
|
from app.cloud.controllers.datacenters.manage import ControllerManageDatacenters
|
2015-12-01 02:43:10 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
viewAdministrator = Blueprint('administrator', __name__, url_prefix='/administrator')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/login', methods=['GET', 'POST'])
|
|
|
|
|
def login():
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
admin_email = request.form['email'].encode('utf-8')
|
|
|
|
|
admin_password = request.form['password'].encode('utf-8')
|
|
|
|
|
|
|
|
|
|
# validation entered data
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not special_match(admin_email, r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$")\
|
2015-12-01 02:43:10 +03:00
|
|
|
|
or len(admin_password) < 5:
|
|
|
|
|
g.errors['items'].append('Invalid registration data.')
|
|
|
|
|
g.errors['total'] += 1
|
|
|
|
|
# если ошибок нет, то продолжаем обработку
|
|
|
|
|
if g.errors['total'] == 0:
|
|
|
|
|
# try auth only active users (with status code 1)
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if ControllerAdministrators().auth(admin_email, admin_password, 1):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
# get user_id
|
2015-12-02 02:34:17 +03:00
|
|
|
|
user_id = ControllerAdministrators().get_id_by_email(admin_email)
|
2015-12-01 02:43:10 +03:00
|
|
|
|
|
|
|
|
|
# save user data to session
|
|
|
|
|
session['admin_id'] = str(user_id)
|
|
|
|
|
session['admin_email'] = admin_email
|
|
|
|
|
session['admin_password'] = admin_password
|
|
|
|
|
|
|
|
|
|
# redirect to rules list
|
|
|
|
|
return redirect(url_for('administrator.dashboard'))
|
|
|
|
|
else:
|
|
|
|
|
g.errors['items'].append('Invalid login. Please try again.')
|
|
|
|
|
g.errors['total'] += 1
|
|
|
|
|
return render_template('administrator/login.html')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/logout')
|
|
|
|
|
def logout():
|
|
|
|
|
session.pop('admin_id', None)
|
|
|
|
|
session.pop('admin_email', None)
|
|
|
|
|
session.pop('admin_password', None)
|
|
|
|
|
return redirect(url_for('administrator.login'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/dashboard')
|
|
|
|
|
def dashboard():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
2015-12-02 02:34:17 +03:00
|
|
|
|
#
|
2015-12-01 02:43:10 +03:00
|
|
|
|
stats = {
|
|
|
|
|
'users': models.Users.select().count(),
|
|
|
|
|
# 'rules': models.Rules.select().count(),
|
|
|
|
|
# 'traffic': models.RulesTraffic.select().count(),
|
|
|
|
|
'payments': models.UsersBalanceTransactions.select().count(),
|
|
|
|
|
}
|
2015-12-02 02:34:17 +03:00
|
|
|
|
#
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return render_template('administrator/dashboard.html', stats=stats)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/users/')
|
|
|
|
|
def users():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
2015-12-02 02:34:17 +03:00
|
|
|
|
#
|
2015-12-11 08:23:56 +03:00
|
|
|
|
return render_template(
|
|
|
|
|
'administrator/users/index.html',
|
|
|
|
|
users=ControllerManageUsers().items_get()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/users/details/<uuid:user_id>')
|
|
|
|
|
def user_details(user_id):
|
|
|
|
|
# check session
|
|
|
|
|
if not ControllerAdministrators().check_session():
|
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# check exists user by uuid
|
|
|
|
|
if not ControllerManageUsers().exists_by_id(user_id):
|
|
|
|
|
return redirect(url_for('administrator.users'))
|
|
|
|
|
#
|
|
|
|
|
return render_template(
|
|
|
|
|
'administrator/users/details.html',
|
|
|
|
|
user_account=ControllerManageUsers().item_get(user_id),
|
|
|
|
|
user_details=ControllerManageUsersDetails().item_get(user_id),
|
|
|
|
|
user_balance=ControllerManageUsersBalance().item_get(user_id),
|
|
|
|
|
)
|
2015-12-01 02:43:10 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/rules/')
|
|
|
|
|
def rules():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# формируем список правил
|
|
|
|
|
rules_items = {
|
2015-12-02 02:34:17 +03:00
|
|
|
|
'total': models.Containers.select().count(),
|
|
|
|
|
'items': models.Containers.select()
|
2015-12-01 02:43:10 +03:00
|
|
|
|
}
|
|
|
|
|
return render_template('administrator/rules/index.html', rules=rules_items)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/payments')
|
|
|
|
|
def payments():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
payments_items = {
|
|
|
|
|
'total': models.UsersBalanceTransactions.select().count(),
|
|
|
|
|
'items': models.UsersBalanceTransactions.select()
|
|
|
|
|
}
|
|
|
|
|
return render_template('administrator/payments.html', payments=payments_items)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/datacenters')
|
|
|
|
|
def datacenters():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
2015-12-11 09:02:14 +03:00
|
|
|
|
#
|
|
|
|
|
return render_template(
|
|
|
|
|
'administrator/datacenters/index.html',
|
|
|
|
|
datacenters=ControllerManageDatacenters().items_get()
|
|
|
|
|
)
|
2015-12-01 02:43:10 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/datacenters/create', methods=['GET', 'POST'])
|
|
|
|
|
def datacenters_create():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
# TODO: validate
|
|
|
|
|
dc_name = request.form['name']
|
|
|
|
|
dc_status = request.form['status']
|
|
|
|
|
|
|
|
|
|
# check exists datacenter
|
|
|
|
|
if models.DataCenters.select().where(models.DataCenters.name == dc_name).count() == 1:
|
|
|
|
|
return redirect(url_for('administrator.datacenters_create'))
|
|
|
|
|
|
|
|
|
|
models.DataCenters.create(id=uuid4(), name=dc_name, status=dc_status)
|
|
|
|
|
return redirect(url_for('administrator.datacenters'))
|
|
|
|
|
# todo: ... update record for datacenter
|
|
|
|
|
# return url_for('administrator.datacenters_edit', dc_id=dc_id)
|
|
|
|
|
# datacenter = models.DataCenters.select().where(models.DataCenters.id == dc_id).limit(1)[0]
|
|
|
|
|
|
|
|
|
|
return render_template('administrator/datacenters/create.html')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/datacenters/edit/<uuid:dc_id>', methods=['GET', 'POST'])
|
|
|
|
|
def datacenters_edit(dc_id):
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# check exists datacenter
|
|
|
|
|
if models.DataCenters.select().where(models.DataCenters.id == dc_id).count() == 0:
|
|
|
|
|
return redirect(url_for('administrator.datacenters'))
|
|
|
|
|
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
# todo: ... update record for datacenter
|
|
|
|
|
return url_for('administrator.datacenters_edit', dc_id=dc_id)
|
|
|
|
|
|
|
|
|
|
datacenter = models.DataCenters.select().where(models.DataCenters.id == dc_id).limit(1)[0]
|
|
|
|
|
|
|
|
|
|
return render_template('administrator/datacenters_edit.html', datacenter=datacenter)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/servers/')
|
|
|
|
|
def servers_index():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
|
|
|
|
|
servers_items = {
|
|
|
|
|
'total': models.Servers.select().count(),
|
|
|
|
|
'items': models.Servers.select()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return render_template('administrator/servers/index.html', servers=servers_items)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/servers/create', methods=['GET', 'POST'])
|
|
|
|
|
def servers_create():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
print request.form
|
|
|
|
|
server_id = uuid4()
|
|
|
|
|
server_secret = uuid4()
|
|
|
|
|
server_name = request.form['hostname']
|
|
|
|
|
server_dcid = request.form['datacenter_id']
|
|
|
|
|
server_ip = request.form['ip']
|
|
|
|
|
server_status = request.form['status']
|
|
|
|
|
|
2015-12-02 02:34:17 +03:00
|
|
|
|
models.Servers.create(
|
|
|
|
|
id=server_id,
|
|
|
|
|
hostname=server_name,
|
|
|
|
|
ip=server_ip,
|
|
|
|
|
datacenter=server_dcid,
|
|
|
|
|
secret=server_secret,
|
|
|
|
|
status=server_status
|
|
|
|
|
)
|
2015-12-01 02:43:10 +03:00
|
|
|
|
dcs = {
|
|
|
|
|
'total': models.DataCenters.select().count(),
|
|
|
|
|
'items': models.DataCenters.select()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return render_template('administrator/servers/create.html', datacenters=dcs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/servers/edit/<uuid:server_id>', methods=['GET', 'POST'])
|
|
|
|
|
def servers_edit(server_id):
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# check exists server
|
|
|
|
|
if models.Servers.select().where(models.Servers.id == server_id).count() == 0:
|
|
|
|
|
return redirect(url_for('administrator.servers'))
|
|
|
|
|
|
|
|
|
|
server_details = models.Servers.select().where(models.Servers.id == server_id).limit(1)[0]
|
|
|
|
|
|
|
|
|
|
return render_template('administrator/servers/edit.html', server=server_details)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/settings/')
|
|
|
|
|
def settings_index():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
|
|
|
|
|
settings_list = {
|
|
|
|
|
'total': models.Settings.select().count(),
|
|
|
|
|
'items': models.Settings.select()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return render_template('administrator/settings/index.html', settings=settings_list)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/settings/create', methods=['GET', 'POST'])
|
|
|
|
|
def settings_create():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# auth user
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().auth(session['admin_email'], session['admin_password']):
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
# Обрабатываем POST-запрос
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
# check exists `key`
|
|
|
|
|
if models.Settings.select().where(models.Settings.key == request.form['key']).count() == 0:
|
|
|
|
|
# Если указанного ключа нет в таблице, то добавляем его
|
|
|
|
|
models.Settings.create(key=request.form['key'], val=request.form['val'])
|
|
|
|
|
# После добавления записи делаем редирект на страницу со списком параметров
|
|
|
|
|
return redirect(url_for('administrator.settings_index'))
|
|
|
|
|
# Если предыдущее условие (проверка отсутствия ключа) не сработало,
|
|
|
|
|
# то выдаём сообщение об уже существующем ключе
|
|
|
|
|
g.errors['total'] += 1
|
|
|
|
|
g.errors['items'].append(u"Параметр уже существует")
|
|
|
|
|
return render_template('administrator/settings/create.html')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/settings/delete', methods=['GET', 'POST'])
|
|
|
|
|
def settings_delete():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
2015-12-02 02:34:17 +03:00
|
|
|
|
#
|
2015-12-01 02:43:10 +03:00
|
|
|
|
if models.Settings.select().where(models.Settings.id == request.args['id']).count() == 0:
|
|
|
|
|
return redirect(url_for('administrator.settings_index'))
|
2015-12-02 02:34:17 +03:00
|
|
|
|
#
|
2015-12-01 02:43:10 +03:00
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
delete_set = models.Settings.delete().where(models.Settings.id == request.form['id'])
|
|
|
|
|
delete_set.execute()
|
|
|
|
|
return redirect(url_for('administrator.settings_index'))
|
2015-12-02 02:34:17 +03:00
|
|
|
|
#
|
2015-12-01 02:43:10 +03:00
|
|
|
|
setting = models.Settings.select().where(models.Settings.id == request.args['id']).limit(1)[0]
|
2015-12-02 02:34:17 +03:00
|
|
|
|
#
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return render_template('administrator/settings/delete.html', setting=setting)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/settings/update', methods=['GET', 'POST'])
|
|
|
|
|
def settings_update():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
|
|
|
|
|
if models.Settings.select().where(models.Settings.id == request.args['id']).count() == 0:
|
|
|
|
|
return redirect(url_for('administrator.settings_index'))
|
|
|
|
|
#
|
|
|
|
|
if request.method == 'POST':
|
|
|
|
|
uq = models.Settings.update(val=request.form['val']).where(models.Settings.id == request.form['id'])
|
|
|
|
|
uq.execute()
|
|
|
|
|
return redirect(url_for('administrator.settings_index'))
|
|
|
|
|
# get setting parameter by ID
|
|
|
|
|
setting = models.Settings.select().where(models.Settings.id == request.args['id']).limit(1)[0]
|
|
|
|
|
return render_template('administrator/settings/update.html', setting=setting)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@viewAdministrator.route('/settings/messages/email_test.html', methods=['GET', 'POST'])
|
|
|
|
|
def settings_messages_email_test():
|
|
|
|
|
# check session
|
2015-12-02 02:34:17 +03:00
|
|
|
|
if not ControllerAdministrators().check_session():
|
2015-12-01 02:43:10 +03:00
|
|
|
|
return redirect(url_for("administrator.logout"))
|
|
|
|
|
|
|
|
|
|
email = ControllerMessagesEmail()
|
|
|
|
|
email.send(title='test', to='vanzhiganov@ya.ru', lead='qwdqwd', message='qwdqwd', callout='qwdqwd')
|
|
|
|
|
# if request.method == 'POST':
|
|
|
|
|
# uq = models.Settings.update(val=request.form['val']).where(models.Settings.id == request.form['id'])
|
|
|
|
|
# uq.execute()
|
|
|
|
|
# return redirect(url_for('administrator.settings_index'))
|
|
|
|
|
# get setting parameter by ID
|
|
|
|
|
setting = models.Settings.select().where(models.Settings.id == request.args['id']).limit(1)[0]
|
|
|
|
|
return render_template('administrator/settings/messages/email.html')
|