diff --git a/app/__init__.py b/app/__init__.py index df24fac..e3e28c8 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -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 diff --git a/app/cloud/views/api/__init__.py b/app/cloud/views/api/__init__.py index 8fae4c9..71fe9a8 100644 --- a/app/cloud/views/api/__init__.py +++ b/app/cloud/views/api/__init__.py @@ -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/ - 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/') diff --git a/app/cloud/views/containers/__init__.py b/app/cloud/views/containers/__init__.py index 7a20516..32150fd 100644 --- a/app/cloud/views/containers/__init__.py +++ b/app/cloud/views/containers/__init__.py @@ -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 diff --git a/app/cloud/views/documents/__init__.py b/app/cloud/views/documents/__init__.py index 089ed36..89f8173 100644 --- a/app/cloud/views/documents/__init__.py +++ b/app/cloud/views/documents/__init__.py @@ -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('/.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 + ) diff --git a/app/cloud/views/kb/__init__.py b/app/cloud/views/kb/__init__.py new file mode 100644 index 0000000..ae7cb0f --- /dev/null +++ b/app/cloud/views/kb/__init__.py @@ -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('/
/') +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 + ) diff --git a/app/models.py b/app/models.py index 87c3ea5..b9d4bc4 100644 --- a/app/models.py +++ b/app/models.py @@ -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()