73 Добавление средвств через панель админа
This commit is contained in:
parent
a614f13b2a
commit
033f992ec1
9 changed files with 157 additions and 77 deletions
|
@ -23,7 +23,6 @@ from SWSCloudCore.controllers.servers.manage import ControllerManageServer
|
||||||
from SWSCloudCore.controllers.users.manage import ControllerManageUsers
|
from SWSCloudCore.controllers.users.manage import ControllerManageUsers
|
||||||
from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance
|
from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance
|
||||||
from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails
|
from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails
|
||||||
from SWSCloudCore.controllers.tasks.manage import ControllerManageTasks
|
|
||||||
from SWSCloudCore.controllers.plans import ControllerPlans
|
from SWSCloudCore.controllers.plans import ControllerPlans
|
||||||
from SWSCloudCore import models
|
from SWSCloudCore import models
|
||||||
|
|
||||||
|
@ -92,43 +91,6 @@ def dashboard():
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@viewAdministrator.route('/users/')
|
|
||||||
def users():
|
|
||||||
# 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"))
|
|
||||||
#
|
|
||||||
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'))
|
|
||||||
#
|
|
||||||
if not ControllerBilling().exists(user_id):
|
|
||||||
ControllerBilling().create(user_id, g.settings['bonus'])
|
|
||||||
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),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@viewAdministrator.route('/containers/')
|
@viewAdministrator.route('/containers/')
|
||||||
def containers():
|
def containers():
|
||||||
# check session
|
# check session
|
||||||
|
|
|
@ -6,18 +6,7 @@
|
||||||
from flask import Blueprint, flash, g, jsonify, redirect, render_template, request, session, url_for
|
from flask import Blueprint, flash, g, jsonify, redirect, render_template, request, session, url_for
|
||||||
|
|
||||||
from SWSCloudCore.controllers.administrators import ControllerAdministrators
|
from SWSCloudCore.controllers.administrators import ControllerAdministrators
|
||||||
# from SWSCloudCore.controllers.billing import ControllerBilling
|
|
||||||
# from SWSCloudCore.controllers.common import ControllerMessagesEmail
|
|
||||||
# from SWSCloudCore.controllers.containers.manage import ControllerManageContainers
|
|
||||||
# from SWSCloudCore.controllers.vms.manage import ControllerVMSManage
|
|
||||||
# from SWSCloudCore.controllers.datacenters.manage import ControllerManageDatacenters
|
|
||||||
# from SWSCloudCore.controllers.ips.manage import ControllerManageIPs
|
|
||||||
# from SWSCloudCore.controllers.servers.manage import ControllerManageServer
|
|
||||||
# from SWSCloudCore.controllers.users.manage import ControllerManageUsers
|
|
||||||
# from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance
|
|
||||||
# from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails
|
|
||||||
from SWSCloudCore.controllers.tasks.manage import ControllerManageTasks
|
from SWSCloudCore.controllers.tasks.manage import ControllerManageTasks
|
||||||
# from SWSCloudCore.controllers.plans import ControllerPlans
|
|
||||||
from SWSCloudCore import models
|
from SWSCloudCore import models
|
||||||
|
|
||||||
view_administrator_tasks = Blueprint('administrator_tasks', __name__, url_prefix='/administrator/tasks')
|
view_administrator_tasks = Blueprint('administrator_tasks', __name__, url_prefix='/administrator/tasks')
|
||||||
|
|
96
SWSCloudAdministrator/Administrator/users.py
Normal file
96
SWSCloudAdministrator/Administrator/users.py
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
from uuid import uuid4
|
||||||
|
import validators
|
||||||
|
|
||||||
|
from flask import Blueprint, flash
|
||||||
|
from flask import g
|
||||||
|
from flask import jsonify
|
||||||
|
from flask import redirect
|
||||||
|
from flask import render_template
|
||||||
|
from flask import request
|
||||||
|
from flask import session
|
||||||
|
from flask import url_for
|
||||||
|
|
||||||
|
from SWSCloudAdministrator.Administrator.tasks import view_administrator_tasks
|
||||||
|
from SWSCloudCore.controllers.administrators import ControllerAdministrators
|
||||||
|
from SWSCloudCore.controllers.billing import ControllerBilling
|
||||||
|
from SWSCloudCore.controllers.common import ControllerMessagesEmail
|
||||||
|
from SWSCloudCore.controllers.containers.manage import ControllerManageContainers
|
||||||
|
from SWSCloudCore.controllers.vms.manage import ControllerVMSManage
|
||||||
|
from SWSCloudCore.controllers.datacenters.manage import ControllerManageDatacenters
|
||||||
|
from SWSCloudCore.controllers.ips.manage import ControllerManageIPs
|
||||||
|
from SWSCloudCore.controllers.servers.manage import ControllerManageServer
|
||||||
|
from SWSCloudCore.controllers.users.manage import ControllerManageUsers
|
||||||
|
from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance
|
||||||
|
from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails
|
||||||
|
from SWSCloudCore.controllers.plans import ControllerPlans
|
||||||
|
from SWSCloudCore import models
|
||||||
|
|
||||||
|
view_administrator_users = Blueprint('administrator_users', __name__, url_prefix='/administrator/users')
|
||||||
|
|
||||||
|
|
||||||
|
@view_administrator_users.route('/')
|
||||||
|
def users():
|
||||||
|
# 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"))
|
||||||
|
#
|
||||||
|
return render_template(
|
||||||
|
'administrator/users/index.html',
|
||||||
|
users=ControllerManageUsers().items_get()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@view_administrator_users.route('/details/<uuid:user_id>.html')
|
||||||
|
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.get('admin_email'), session.get('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.users'))
|
||||||
|
#
|
||||||
|
if not ControllerBilling().exists(user_id):
|
||||||
|
ControllerBilling().create(user_id, g.settings.get('bonus', 0))
|
||||||
|
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),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@view_administrator_users.route('/credit_increase.html', methods=['POST'])
|
||||||
|
def user_credits_add():
|
||||||
|
# check session
|
||||||
|
if not ControllerAdministrators().check_session():
|
||||||
|
return redirect(url_for("administrator.logout"))
|
||||||
|
# auth user
|
||||||
|
if not ControllerAdministrators().auth(session.get('admin_email'), session.get('admin_password')):
|
||||||
|
return redirect(url_for("administrator.logout"))
|
||||||
|
|
||||||
|
user_id = request.form.get('user_id')
|
||||||
|
__amount = request.form.get('amount')
|
||||||
|
|
||||||
|
try:
|
||||||
|
amount = float(__amount)
|
||||||
|
except:
|
||||||
|
flash(u'Amount mast have type INT (123) or FLOAT (123.2)')
|
||||||
|
return redirect(url_for('administrator_users.user_details', user_id=user_id))
|
||||||
|
|
||||||
|
# check exists user by uuid
|
||||||
|
if not ControllerManageUsers().exists_by_id(user_id):
|
||||||
|
return redirect(url_for('administrator_users.users'))
|
||||||
|
#
|
||||||
|
if not ControllerBilling().exists(user_id):
|
||||||
|
ControllerBilling().create(user_id, g.settings.get('bonus', 0))
|
||||||
|
|
||||||
|
ControllerBilling().increase(user_id, amount)
|
||||||
|
return redirect(url_for('administrator_users.user_details', user_id=user_id))
|
|
@ -8,6 +8,7 @@ from SWSCloudCore import models
|
||||||
from SWSCloudCore.config import config
|
from SWSCloudCore.config import config
|
||||||
from SWSCloudCore.models import database
|
from SWSCloudCore.models import database
|
||||||
from SWSCloudAdministrator.Administrator import viewAdministrator
|
from SWSCloudAdministrator.Administrator import viewAdministrator
|
||||||
|
from SWSCloudAdministrator.Administrator.users import view_administrator_users
|
||||||
from SWSCloudAdministrator.Administrator.tasks import view_administrator_tasks
|
from SWSCloudAdministrator.Administrator.tasks import view_administrator_tasks
|
||||||
|
|
||||||
app = Flask(__name__, static_folder='static', static_url_path='')
|
app = Flask(__name__, static_folder='static', static_url_path='')
|
||||||
|
@ -19,6 +20,7 @@ babel = Babel(app)
|
||||||
|
|
||||||
app.register_blueprint(viewAdministrator)
|
app.register_blueprint(viewAdministrator)
|
||||||
app.register_blueprint(view_administrator_tasks)
|
app.register_blueprint(view_administrator_tasks)
|
||||||
|
app.register_blueprint(view_administrator_users)
|
||||||
|
|
||||||
|
|
||||||
# @app.errorhandler(404)
|
# @app.errorhandler(404)
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<li><a href="{{ url_for('administrator.dashboard') }}">Dashboard</a></li>
|
<li><a href="{{ url_for('administrator.dashboard') }}">Dashboard</a></li>
|
||||||
<li>Billing
|
<li>Billing
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('administrator.users') }}">Users</a></li>
|
<li><a href="{{ url_for('administrator_users.users') }}">Users</a></li>
|
||||||
<li><a href="{{ url_for('administrator.payments') }}">Payments</a></li>
|
<li><a href="{{ url_for('administrator.payments') }}">Payments</a></li>
|
||||||
<li><a href="{{ url_for('administrator.plans_index') }}">Plans</a></li>
|
<li><a href="{{ url_for('administrator.plans_index') }}">Plans</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -6,66 +6,76 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h4>Account</h4>
|
<h4>Account</h4>
|
||||||
<table class="table table-border">
|
<table class="table table-border" width="100%">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>ID</td>
|
<td>ID</td>
|
||||||
<td>{{ user_account['id'] }}</td>
|
<td><input type="text" value="{{ user_account['id'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Email</td>
|
<td>Email</td>
|
||||||
<td>{{ user_account['email'] }}</td>
|
<td><input type="text" value="{{ user_account['email'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Status</td>
|
<td>Status</td>
|
||||||
<td>{{ user_account['status'] }}</td>
|
<td><input type="text" value="{{ user_account['status'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<h4>Details</h4>
|
<h4>Details</h4>
|
||||||
<a href="">Edit</a>
|
<a href="">Edit</a>
|
||||||
<table class="table">
|
<table class="table table-border" width="100%">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>First name</td>
|
<td>First name</td>
|
||||||
<td>{{ user_details['fname'] }}</td>
|
<td><input type="text" value="{{ user_details['fname'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Last name</td>
|
<td>Last name</td>
|
||||||
<td>{{ user_details['lname'] }}</td>
|
<td><input type="text" value="{{ user_details['lname'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Address</td>
|
<td>Address</td>
|
||||||
<td>{{ user_details['address'] }}</td>
|
<td><input type="text" value="{{ user_details['address'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>City</td>
|
<td>City</td>
|
||||||
<td>{{ user_details['city'] }}</td>
|
<td><input type="text" value="{{ user_details['city'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Country</td>
|
<td>Country</td>
|
||||||
<td>{{ user_details['country'] }}</td>
|
<td><input type="text" value="{{ user_details['country'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>State</td>
|
<td>State</td>
|
||||||
<td>{{ user_details['state'] }}</td>
|
<td><input type="text" value="{{ user_details['state'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>ZIP code</td>
|
<td>ZIP code</td>
|
||||||
<td>{{ user_details['zipcode'] }}</td>
|
<td><input type="text" value="{{ user_details['zipcode'] }}" disabled /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<form action="{{ url_for('administrator_users.user_credits_add') }}" method="post">
|
||||||
<h4>Balance</h4>
|
<h4>Balance</h4>
|
||||||
<a href="">Add money</a>
|
<table class="table" width="100%">
|
||||||
<table class="table">
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Balance</td>
|
<td>Balance</td>
|
||||||
<td>{{ user_balance['balance'] }}</td>
|
<td>{{ user_balance['balance'] }}</td>
|
||||||
|
<td><input type="text" name="amount" value="" /></td>
|
||||||
|
<td><input type="hidden" name="user_id" value="{{user_account.id}}" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</form>
|
||||||
<h4>Transactions history</h4>
|
<h4>Transactions history</h4>
|
||||||
...
|
<table class="table">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>...</td>
|
||||||
|
<td>...</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ url_for('administrator.user_details', user_id=user.id) }}">Edit</a>
|
<a href="{{ url_for('administrator_users.user_details', user_id=user.id) }}">Edit</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -18,11 +18,23 @@ class ControllerBilling:
|
||||||
).get()
|
).get()
|
||||||
return x.balance
|
return x.balance
|
||||||
|
|
||||||
def update(self, user_id):
|
def increase(self, user_id, amount):
|
||||||
"""
|
"""
|
||||||
Обновление баланса
|
Обновление баланса
|
||||||
"""
|
"""
|
||||||
return None
|
balance = models.UsersBalance.get(models.UsersBalance.user == user_id)
|
||||||
|
balance.balance += float(amount)
|
||||||
|
balance.save()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def reduce(self, user_id, amount):
|
||||||
|
"""
|
||||||
|
Обновление баланса
|
||||||
|
"""
|
||||||
|
balance = models.UsersBalance.get(models.UsersBalance.user == user_id)
|
||||||
|
balance.balance -= float(amount)
|
||||||
|
balance.save()
|
||||||
|
return True
|
||||||
|
|
||||||
def exists(self, user_id):
|
def exists(self, user_id):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -74,6 +74,15 @@ class Plans(PgSQLModel):
|
||||||
cores = IntegerField(null=False)
|
cores = IntegerField(null=False)
|
||||||
|
|
||||||
|
|
||||||
|
class PlansContainers(PgSQLModel):
|
||||||
|
datacenter = ForeignKeyField(DataCenters, unique=True)
|
||||||
|
name = CharField(default='')
|
||||||
|
price_ip = IntegerField(null=False)
|
||||||
|
price_storage_gb = IntegerField(null=False)
|
||||||
|
price_memory_mb = IntegerField(null=False)
|
||||||
|
price_traffic_gb = IntegerField(null=False)
|
||||||
|
|
||||||
|
|
||||||
class PlansVMs(PgSQLModel):
|
class PlansVMs(PgSQLModel):
|
||||||
id = UUIDField(primary_key=True, unique=True)
|
id = UUIDField(primary_key=True, unique=True)
|
||||||
name = CharField(unique=True, null=False)
|
name = CharField(unique=True, null=False)
|
||||||
|
@ -248,7 +257,7 @@ class Notifications(PgSQLModel):
|
||||||
class NotificationsSecurity(PgSQLModel):
|
class NotificationsSecurity(PgSQLModel):
|
||||||
# auth_web
|
# auth_web
|
||||||
# auth_api
|
# auth_api
|
||||||
# auth_api
|
# auth_serverapi
|
||||||
alert = CharField(null=False)
|
alert = CharField(null=False)
|
||||||
notified = DateTimeField(default=datetime.datetime.now)
|
notified = DateTimeField(default=datetime.datetime.now)
|
||||||
details = TextField()
|
details = TextField()
|
||||||
|
|
Loading…
Add table
Reference in a new issue