Up Version with API

This commit is contained in:
Vyacheslav Anzhiganov 2016-06-14 08:05:05 +03:00
parent f0459e572c
commit 7673e1b84c
16 changed files with 172 additions and 105 deletions

View file

@ -7,17 +7,7 @@ from flaskext.markdown import Markdown
from SWSCloudCore import models
from SWSCloudCore.config import config
from SWSCloudCore.models import database
from SWSCloudServerAPI.ServerAPI import viewServerAPI
from SWSCloudWeb.views import viewHomepage
from SWSCloudWeb.views.account import viewAccount
from SWSCloudWeb.views.administrator import viewAdministrator
from SWSCloudWeb.views.containers import viewContainers
from SWSCloudWeb.views.documents import viewDocuments
from SWSCloudWeb.views.kb import viewKB
from SWSCloudWeb.views.payments import viewPayments
from SWSCloudWeb.views.support import viewSupport
from SWSCloudWeb.views.tasks import viewTasks
from SWSCloudWeb.views.vms import viewVMs
from SWSCloudAdministrator.Administrator import viewAdministrator
app = Flask(__name__, static_folder='static', static_url_path='')
# app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME')
@ -26,24 +16,6 @@ app.config['SECRET_KEY'] = config.get("Application", "SECRET_KEY")
Markdown(app)
babel = Babel(app)
# /
app.register_blueprint(viewHomepage)
app.register_blueprint(viewSupport)
app.register_blueprint(viewKB)
app.register_blueprint(viewDocuments)
# /tasks
app.register_blueprint(viewTasks)
# /containers
app.register_blueprint(viewContainers)
app.register_blueprint(viewVMs)
# /id
app.register_blueprint(viewAccount)
# /payments
app.register_blueprint(viewPayments)
# /api
app.register_blueprint(viewServerAPI)
# /administrator
app.register_blueprint(viewAdministrator)
@ -97,3 +69,7 @@ def after_request(response):
# TODO: code to email alert
# pass
return response
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)

View file

@ -11,20 +11,22 @@
<tr>
<th>ID</th>
<th>Email</th>
<th>Balance</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{% if users.total == 0 %}
{% if users['total'] == 0 %}
<tr>
<td colspan="4">No one users.</td>
<td colspan="5">No one users.</td>
</tr>
{% else %}
{% for user in users['items'] %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.email }}</td>
<td>{{ user.usersbalance.balance }}</td>
<td>
{% if user.status == 0 %}
<span class="label label-alert">Inactive</span>

View file

@ -118,10 +118,15 @@ class ControllerUsersRecoveryCodes():
return True
def check(self, user_id, code):
print user_id
if models.UsersRecoveryCodes.select().\
where(models.UsersRecoveryCodes.user == user_id, models.UsersRecoveryCodes.recovery_code == code).\
count() == 0:
"""
Проверка существования кода
:param user_id:
:param code:
:return: bool
"""
if models.UsersRecoveryCodes.select().where(
models.UsersRecoveryCodes.user == user_id, models.UsersRecoveryCodes.recovery_code == code
).count() == 0:
return False
return True

View file

@ -23,13 +23,26 @@ class ControllerManageUsers:
формируем массив со списком пользователей
:return:
"""
from peewee import JOIN_LEFT_OUTER, JOIN_INNER, JOIN_FULL
jj = models.Users.select(
models.UsersBalance.balance.alias('balance'),
models.Users.id,
models.Users.email,
models.Users.created,
models.Users.status,
).join(
models.UsersBalance
)
for j in jj:
print j.usersbalance.balance
return {
'total': models.Users.select().count(),
'items': models.Users.select()
'total': len(jj),
'items': jj
}
def item_get(self, user_id):
return models.Users.select().where(models.Users.id == user_id)[0]
return models.Users.select().where(models.Users.id == user_id).get()
class ControllerManageUsersDetails:

View file

@ -97,3 +97,7 @@ def after_request(response):
# TODO: code to email alert
# pass
return response
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)

View file

@ -587,7 +587,7 @@
}
}
},
// Description:
// Performs a callback function when an image is fully loaded
//

View file

@ -1,28 +1,19 @@
<footer>
<div class="row">
<div class="large-4 columns">
<p>
GoCloud &copy; Все права защищены.
</p>
</div>
<div class="large-8 columns">
<div class="large-6 columns">
<ul class="inline-list">
<!-- li><a href="{{ url_for('documents.view', document_name='politica_konfidencialnosti') }}">Политика конфиденциальности</a></li -->
<!-- li><a href="{{ url_for('documents.view', document_name='pravila_ispolzovaniya') }}">Условия использования</a></li -->
<li>2009&minus;2016 &copy; GoCloud.ru</li>
<li><a href="{{ url_for('support.index') }}">Поддержка</a></li>
<!-- li><a href="{{ url_for('kb.index') }}">База знаний</a></li -->
</ul>
</div>
</div>
<div class="row">
<div class="large-4 columns">
</div>
<div class="large-8 columns">
<p>Ваша личная информация под надежной защитой. Ваш браузер соединяется с сайтом по защищенному протоколу HTTPS.</p>
<p>Сайт использует SSL-шифрование для всех передаваемых данных.</p>
<div class="large-6 columns">
<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>
<div class="ya-share2" data-services="vkontakte,facebook,gplus,twitter,blogger,linkedin" data-counter=""></div>
</div>
</div>
</footer>
{% if g.settings['footer_code'] %}
{{ g.settings['footer_code']|safe }}
{% endif %}

View file

@ -17,12 +17,12 @@
<li><a href="{{ url_for('account.logout') }}">Выход</a></li>
</ul>
<ul class="left">
{% if g.settings.get('SERVICE_CONTAINERS_ENABLE', "0") == "1" %}
<li><a href="{{ url_for('containers.index') }}">Контейнеры</a></li>
{% endif %}
{% if g.settings.get('SERVICE_VMS_ENABLE', '0') == '1' %}
<li><a href="{{ url_for('vms.index') }}">Виртуальные машины</a></li>
{% endif %}
{% if g.settings.get('SERVICE_CONTAINERS_ENABLE', "0") == "1" %}
<li><a href="{{ url_for('containers.index') }}">Контейнеры &beta;</a></li>
{% endif %}
</ul>
{% else %}
<ul class="right">

View file

@ -5,17 +5,19 @@
<title>{% block title %}{% endblock %}</title>
<meta name="description" content="{% block description %}{% endblock %}">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="{{ url_for('static', filename='js/vendor/jquery.js') }}"></script>
<script src="{{ url_for('static', filename='js/vendor/modernizr.js') }}"></script>
<script src="{{ url_for('static', filename='js/foundation/foundation.min.js') }}"></script>
<link rel="stylesheet" href="{{ url_for('static', filename='css/foundation.min.css') }}" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/gocloud.css') }}" />
<meta name='shareinstock' content='' />
<script src="{{ url_for('static', filename='js/vendor/jquery.js') }}"></script>
<!-- script src="{{ url_for('static', filename='js/vendor/modernizr.js') }}"></script -->
<script src="{{ url_for('static', filename='js/foundation/foundation.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/foundation/foundation.orbit.js') }}"></script>
{% block head %}{% endblock %}
</head>
<body>
{% include "default/_header.html" %}
{% block content %}{% endblock %}
{% include "default/_footer.html" %}
{% block footer %}{% endblock %}
</body>
</html>

View file

@ -8,43 +8,82 @@
<div class="row">
<div class="large-12 columns">
<p id="slogan">Облачный хостинг для разработчиков</p>
<p id="sub">Linux контейнер от 100 рублей в месяц</p>
<p id="sub">Виртуальный сервер от 300 рублей в месяц</p>
<p>
<a href="{{ url_for('account.registration') }}" class="button alert">Создать контейнер</a>
<a href="{{ url_for('containers.create') }}" class="button alert">Создать контейнер &beta;</a>
<a href="{{ url_for('vms.create') }}" class="button success" style="box-shadow: 5px 5px #1a1a1a;">Создать виртуальный сервер</a>
</p>
</div>
</div>
</div>
<div class="row">
<div class="large-8 columns">
<div class="large-12 columns">
<div class="row">
<div class="large-3 columns">
<ul class="pricing-table">
<li class="title">G1</li>
<li class="price">590&#8381;/мес.</li>
<li class="bullet-item">Процессор 1</li>
<li class="bullet-item">Память 1Гб</li>
<li class="bullet-item">Диск 20Гб</li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul>
</div>
<div class="large-3 columns">
<ul class="pricing-table">
<li class="title">G2</li>
<li class="price">1080&#8381;/мес.</li>
<li class="bullet-item">Процессор 2</li>
<li class="bullet-item">Память 2Гб</li>
<li class="bullet-item">Диск 30Гб</li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul>
</div>
<div class="large-3 columns">
<ul class="pricing-table">
<li class="title">G4</li>
<li class="price">2050&#8381;/мес.</li>
<li class="bullet-item">Процессор 2</li>
<li class="bullet-item">Память 4Гб</li>
<li class="bullet-item">Диск 50Гб</li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul>
</div>
<div class="large-3 columns">
<ul class="pricing-table">
<li class="title">G8</li>
<li class="price">3900&#8381;/мес.</li>
<li class="bullet-item">Процессор 4</li>
<li class="bullet-item">Память 8Гб</li>
<li class="bullet-item">Диск 80Гб</li>
<li class="cta-button"><a class="button" href="{{ url_for('vms.create') }}">Создать сервер</a></li>
</ul>
</div>
</div>
</div>
<div class="large-12 columns">
<div class="row">
<div class="large-12 columns">
<h2>Особенности</h2>
</div>
<div class="large-12 columns">
<ul id="features-list">
<li>Авто масштабируемые LXC контейнеры с Ubuntu Linux</li>
<li>Оплата только за используемые ресурсы</li>
<li>Готовность к развёртыванию через минуту</li>
<li>Публичный IP-адрес</li>
<li>Неограниченный трафик с брандмауэром</li>
<li>Удобная панель управления позволяет легко и удобно администрировать арендованные виртуальные ресурсы.</li>
<li>Развернутая инфраструктура и резервированная телекоммуникационная сеть</li>
<li>Готовность к развёртыванию через несколько минут</li>
<li>Несколько центров обработки данных по всему миру</li>
<li>Неограниченный трафик</li>
</ul>
</div>
</div>
</div>
<div class="large-4 columns">
<!-- ul class="pricing-table">
<li class="title">Standard</li>
<li class="price">от 100руб./мес.</li>
<li class="bullet-item">б Диск</li>
<li class="bullet-item">512Мб Оперативной памяти</li>
<li class="bullet-item">Неограниченный трафик</li>
<li class="cta-button"><a class="button" href="{{ url_for('account.registration') }}">Создать контейнер</a></li>
</ul -->
<a class="twitter-timeline" href="https://twitter.com/gocloud_ru" data-widget-id="678726736645922816">Tweets by @gocloud_ru</a>
<div class="large-12 columns" style="text-align: center">
<a class="twitter-timeline" href="https://twitter.com/gocloud_ru" data-widget-id="678726736645922816">Твитер @gocloud_ru</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
</div>
{% endblock %}
{% block footer %}
{% endblock %}

View file

@ -107,7 +107,7 @@ def billing():
cub = ControllerBilling()
if not cub.exists(user_id):
cub.create(user=user_id, balance=0)
cub.create(user_id, balance=0)
# TODO: move to function
user_details = models.Users.select().where(
@ -131,9 +131,9 @@ def registration():
return redirect(url_for("containers.index"))
if request.method == 'POST':
email = request.form['email']
password = request.form['password']
password2 = request.form['password2']
email = request.form.get('email')
password = request.form.get('password')
password2 = request.form.get('password2')
# Проверка введён ли проверочный пароль одинаково
if password != password2:
@ -294,7 +294,7 @@ def password_reset_step2():
# controllers.Mail().send(request.form['email'], subject, message)
email = ControllerMessagesEmail()
email.send(title=subject, to=request.form['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
return redirect(url_for('account.login'))

View file

@ -39,11 +39,11 @@ def create():
if not ControllerUsers().check_session():
return redirect(url_for("account.logout"))
# auth user
if not ControllerUsers().auth(session['email'], session['password']):
if not ControllerUsers().auth(session.get('email'), session.get('password')):
return redirect(url_for("account.logout"))
user_balance = ControllerBilling().get(session['user_id'])
user_ssh = ControllerSSHKey(session['user_id'])
user_balance = ControllerBilling().get(session.get('user_id'))
user_ssh = ControllerSSHKey(session.get('user_id'))
controller_plans = ControllerPlans()
if request.method == "POST":

19
extra/uwsgi_admin.ini Normal file
View file

@ -0,0 +1,19 @@
[uwsgi]
virtualenv = /home/gocloud/env
;for http
;protocol = http
;socket = 127.0.0.1:8080
; for unix-socket
socket = /var/run/sws/gocloud_admin.sock
chmod-socket = 777
module = SWSCloudAdministrator:app
master = true
processes = 1
vacuum = true
die-on-term = true

View file

@ -6,7 +6,7 @@ virtualenv = /home/gocloud/env
;socket = 127.0.0.1:8080
; for unix-socket
socket = /var/run/sws/gocloud.sock
socket = /var/run/sws/gocloud_web.sock
chmod-socket = 777
module = SWSCloudWeb:app

View file

@ -4,7 +4,7 @@ from setuptools import setup
setup(
name='SWSCloudCore',
version='2.5.0',
version='2.5.1',
author='Vyacheslav Anzhiganov',
author_email='hello@anzhiganov.com',
packages=[
@ -61,6 +61,34 @@ setup(
'static/js/vendor/*.js',
# Templates
'templates/*.html',
'templates/default/*.html',
'templates/default/containers/*.html',
'templates/default/documents/*.html',
'templates/default/homepage/*.html',
'templates/default/id/*.html',
'templates/default/kb/*.html',
'templates/default/payment/*.html',
'templates/default/payment/robokassa/*.html',
'templates/default/support/*.html',
'templates/default/tasks/*.html',
'templates/default/vms/*.html',
'templates/email/simple/*.html',
'templates/email/simple/*.css',
'templates/errors/*.html',
],
'SWSCloudAdministrator': [
# Static files
'static/css/*.css',
'static/images/*.png',
'static/images/cloudns/*.png',
'static/images/control/*.png',
'static/images/payment/*.png',
'static/images/social/*.png',
'static/images/promo/*.png',
'static/js/*.js',
'static/js/foundation/*.js',
'static/js/vendor/*.js',
#
'templates/administrator/*.html',
'templates/administrator/containers/*.html',
'templates/administrator/datacenters/*.html',
@ -77,21 +105,9 @@ setup(
'templates/administrator/wiki/*.html',
'templates/administrator/wiki/article/*.html',
'templates/administrator/wiki/category/*.html',
'templates/default/*.html',
'templates/default/containers/*.html',
'templates/default/documents/*.html',
'templates/default/homepage/*.html',
'templates/default/id/*.html',
'templates/default/kb/*.html',
'templates/default/payment/*.html',
'templates/default/payment/robokassa/*.html',
'templates/default/support/*.html',
'templates/default/tasks/*.html',
'templates/default/vms/*.html',
'templates/email/simple/*.html',
'templates/email/simple/*.css',
# Errors
'templates/errors/*.html',
]
],
},
scripts=[
'cloud-db-init.py',