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 Flask
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask import render_template
|
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 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.support import viewSupport
|
||||||
from app.cloud.views.account import viewAccount
|
from app.cloud.views.account import viewAccount
|
||||||
from app.cloud.views.tasks import viewTasks
|
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.settings import settings
|
||||||
from app import models
|
from app import models
|
||||||
from app.models import database
|
from app.models import database
|
||||||
from flaskext.markdown import Markdown
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
# app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME')
|
# app.config['SERVER_NAME'] = settings.get('Application', 'SERVER_NAME')
|
||||||
app.config['DEBUG'] = settings.getboolean('Application', 'DEBUG')
|
app.config['DEBUG'] = settings.getboolean('Application', 'DEBUG')
|
||||||
app.config['SECRET_KEY'] = settings.get("Application", "SECRET_KEY")
|
app.config['SECRET_KEY'] = settings.get("Application", "SECRET_KEY")
|
||||||
Markdown(app)
|
Markdown(app)
|
||||||
|
babel = Babel(app)
|
||||||
|
|
||||||
|
|
||||||
# /
|
# /
|
||||||
app.register_blueprint(viewHomepage)
|
app.register_blueprint(viewHomepage)
|
||||||
app.register_blueprint(viewSupport)
|
app.register_blueprint(viewSupport)
|
||||||
|
app.register_blueprint(viewKB)
|
||||||
|
app.register_blueprint(viewDocuments)
|
||||||
|
app.register_blueprint(viewAPI)
|
||||||
# /tasks
|
# /tasks
|
||||||
app.register_blueprint(viewTasks)
|
app.register_blueprint(viewTasks)
|
||||||
# /containers
|
# /containers
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
# import json
|
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
@ -13,73 +12,40 @@ from flask import url_for
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
|
|
||||||
from cloudnsru import CloudnsClient
|
|
||||||
from app import models
|
from app import models
|
||||||
from app.settings import settings
|
from app.settings import settings
|
||||||
# from app.cloud.controllers import common
|
|
||||||
from app.cloud.controllers.users import ControllerUsers
|
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 = Blueprint('api', __name__, url_prefix='/api')
|
||||||
|
|
||||||
|
|
||||||
@viewAPI.route('/rule', methods=['GET', 'POST', 'PUT', 'DELETE'])
|
# /auth
|
||||||
def rule():
|
@viewAPI.route('/auth', methods=['POST'])
|
||||||
# init errors
|
def auth():
|
||||||
errors = {"total": 0, "items": []}
|
"""
|
||||||
|
Процесс авторизации
|
||||||
|
- получаем емейл и секретный ключ
|
||||||
|
- создаём временный токен
|
||||||
|
- выдаём токен
|
||||||
|
: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:
|
@viewAPI.route('/container/list', methods=['GET', 'POST', 'PUT', 'DELETE'])
|
||||||
rule_id = uuid.uuid4()
|
def container_list():
|
||||||
user_id = session['user_id']
|
# get containers list
|
||||||
backend = request.form['backend']
|
containers = ControllerContainers(session['user_id']).get_items()
|
||||||
alias = request.form['alias']
|
|
||||||
|
|
||||||
# create a new record
|
return jsonify(status=0, message='ok', containers=containers)
|
||||||
# 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')
|
|
||||||
|
|
||||||
|
|
||||||
@viewAPI.route('/stats/<uuid:rule_id>')
|
@viewAPI.route('/stats/<uuid:rule_id>')
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
import validators
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from flask import g
|
from flask import g
|
||||||
|
@ -108,7 +107,7 @@ def create():
|
||||||
new_container['ipv6'],
|
new_container['ipv6'],
|
||||||
status
|
status
|
||||||
)
|
)
|
||||||
|
# create default state data
|
||||||
ControllerContainersStatisticsState().set(new_container['container_id'], dict())
|
ControllerContainersStatisticsState().set(new_container['container_id'], dict())
|
||||||
if container_create:
|
if container_create:
|
||||||
# create task for create new container
|
# 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)
|
email = CharField(unique=True, null=False)
|
||||||
password = CharField()
|
password = CharField()
|
||||||
status = IntegerField()
|
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