hot fixes

This commit is contained in:
Vyacheslav Anzhiganov 2016-10-20 04:30:25 +03:00
parent 0e77cb60cc
commit 0a95073b50
19 changed files with 208 additions and 138 deletions

View file

@ -1,45 +1,29 @@
# coding: utf-8 # coding: utf-8
from flask import Blueprint, flash from flask import Blueprint, flash, g, redirect, render_template, request, session, url_for
from flask import g
from flask import redirect
from flask import render_template
from flask import request
from flask import session
from flask import url_for
from SWSCloudCore.controllers.administrators import ControllerAdministrators from SWSCloudCore.controllers.administrators import ControllerAdministrators
from SWSCloudCore.controllers.billing import ControllerBilling from SWSCloudCore.controllers.billing import ControllerBilling
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 SWSCloudAdministrator.Administrator.common import requires_login
view_administrator_users = Blueprint('administrator_users', __name__, url_prefix='/administrator/users') view_administrator_users = Blueprint('administrator_users', __name__, url_prefix='/administrator/users')
@view_administrator_users.route('/') @view_administrator_users.route('/')
@requires_login
def 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( return render_template(
'administrator/users/index.html', 'administrator/users/index.html',
users=ControllerManageUsers().items_get() users=ControllerManageUsers().items_get())
)
@view_administrator_users.route('/details/<uuid:user_id>.html') @view_administrator_users.route('/details/<uuid:user_id>.html')
@requires_login
def user_details(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.get('admin_email'), session.get('admin_password')):
return redirect(url_for("administrator.logout"))
# check exists user by uuid # check exists user by uuid
if not ControllerManageUsers().exists_by_id(user_id): if not ControllerManageUsers().exists_by_id(user_id):
return redirect(url_for('administrator_users.users')) return redirect(url_for('administrator_users.users'))
@ -50,19 +34,12 @@ def user_details(user_id):
'administrator/users/details.html', 'administrator/users/details.html',
user_account=ControllerManageUsers().item_get(user_id), user_account=ControllerManageUsers().item_get(user_id),
user_details=ControllerManageUsersDetails().item_get(user_id), user_details=ControllerManageUsersDetails().item_get(user_id),
user_balance=ControllerManageUsersBalance().item_get(user_id), user_balance=ControllerManageUsersBalance().item_get(user_id))
)
@view_administrator_users.route('/credit_increase.html', methods=['POST']) @view_administrator_users.route('/credit_increase.html', methods=['POST'])
@requires_login
def user_credits_add(): 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') user_id = request.form.get('user_id')
__amount = request.form.get('amount') __amount = request.form.get('amount')

View file

@ -1,8 +1,10 @@
# coding: utf-8 # coding: utf-8
import os
from flask import Flask, g, render_template from flask import Flask, g, render_template
from flask_babel import Babel from flask_babel import Babel
from flaskext.markdown import Markdown from flaskext.markdown import Markdown
from flask_multistatic import MultiStaticFlask
from SWSCloudAdministrator.Administrator import viewAdministrator from SWSCloudAdministrator.Administrator import viewAdministrator
from SWSCloudCore import models from SWSCloudCore import models
@ -18,10 +20,35 @@ from SWSCloudWeb.views.payments import viewPayments
from SWSCloudWeb.views.support import viewSupport from SWSCloudWeb.views.support import viewSupport
from SWSCloudWeb.views.tasks import viewTasks from SWSCloudWeb.views.tasks import viewTasks
app = Flask(__name__, static_folder='static', static_url_path='') # app = Flask(__name__, static_folder='static', static_url_path='')
app = MultiStaticFlask(__name__, static_folder='static', static_url_path='')
# app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME') # app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME')
app.config['DEBUG'] = config.getboolean('Application', 'DEBUG') app.config['DEBUG'] = config.getboolean('Application', 'DEBUG')
app.config['SECRET_KEY'] = config.get("Application", "SECRET_KEY") app.config['SECRET_KEY'] = config.get("Application", "SECRET_KEY")
if app.config.get('THEME_TEMPLATE_FOLDER', False):
# Jinja can be told to look for templates in different folders
# That's what we do here
template_folder = app.config['THEME_TEMPLATE_FOLDER']
if template_folder[0] != '/':
template_folder = os.path.join(app.root_path, app.template_folder, template_folder)
import jinja2
# Jinja looks for the template in the order of the folders specified
templ_loaders = [jinja2.FileSystemLoader(template_folder), app.jinja_loader]
app.jinja_loader = jinja2.ChoiceLoader(templ_loaders)
if app.config.get('THEME_STATIC_FOLDER', False):
static_folder = app.config['THEME_STATIC_FOLDER']
if static_folder[0] != '/':
static_folder = os.path.join(app.root_path, 'static', static_folder)
print static_folder
# Unlike templates, to serve static files from multiples folders we
# need flask-multistatic
# app.static_folder = [static_folder, os.path.join(app.root_path, 'static')]
app.static_folder = static_folder
Markdown(app) Markdown(app)
babel = Babel(app) babel = Babel(app)

File diff suppressed because one or more lines are too long

View file

@ -7,6 +7,7 @@ body {
header { header {
background: #333 none repeat scroll 0% 0%; background: #333 none repeat scroll 0% 0%;
} }
#banner { #banner {
overflow: hidden; overflow: hidden;
padding: 4em 0 5em; padding: 4em 0 5em;
@ -39,14 +40,6 @@ text-align: center;
margin-bottom: 50px; margin-bottom: 50px;
} }
footer {
border-top: 1px solid #999;
}
footer .row {
margin-top: 25px;
margin-bottom: 25px;
}
.price { .price {
text-align: right; text-align: right;
} }
@ -97,4 +90,22 @@ ul#features-list li {
#account_bills { #account_bills {
color: white; color: white;
}
footer {
background-color: #f0f0f0;
/*border-top: 1px solid #999;*/
position: fixed;
bottom: 0;
width: 100%;
height: 3em; /* choose any height */
}
footer .row div ul {
list-style: none;
}
footer .row div ul li {
float: left;
background-color: #f1f1f1;
margin: .7em;
} }

View file

@ -1,7 +1,6 @@
<footer> <footer>
<div class="row"> <div class="row">
<div class="large-6 medium-6 columns"> <div class="large-12 columns">
<b>{{ _('Поддержка') }}</b>
<ul> <ul>
{% if g.settings.get('SUPPORT_TEL', None) %} {% if g.settings.get('SUPPORT_TEL', None) %}
<li>{{g.system_settings.get('SUPPORT_TEL')}}</li> <li>{{g.system_settings.get('SUPPORT_TEL')}}</li>
@ -9,12 +8,10 @@
{% if g.settings.get('SUPPORT_EMAIL', None) %} {% if g.settings.get('SUPPORT_EMAIL', None) %}
<li>{{g.system_settings.get('SUPPORT_EMAIL')}}</li> <li>{{g.system_settings.get('SUPPORT_EMAIL')}}</li>
{% endif %} {% endif %}
<li>2009&minus;2016 &copy; GoCloud.ru</li>
<li><a href="{{ url_for('support.index') }}">{{ _('Форма обратной связи') }}</a></li> <li><a href="{{ url_for('support.index') }}">{{ _('Форма обратной связи') }}</a></li>
</ul> </ul>
</div> </div>
<div class="large-6 medium-6 columns">
<p>2009&minus;2016 &copy; GoCloud.ru</p>
</div>
</div> </div>
</footer> </footer>
{% if g.settings['footer_code'] %} {% if g.settings['footer_code'] %}

View file

@ -13,7 +13,7 @@
{% if session['user_id'] %} {% if session['user_id'] %}
<ul class="right"> <ul class="right">
<li><a href="{{ url_for('account.index') }}">{{ _('Учётная запись') }}</a></li> <li><a href="{{ url_for('account.index') }}">{{ _('Учётная запись') }}</a></li>
<li><a href="{{ url_for('bills.index') }}">{{ _('Счёт') }}<span id="account_bills"></span></a></li> <li><a href="{{ url_for('bills.index') }}">{{ _('Баланс') }}<span id="account_bills"></span></a></li>
<li><a href="{{ url_for('account.logout') }}">{{ _('Выход') }}</a></li> <li><a href="{{ url_for('account.logout') }}">{{ _('Выход') }}</a></li>
</ul> </ul>
<ul class="left"> <ul class="left">

View file

@ -1,5 +1,5 @@
<ul class="inline-list"> <ul class="inline-list">
<li><a href="{{ url_for('.index') }}">Счёт</a></li> <li><a href="{{ url_for('.index') }}">Баланс</a></li>
<li><a href="{{ url_for('.payments') }}">Платежи</a></li> <li><a href="{{ url_for('.payments') }}">Платежи</a></li>
<li><a href="{{ url_for('.charge') }}">Пополнить баланс</a></li> <li><a href="{{ url_for('.charge') }}">Пополнить баланс</a></li>
</ul> </ul>

View file

@ -5,9 +5,7 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">
<h2>Счёт / Пополнить баланс</h2> <h2>Пополнить баланс</h2>
</div>
<div class="large-12 columns">
{% include "default/billing/_menu.html" %} {% include "default/billing/_menu.html" %}
</div> </div>
</div> </div>
@ -15,7 +13,6 @@
<div class="large-12 column"> <div class="large-12 column">
<h5>Электронные платёжные системы</h5> <h5>Электронные платёжные системы</h5>
</div> </div>
{% if g.settings['PAY_ROBOKASSA_ENABLED'] == "1" %} {% if g.settings['PAY_ROBOKASSA_ENABLED'] == "1" %}
<form action="{{ url_for('payments.robokassa', action='process') }}" method="post"> <form action="{{ url_for('payments.robokassa', action='process') }}" method="post">
<div class="large-3 columns"> <div class="large-3 columns">

View file

@ -5,15 +5,20 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">
<h2>Счёт</h2> <h2>Баланс</h2>
</div>
<div class="large-12 columns">
{% include "default/billing/_menu.html" %} {% include "default/billing/_menu.html" %}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="large-6 columns"> <div class="large-12 columns">
<p>Баланс: {{ user_balance }} рублей</p> <p>Баланс: <b>{{ user_balance }} рублей</b>.</p>
</div>
<div class="large-12 columns">
<div style="background: green; color: #fff; padding:1em;">
<p>Мы предоставляем вам возможность работать при отрицательном балансе до &minus;500 рублей.</p>
<p>При отсутствии оплаты в течении 15 дней виртуальный сервер автоматически отключается.
По истечению последующих 30 дней виртуальный сервер удаляется.</p>
</div>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View file

@ -5,15 +5,12 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">
<h2>Учётная запись</h2> <h2>История платежей</h2>
</div>
<div class="large-12 columns">
{% include "default/billing/_menu.html" %} {% include "default/billing/_menu.html" %}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">
<h4>История платежей</h4>
<table width="100%"> <table width="100%">
<thead> <thead>
<tr> <tr>
@ -53,7 +50,8 @@
{{ record['status'] }} {{ record['status'] }}
{% endif %} {% endif %}
</td> </td>
<td>{{record['method']}}</td> <td>{{record['method']}}</td>
<td>{% if record['paid'] %}{{record['paid']}}{% else %}&minus;{% endif %}</td>
</tr> </tr>
{% endfor %} {% endfor %}
{% endif %} {% endif %}

View file

@ -2,6 +2,6 @@
<li><a href="{{ url_for('account.index') }}">Учётная запись</a></li> <li><a href="{{ url_for('account.index') }}">Учётная запись</a></li>
{# <li><a href="{{ url_for('account.settings') }}">Настройки</a></li>#} {# <li><a href="{{ url_for('account.settings') }}">Настройки</a></li>#}
<li><a href="{{ url_for('account.password_update') }}">Смена пароля</a></li> <li><a href="{{ url_for('account.password_update') }}">Смена пароля</a></li>
<li><a href="{{ url_for('account.sshkey') }}">SSH ключ</a></li> <li><a href="{{ url_for('account.sshkey') }}">SSH-ключ</a></li>
<li><a href="{{ url_for('account.api_index') }}">API</a></li> <li><a href="{{ url_for('account.api_index') }}">API</a></li>
</ul> </ul>

View file

@ -5,17 +5,10 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">
<h2>Учётная запись</h2> <h2>API</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %} {% include "default/id/_menu.html" %}
</div> </div>
</div> </div>
<div class="row">
<div class="large-12 columns">
<h3>API</h3>
</div>
</div>
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">

View file

@ -5,16 +5,11 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">
<h2>Учётная запись</h2> <h2>Смена пароля</h2>
</div>
<div class="large-12 columns">
{% include "default/id/_menu.html" %} {% include "default/id/_menu.html" %}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="large-12 columns">
<h3>Смена пароля</h3>
</div>
<div class="large-12 columns"> <div class="large-12 columns">
<form action="{{ url_for('account.password_update') }}" method="post"> <form action="{{ url_for('account.password_update') }}" method="post">
<label>Старый пароль</label> <label>Старый пароль</label>

View file

@ -3,31 +3,30 @@
{% block title %}SSH-ключ{% endblock %} {% block title %}SSH-ключ{% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns content">
<h2>Учётная запись</h2> <div class="row">
<div class="large-12 columns">
<h2>SSH-ключ</h2>
{% include "default/id/_menu.html" %}
</div>
</div> </div>
<div class="row">
<div class="large-12 columns">
{% if sshkey.exists %}
<form action="{{ url_for('account.sshkey_delete') }}" method="post">
<input type="text" value="{{ sshkey.sshkey }}" disabled />
<input type="submit" value="Удалить ключ" class="button alert" />
</form>
{% else %}
<form action="{{ url_for('account.sshkey_post') }}" method="post">
<label for="sshkey">SSH-ключ</label>
<input type="text" name="sshkey" value="" id="sshkey" class="form" />
<input type="submit" value="Добавить ключ" class="button button-success" />
</form>
{% endif %}
</div>
</div> </div>
</div> </div>
<div class="row"> </div>
<div class="large-12 columns">
<h3>SSH-ключ</h3>
</div>
</div>
<div class="row">
<div class="large-12 columns">
{% if sshkey.exists %}
<form action="{{ url_for('account.sshkey_delete') }}" method="post">
<input type="text" value="{{ sshkey.sshkey }}" disabled />
<input type="submit" value="Удалить ключ" class="button alert" />
</form>
{% else %}
<form action="{{ url_for('account.sshkey') }}" method="post">
<label for="sshkey">SSH-ключ</label>
<input type="text" name="sshkey" value="" id="sshkey" class="form" />
<input type="submit" value="Добавить ключ" class="button button-success" />
</form>
{% endif %}
</div>
</div>
{% endblock %} {% endblock %}

View file

@ -26,8 +26,8 @@
<div class="title-bar-right"> <div class="title-bar-right">
{% if session['user_id'] %} {% if session['user_id'] %}
<ul class="menu"> <ul class="menu">
<li><a href="{{ url_for('account.index') }}">{{ _('Учётная запись') }}</a></li> <li><a href="{{ url_for('vms.index') }}">{{ _('Панель управления') }}</a></li>
<li><a href="{{ url_for('bills.index') }}">{{ _('Счёт') }}<span id="account_bills"></span></a></li> <li><a href="{{ url_for('bills.index') }}">{{ _('Баланс') }}<span id="account_bills"></span></a></li>
<li><a href="{{ url_for('account.logout') }}">{{ _('Выход') }}</a></li> <li><a href="{{ url_for('account.logout') }}">{{ _('Выход') }}</a></li>
</ul> </ul>
{% else %} {% else %}
@ -57,7 +57,8 @@
<footer> <footer>
<hr> <hr>
<div class="row"> {# <div class="row">
<div class="large-4 columns text-center"> <div class="large-4 columns text-center">
<b>Поддержка</b> <b>Поддержка</b>
<ul> <ul>
@ -79,8 +80,15 @@
</ul> </ul>
</div> </div>
</div> </div>
#}
<div class="row"> <div class="row">
<div class="large-12 columns text-center"> <div class="large-6 columns text-center">
<ul>
<li>+7 499 702-02-36</li>
<li>support@gocloud.ru</li>
</ul>
</div>
<div class="large-6 columns text-center">
<p class="copyright">2009-2016 © GoCloud.ru</p> <p class="copyright">2009-2016 © GoCloud.ru</p>
<script type="text/javascript" src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js" charset="utf-8"></script> <script type="text/javascript" src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js" charset="utf-8"></script>
<script type="text/javascript" src="//yastatic.net/share2/share.js" charset="utf-8"></script> <script type="text/javascript" src="//yastatic.net/share2/share.js" charset="utf-8"></script>

View file

@ -13,48 +13,79 @@
</div> </div>
</div> </div>
<article class="row">
<div class="large-12 columns">
<p>Виртуальный приватный сервер, практически полностью позволяющий заменить основные возможности физического сервера.</p>
<p>На нем можно реализовать проекты любой сложности, например персональный блог, интернет-магазина, крупный корпоративный портал или требующий больших ресурсов проект.</p>
<p>VPS хостинг GoCloud отличают невысокие цены, высокая скорость работы, гибкость работы в виртуальной машине.</p>
</div>
</article>
<div class="pricing"> <div class="pricing">
<div class="row"> <div class="row">
<div class="large-3 medium-12 small-12 columns"> <div class="large-4 medium-4 small-12 columns">
<ul class="pricing-table">
<li class="title">G0</li>
<li class="price">200 <small>руб./мес.</small></li>
<li class="bullet-item">Процессор <span>1</span></li>
<li class="bullet-item">Память <span>512Мб</span></li>
<li class="bullet-item">Диск <span>10Гб</span></li>
<li class="cta-button"><a class="button alert" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul>
</div>
<div class="large-4 medium-4 small-12 columns">
<ul class="pricing-table"> <ul class="pricing-table">
<li class="title">G1</li> <li class="title">G1</li>
<li class="price">590 <small>руб./мес.</small></li> <li class="price">590 <small>руб./мес.</small></li>
<li class="bullet-item">Процессор <span>1</span></li> <li class="bullet-item">Процессор <span>1</span></li>
<li class="bullet-item">Память <span>б</span></li> <li class="bullet-item">Память <span>б</span></li>
<li class="bullet-item">Диск <span>20Гб</span></li> <li class="bullet-item">Диск <span>20Гб</span></li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li> <li class="cta-button"><a class="button alert" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul> </ul>
</div> </div>
<div class="large-3 medium-12 small-12 columns"> <div class="large-4 medium-4 small-12 columns">
<ul class="pricing-table"> <ul class="pricing-table">
<li class="title">G2</li> <li class="title">G2</li>
<li class="price">1080 <small>руб./мес.</small></li> <li class="price">1080 <small>руб./мес.</small></li>
<li class="bullet-item">Процессор <span>2</span></li> <li class="bullet-item">Процессор <span>2</span></li>
<li class="bullet-item">Память <span>б</span></li> <li class="bullet-item">Память <span>б</span></li>
<li class="bullet-item">Диск <span>30Гб</span></li> <li class="bullet-item">Диск <span>30Гб</span></li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li> <li class="cta-button"><a class="button alert" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul> </ul>
</div> </div>
<div class="large-3 medium-12 small-12 columns"> </div>
<div class="row">
<div class="large-4 medium-4 small-12 columns">
<ul class="pricing-table"> <ul class="pricing-table">
<li class="title">G4</li> <li class="title">G4</li>
<li class="price">2050 <small>руб./мес.</small></li> <li class="price">2050 <small>руб./мес.</small></li>
<li class="bullet-item">Процессор <span>2</span></li> <li class="bullet-item">Процессор <span>2</span></li>
<li class="bullet-item">Память <span>б</span></li> <li class="bullet-item">Память <span>б</span></li>
<li class="bullet-item">Диск <span>50Гб</span></li> <li class="bullet-item">Диск <span>50Гб</span></li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li> <li class="cta-button"><a class="button alert" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul> </ul>
</div> </div>
<div class="large-3 medium-12 small-12 columns"> <div class="large-4 medium-4 small-12 columns">
<ul class="pricing-table"> <ul class="pricing-table">
<li class="title">G8</li> <li class="title">G8</li>
<li class="price">3900 <small>руб./мес.</small></li> <li class="price">3900 <small>руб./мес.</small></li>
<li class="bullet-item">Процессор <span>4</span></li> <li class="bullet-item">Процессор <span>4</span></li>
<li class="bullet-item">Память <span>б</span></li> <li class="bullet-item">Память <span>б</span></li>
<li class="bullet-item">Диск <span>80Гб</span></li> <li class="bullet-item">Диск <span>80Гб</span></li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li> <li class="cta-button"><a class="button alert" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul>
</div>
<div class="large-4 medium-4 small-12 columns">
<ul class="pricing-table">
<li class="title">G16</li>
<li class="price">6800 <small>руб./мес.</small></li>
<li class="bullet-item">Процессор <span>8</span></li>
<li class="bullet-item">Память <span>16Гб</span></li>
<li class="bullet-item">Диск <span>160Гб</span></li>
<li class="cta-button"><a class="button alert" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
{% include 'gocloud2016/macros/testimonials.html' %}
{% endblock %} {% endblock %}

View file

@ -12,20 +12,30 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th>&nbsp;</th> <th>План</th>
<th>Процессор</th> <th>Процессор</th>
<th>Память</th> <th>Память</th>
<th>Диск</th> <th>Диск</th>
<th>Цена</th> <th>Цена</th>
<th>&nbsp;</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr>
<td>G0</td>
<td>1</td>
<td>0.5 Гб</td>
<td>10 Гб</td>
<td>200 руб./мес.</td>
<td><a href="{{ url_for('vms.create') }}" class="button alert ordernow">Заказать</a></td>
</tr>
<tr> <tr>
<td>G1</td> <td>G1</td>
<td>1</td> <td>1</td>
<td>1 Гб</td> <td>1 Гб</td>
<td>20 Гб</td> <td>20 Гб</td>
<td>590 руб./мес.</td> <td>590 руб./мес.</td>
<td><a href="{{ url_for('vms.create') }}" class="button alert ordernow">Заказать</a></td>
</tr> </tr>
<tr> <tr>
<td>G2</td> <td>G2</td>
@ -33,6 +43,7 @@
<td>2 Гб</td> <td>2 Гб</td>
<td>30 Гб</td> <td>30 Гб</td>
<td>1080 руб./мес.</td> <td>1080 руб./мес.</td>
<td><a href="{{ url_for('vms.create') }}" class="button alert ordernow">Заказать</a></td>
</tr> </tr>
<tr> <tr>
<td>G4</td> <td>G4</td>
@ -40,6 +51,7 @@
<td>4 Гб</td> <td>4 Гб</td>
<td>50 Гб</td> <td>50 Гб</td>
<td>2050 руб./мес.</td> <td>2050 руб./мес.</td>
<td><a href="{{ url_for('vms.create') }}" class="button alert ordernow">Заказать</a></td>
</tr> </tr>
<tr> <tr>
<td>G8</td> <td>G8</td>
@ -47,6 +59,15 @@
<td>8 Гб</td> <td>8 Гб</td>
<td>80 Гб</td> <td>80 Гб</td>
<td>3900 руб./мес.</td> <td>3900 руб./мес.</td>
<td><a href="{{ url_for('vms.create') }}" class="button alert ordernow">Заказать</a></td>
</tr>
<tr>
<td>G16</td>
<td>8</td>
<td>16 Гб</td>
<td>160 Гб</td>
<td>6800 руб./мес.</td>
<td><a href="{{ url_for('vms.create') }}" class="button alert ordernow">Заказать</a></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View file

@ -259,17 +259,16 @@ def password_reset_step2():
# controllers.Mail().send(request.form['email'], subject, message) # controllers.Mail().send(request.form['email'], subject, message)
email = ControllerMessagesEmail() email = ControllerMessagesEmail()
email.send(title=subject, to=request.form.GET('email'), lead=lead, message=message, callout=callout) email.send(title=subject, to=request.form.get('email'), lead=lead, message=message, callout=callout)
# redirect to login page # redirect to login page
return redirect(url_for('account.login')) return redirect(url_for('account.login'))
# redirect to step 2 # redirect to step 2
g.errors['items'].append(u'Ошибочный код') flash(u'Ошибочный код')
g.errors['total'] += 1
return redirect(url_for('account.password_reset_step2')) return redirect(url_for('account.password_reset_step2'))
else: else:
g.errors['items'].append(u'Произошла ошибка. Введите корректный адрес е.почты.') flash(u'Произошла ошибка. Введите корректный адрес е.почты.')
g.errors['total'] += 1 return redirect(url_for('account.password_reset_step2'))
return render_template('default/id/password_reset_step2.html') return render_template('default/id/password_reset_step2.html')
@ -310,31 +309,33 @@ def password_update():
return render_template('default/id/password_update.html') return render_template('default/id/password_update.html')
@viewAccount.route('/sshkey', methods=['GET', 'POST']) @viewAccount.route('/sshkey', methods=['GET'])
@requires_login @requires_login
def sshkey(): def sshkey():
controllersshkey = ControllerSSHKey(session['user_id']) controllersshkey = ControllerSSHKey(session['user_id'])
if request.method == "POST": sshkey = {"exists": controllersshkey.check(), "sshkey": controllersshkey.get()}
try:
ssh = SSHKey(request.form['sshkey'])
except Exception as e:
g.errors['items'].append(u"Не корректный ssh-ключ.")
g.errors['total'] += 1
else:
print(ssh.bits)
print(ssh.hash())
controllersshkey.set(request.form['sshkey'])
sshkey = {
"exists": controllersshkey.check(),
"sshkey": controllersshkey.get()
}
return render_template('default/id/sshkey.html', sshkey=sshkey) return render_template('default/id/sshkey.html', sshkey=sshkey)
@viewAccount.route('/sshkey', methods=['POST'])
@requires_login
def sshkey_post():
controllersshkey = ControllerSSHKey(session['user_id'])
try:
ssh = SSHKey(request.form['sshkey'])
except Exception as e:
flash(u"Не корректный ssh-ключ.")
else:
print(ssh.bits)
print(ssh.hash())
controllersshkey.set(request.form['sshkey'])
return redirect(url_for('account.sshkey'))
@viewAccount.route('/sshkey_delete', methods=['POST']) @viewAccount.route('/sshkey_delete', methods=['POST'])
@requires_login @requires_login
def sshkey_delete(): def sshkey_delete():

View file

@ -4,7 +4,7 @@ from setuptools import setup
setup( setup(
name='SWSCloudCore', name='SWSCloudCore',
version='2.7.3', version='2.7.4',
author='Vyacheslav Anzhiganov', author='Vyacheslav Anzhiganov',
author_email='hello@anzhiganov.com', author_email='hello@anzhiganov.com',
packages=[ packages=[
@ -150,6 +150,7 @@ setup(
'Flask-Markdown==0.3', 'Flask-Markdown==0.3',
'Flask-Babel==0.9', 'Flask-Babel==0.9',
'flask-peewee==0.6.0', 'flask-peewee==0.6.0',
'flask-multistatic',
'Jinja2==2.8', 'Jinja2==2.8',
'peewee==2.8', 'peewee==2.8',
'validators==0.10', 'validators==0.10',