update
This commit is contained in:
parent
745e0c9626
commit
4984527b10
6 changed files with 129 additions and 62 deletions
|
@ -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
|
||||
|
|
|
@ -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>')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
37
app/cloud/views/kb/__init__.py
Normal file
37
app/cloud/views/kb/__init__.py
Normal 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
|
||||
)
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue