This commit is contained in:
Vyacheslav Anzhiganov 2015-12-23 02:31:43 +03:00
parent 745e0c9626
commit 4984527b10
6 changed files with 129 additions and 62 deletions

View file

@ -5,8 +5,12 @@ from flask import g
from flask import Flask
from flask import request
from flask import render_template
from flask_babel import Babel
from flaskext.markdown import Markdown
from app.cloud.views import viewHomepage
from app.cloud.views.documents import viewDocuments
from app.cloud.views.kb import viewKB
from app.cloud.views.support import viewSupport
from app.cloud.views.account import viewAccount
from app.cloud.views.tasks import viewTasks
@ -18,18 +22,21 @@ from app.cloud.views.server_api import viewServerAPI
from app.settings import settings
from app import models
from app.models import database
from flaskext.markdown import Markdown
app = Flask(__name__)
# app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME')
app.config['DEBUG'] = settings.getboolean('Application', 'DEBUG')
app.config['SECRET_KEY'] = settings.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)
app.register_blueprint(viewAPI)
# /tasks
app.register_blueprint(viewTasks)
# /containers

View file

@ -1,6 +1,5 @@
# coding: utf-8
# import json
import uuid
from datetime import datetime
from datetime import timedelta
@ -13,73 +12,40 @@ from flask import url_for
from flask import request
from flask import Blueprint
from cloudnsru import CloudnsClient
from app import models
from app.settings import settings
# from app.cloud.controllers import common
from app.cloud.controllers.users import ControllerUsers
from app.cloud.controllers.containers import ControllerContainers
from cloudnsru import CloudnsClient
viewAPI = Blueprint('api', __name__, url_prefix='/api')
@viewAPI.route('/rule', methods=['GET', 'POST', 'PUT', 'DELETE'])
def rule():
# init errors
errors = {"total": 0, "items": []}
# /auth
@viewAPI.route('/auth', methods=['POST'])
def auth():
"""
Процесс авторизации
- получаем емейл и секретный ключ
- создаём временный токен
- выдаём токен
:return:
"""
email = request.form['email']
secret = request.form['secret']
expire = request.form['expire']
token = ''
return jsonify(token=token)
# /container/create
# /container/details/<uuid:container_id>
if request.method == "POST":
# check user balance
if models.UsersBalance.select().where(models.UsersBalance.user == session['user_id']).count() == 0:
models.UsersBalance.create(user=session['user_id'])
if errors['total'] == 0:
rule_id = uuid.uuid4()
user_id = session['user_id']
backend = request.form['backend']
alias = request.form['alias']
@viewAPI.route('/container/list', methods=['GET', 'POST', 'PUT', 'DELETE'])
def container_list():
# get containers list
containers = ControllerContainers(session['user_id']).get_items()
# create a new record
# status 4 - creating
models.Rules.create(id=rule_id, user=user_id, status=4, source=backend, alias=alias)
# check
if models.Rules.select().where(models.Rules.id == rule_id).count() == 0:
errors['items'].append("Fail")
errors['total'] += 1
# api request to cloudns.ru to add a new record
email = settings.get('cloudns.ru', 'email')
secret = settings.get('cloudns.ru', 'secret')
domain = settings.get('cloudns.ru', 'domain')
destination = settings.get('cloudns.ru', 'host_roundrobin')
c = CloudnsClient(email, secret)
c.domain_record_add(domain, '%s.%s' % (rule_id, domain), "CNAME", destination)
if request.method == 'PUT':
return None
if request.method == 'GET':
return None
if request.method == 'DELETE':
# check user have a selected rule
if models.Rules.select().where(models.Rules.user == session['user_id']).count() == 0:
return jsonify(status=2, message='rule not exists')
# api request to cloudns.ru to delete record
dns_email = settings.get('cloudns.ru', 'email')
dns_secret = settings.get('cloudns.ru', 'secret')
domain = settings.get('cloudns.ru', 'domain')
c = CloudnsClient(dns_email, dns_secret)
c.domain_record_delete_by_host(domain, '%s.%s' % (rule_id, domain), "CNAME")
x = models.Rules.get(models.Rules.id == rule_id, models.Rules.user == session['user_id'])
x.status = 5
x.save()
return jsonify(status=0, message='ok')
return jsonify(status=0, message='ok', containers=containers)
@viewAPI.route('/stats/<uuid:rule_id>')

View file

@ -1,7 +1,6 @@
# coding: utf-8
import uuid
import validators
from datetime import datetime
from datetime import timedelta
from flask import g
@ -108,7 +107,7 @@ def create():
new_container['ipv6'],
status
)
# create default state data
ControllerContainersStatisticsState().set(new_container['container_id'], dict())
if container_create:
# create task for create new container

View file

@ -1 +1,34 @@
__author__ = 'vanzhiganov'
# coding: utf-8
import os
from flask import render_template
from flask import Blueprint
from flask import redirect
from flask import url_for
viewDocuments = Blueprint('documents', __name__, url_prefix='/documents')
# @viewDocuments.route('/')
# def index():
# kb_markdown = ''
# for ss in file('kb/index.md', 'r'):
# kb_markdown += ss
#
# return render_template('default/kb/index.html', kb_markdown=kb_markdown)
@viewDocuments.route('/<document_name>.html')
def view(document_name):
if not os.path.exists('docs/%s.md' % document_name):
return redirect(url_for('homepage.index'))
#
print document_name
doc_markdown = u''
for ss in file('docs/%s.md' % document_name, 'r'):
doc_markdown += ss.decode('UTF-8')
#
return render_template(
'default/documents/index.html',
doc_markdown=doc_markdown
)

View file

@ -0,0 +1,37 @@
# coding: utf-8
import os
from flask import render_template
from flask import Blueprint
from flask import redirect
from flask import url_for
viewKB = Blueprint('kb', __name__, url_prefix='/kb')
@viewKB.route('/')
def index():
kb_markdown = ''
for ss in file('kb/README.md', 'r'):
kb_markdown += ss
return render_template(
'default/kb/index.html',
kb_markdown=kb_markdown
)
@viewKB.route('/<section>/<document>')
def doc(section, document):
#
if not os.path.exists('kb/%s/%s.md' % (section, document)):
return redirect(url_for('kb.index'))
#
kb_markdown = u''
for ss in file('kb/%s/%s.md' % (section, document), 'r'):
kb_markdown += ss.decode('UTF-8')
#
return render_template(
'default/kb/index.html',
kb_markdown=kb_markdown
)

View file

@ -177,3 +177,28 @@ class Admins(PgSQLModel):
email = CharField(unique=True, null=False)
password = CharField()
status = IntegerField()
class Notifications(PgSQLModel):
user = ForeignKeyField(Users)
# 0 - unread
# 1 - read
status = IntegerField(null=False)
# Default
# Primary
# Success
# Info
# Warning
# Danger
message_type = CharField(null=False)
title = TextField()
message = TextField()
class NotificationsSecurity(PgSQLModel):
# auth_web
# auth_api
# auth_api
alert = CharField(null=False)
notified = DateTimeField(default=datetime.datetime.now)
details = TextField()