From 2399334a1819038bb9b1f6fc60e9500247cfb7db Mon Sep 17 00:00:00 2001 From: deflax Date: Sat, 7 Oct 2017 18:39:50 +0300 Subject: [PATCH] various fixes --- app/__init__.py | 9 ++ app/admin/routes.py | 18 ++-- app/main/routes.py | 28 ++++++- app/models.py | 62 ++++++++------ app/news/routes.py | 4 +- app/templates/admin/list_recyclebin.html | 4 +- app/templates/errors/503.html | 30 +++++++ app/templates/main/aboutus.html | 46 +++++++++++ app/templates/main/dashboard.html | 20 ++++- app/templates/main/index.html | 29 +++++-- app/templates/main/livechat.html | 36 +++++++- app/templates/{vmanager => main}/market.html | 0 .../{vmanager => main}/marketgroup.html | 0 app/templates/main/terms.html | 25 ++++++ app/templates/vmanager/create.html | 3 +- app/vmanager/routes.py | 82 ++++++------------- manage.py | 14 ++-- 17 files changed, 295 insertions(+), 115 deletions(-) create mode 100644 app/templates/errors/503.html rename app/templates/{vmanager => main}/market.html (100%) rename app/templates/{vmanager => main}/marketgroup.html (100%) diff --git a/app/__init__.py b/app/__init__.py index 9367c3f..d84d953 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -114,6 +114,15 @@ def internal_server_error(e): return response return render_template('errors/500.html'), 500 +@app.errorhandler(503) +def service_unavailable(e): + if request.accept_mimetypes.accept_json and \ + not request.accept_mimetypes.accept_html: + response = jsonify({'error': 'service unavailable'}) + response.status_code = 503 + return response + return render_template('errors/503.html'), 503 + @app.errorhandler(CSRFError) def handle_csrf_error(e): return render_template('errors/csrf_error.html', reason=e.description), 400 diff --git a/app/admin/routes.py b/app/admin/routes.py index 4c4117d..6940f2c 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -39,21 +39,21 @@ def index(): @login_required @admin_required def list_deployments(): - alldeployments = Deployment.query.filter_by(cancelled=False).order_by(Deployment.daysleft.asc()).all() + alldeployments = Deployment.query.filter_by(deleted=False).order_by(Deployment.daysleft.asc()).all() return render_template('admin/list_deployments.html', deployments=alldeployments) @admin.route("/listservices", methods=['GET']) @login_required @admin_required def list_services(): - allservices = Service.query.filter_by(cancelled=False).order_by(Service.daysleft.asc()).all() + allservices = Service.query.filter_by(deleted=False).order_by(Service.daysleft.asc()).all() return render_template('admin/list_services.html', services=allservices) @admin.route("/listdomains", methods=['GET']) @login_required @admin_required def list_domains(): - alldomains = Domain.query.filter_by(cancelled=False).order_by(Domain.daysleft.asc()).all() + alldomains = Domain.query.filter_by(deleted=False).order_by(Domain.daysleft.asc()).all() return render_template('admin/list_domains.html', domains=alldomains) @admin.route("/listrecyclebin", methods=['GET']) @@ -61,8 +61,8 @@ def list_domains(): @admin_required def list_recyclebin(): deployments = Deployment.query.filter_by(protected=False).order_by(Deployment.daysleft.asc()).all() - services = Service.query.filter_by(cancelled=True).all() - domains = Domain.query.filter_by(cancelled=True).all() + services = Service.query.filter_by(deleted=True).all() + domains = Domain.query.filter_by(deleted=True).all() return render_template('admin/list_recyclebin.html', deployments=deployments, services=services, domains=domains) @admin.route("/listaddresses", methods=['GET']) @@ -152,7 +152,7 @@ def transaction(user_pid=0): def dashboard(user_pid=0): cuser = User.query.filter_by(pid=user_pid).first() - inv_deployments = cuser.inv_deployments.filter_by(cancelled=False).order_by(Deployment.date_created.desc()).all() + inv_deployments = cuser.inv_deployments.filter_by(deleted=False).order_by(Deployment.date_created.desc()).all() inv_deploycubeids = [] inv_deployments_list = [] for invcls in inv_deployments: @@ -160,13 +160,13 @@ def dashboard(user_pid=0): inv_deploycubeids.extend([invcls.machine_id]) inv_deployments_list.extend([invcls.machine_alias]) - inv_services = cuser.inv_services.filter_by(cancelled=False).order_by(Service.date_last_charge.asc()).all() + inv_services = cuser.inv_services.filter_by(deleted=False).order_by(Service.date_last_charge.asc()).all() inv_services_list = [] for invcls in inv_services: if invcls.user_id == cuser.pid: inv_services_list.extend([invcls.description]) - inv_domains = cuser.inv_domains.filter_by(cancelled=False).order_by(Domain.date_created.desc()).all() + inv_domains = cuser.inv_domains.filter_by(deleted=False).order_by(Domain.date_created.desc()).all() inv_domains_list = [] for invcls in inv_domains: if invcls.user_id == cuser.pid: @@ -205,7 +205,7 @@ def dashboard(user_pid=0): flash('Deploy #{} unreachable. Support is notified'.format(str(cubeid))) send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(cubeid), 'vmanager/email/adm_unreachable', user=cuser, cubeid=cubeid ) - current_app.logger.warning('[ADMIN] {} deployments: {}, services: {}, domains: {}, services: {}'.format(cuser.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_addresses_list )) + #current_app.logger.warning('[ADMIN] {} deployments: {}, services: {}, domains: {}, services: {}'.format(cuser.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_addresses_list )) return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, region=regions) diff --git a/app/main/routes.py b/app/main/routes.py index 26c426b..740acaf 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -33,13 +33,33 @@ def chat(): def terms(): return render_template('main/terms.html') +#APP STORE +@main.route('/market/', methods=['GET']) +@login_required +def market(group_id=0): + page = { 'title': 'Market' } + allproducts = Product.get_products() + allgroups = current_app.config['GROUPS'] + + if group_id == 0: + return render_template('main/market.html', groups=allgroups, products=allproducts) + + filtered_products = {} + for key, value in allproducts.items(): + if value['group'] == group_id: + filtered_products[key] = value + + if filtered_products == {}: + abort(404) + return render_template('main/marketgroup.html', groupname=allgroups[group_id], products=filtered_products) + #DASHBOARD @main.route("/dashboard", methods=['GET', 'POST']) @login_required def dashboard(): cuser = current_user - inv_deployments = cuser.inv_deployments.filter_by(cancelled=False).order_by(Deployment.date_created.desc()).all() + inv_deployments = cuser.inv_deployments.filter_by(deleted=False).order_by(Deployment.date_created.desc()).all() inv_deploycubeids = [] inv_deployments_list = [] for invcls in inv_deployments: @@ -47,13 +67,13 @@ def dashboard(): inv_deploycubeids.extend([invcls.machine_id]) inv_deployments_list.extend([invcls.machine_alias]) - inv_services = cuser.inv_services.filter_by(cancelled=False).order_by(Service.date_last_charge.asc()).all() + inv_services = cuser.inv_services.filter_by(deleted=False).order_by(Service.date_last_charge.asc()).all() inv_services_list = [] for invcls in inv_services: if invcls.user_id == cuser.pid: inv_services_list.extend([invcls.description]) - inv_domains = cuser.inv_domains.filter_by(cancelled=False).order_by(Domain.date_created.desc()).all() + inv_domains = cuser.inv_domains.filter_by(deleted=False).order_by(Domain.date_created.desc()).all() inv_domains_list = [] for invcls in inv_domains: if invcls.user_id == cuser.pid: @@ -99,6 +119,6 @@ def dashboard(): send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(cubeid), 'vmanager/email/adm_unreachable', user=current_user, cubeid=cubeid ) - #current_app.logger.info('[{}] Enabled deployments: {}, services: {}, domains: {}, addresses: {}'.format(current_user.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_addresses_list )) + current_app.logger.info('[{}] Enabled deployments: {}, services: {}, domains: {}, addresses: {}'.format(current_user.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_addresses_list )) return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, region=regions) diff --git a/app/models.py b/app/models.py index a8b01fa..d851249 100644 --- a/app/models.py +++ b/app/models.py @@ -86,10 +86,12 @@ class User(db.Model, UserMixin): currency = db.Column(db.String, default='BGN') inv_routers = db.relationship('Router', backref='owner', lazy='dynamic') + inv_addresses = db.relationship('Address', backref='owner', lazy='dynamic') + inv_bridges = db.relationship('Bridge', backref='owner', lazy='dynamic') + inv_deployments = db.relationship('Deployment', backref='owner', lazy='dynamic') inv_services = db.relationship('Service', backref='owner', lazy='dynamic') inv_domains = db.relationship('Domain', backref='owner', lazy='dynamic') - inv_addresses = db.relationship('Address', backref='owner', lazy='dynamic') inv_transactions = db.relationship('Transaction', backref='owner', lazy='dynamic') @@ -233,42 +235,53 @@ class Router(db.Model): __tablename__ = 'routers' pid = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - date_created = db.Column(db.DateTime, index=True, default=datetime.utcnow) - cancelled = db.Column(db.Boolean, default=False) + date_created = db.Column(db.DateTime, default=datetime.utcnow) + deleted = db.Column(db.Boolean, default=False) + machine_id = db.Column(db.BigInteger) #cubeid + +class Bridge(db.Model): + __tablename__ = 'bridge' + pid = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK + date_created = db.Column(db.DateTime, default=datetime.utcnow) + deleted = db.Column(db.Boolean, default=False) + + bridge_id = db.Column(db.String) class Deployment(db.Model): __tablename__ = 'deployments' pid = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - date_created = db.Column(db.DateTime, index=True, default=datetime.utcnow) + date_created = db.Column(db.DateTime, default=datetime.utcnow) + deleted = db.Column(db.Boolean, default=False) + + enabled = db.Column(db.Boolean, default=True) + warning = db.Column(db.Boolean, default=False) + protected = db.Column(db.Boolean, default=False) #machines with this False will be autodeleted after the warning period is over. date_last_charge = db.Column(db.DateTime) period = db.Column(db.Integer) daysleft = db.Column(db.Integer) - warning = db.Column(db.Boolean, default=False) - enabled = db.Column(db.Boolean, default=True) - cancelled = db.Column(db.Boolean, default=False) - protected = db.Column(db.Boolean, default=False) #machines with this False will be autodeleted after the warning period is over. machine_id = db.Column(db.BigInteger) #cubeid machine_alias = db.Column(db.String) #dns name machine_cpu = db.Column(db.Integer) machine_mem = db.Column(db.Integer) machine_hdd = db.Column(db.Integer) - machine_addresses = db.relationship('Address', backref='deployments', lazy='dynamic') discount = db.Column(db.Integer) class Service(db.Model): __tablename__ = 'services' pid = db.Column(db.Integer, primary_key=True) #PK user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - date_created = db.Column(db.DateTime, index=True, default=datetime.utcnow) + date_created = db.Column(db.DateTime, default=datetime.utcnow) + deleted = db.Column(db.Boolean, default=False) + + enabled = db.Column(db.Boolean, default=False) + warning = db.Column(db.Boolean, default=False) date_last_charge = db.Column(db.DateTime) period = db.Column(db.Integer) daysleft = db.Column(db.Integer) - warning = db.Column(db.Boolean, default=False) - enabled = db.Column(db.Boolean, default=False) - cancelled = db.Column(db.Boolean, default=False) category = db.Column(db.String) description = db.Column(db.Unicode) @@ -286,12 +299,12 @@ class Region(db.Model): class Address(db.Model): __tablename__ = 'address' pid = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK + date_assigned = db.Column(db.DateTime, default=datetime.utcnow) enabled = db.Column(db.Boolean) - date_assigned = db.Column(db.DateTime, index=True, default=datetime.utcnow) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK region_id = db.Column(db.Integer, db.ForeignKey('regions.pid')) #FK - deploy_id = db.Column(db.Integer, db.ForeignKey('deployments.pid')) #FK + router_id = db.Column(db.Integer, db.ForeignKey('routers.pid')) #FK ip = db.Column(db.String) mac = db.Column(db.String) @@ -322,14 +335,15 @@ class Address(db.Model): class Domain(db.Model): __tablename__ = 'domains' pid = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK + date_created = db.Column(db.DateTime, default=datetime.utcnow) + deleted = db.Column(db.Boolean, default=False) + + date_expire = db.Column(db.DateTime) daysleft = db.Column(db.Integer) warning = db.Column(db.Boolean, default=False) enabled = db.Column(db.Boolean, default=False) - cancelled = db.Column(db.Boolean, default=False) - user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - date_created = db.Column(db.DateTime, index=True, default=datetime.utcnow) - date_expire = db.Column(db.DateTime) fqdn = db.Column(db.String, unique=True) auto_update = db.Column(db.Boolean) @@ -338,7 +352,8 @@ class Transaction(db.Model): __tablename__ = 'transaction' pid = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - date_created = db.Column(db.DateTime, index=True, default=datetime.utcnow) + date_created = db.Column(db.DateTime, default=datetime.utcnow) + currency = db.Column(db.String, default='BGN') description = db.Column(db.String) value = db.Column(db.Float) @@ -346,9 +361,10 @@ class Transaction(db.Model): class Invoice(db.Model): __tablename__ = 'invoice' pid = db.Column(db.Integer, primary_key=True) - invoice_number = db.Column(db.Integer, unique=True) user_id = db.Column(db.Integer, db.ForeignKey('users.pid')) #FK - date_created = db.Column(db.DateTime, index=True, default=datetime.utcnow) + date_created = db.Column(db.DateTime, default=datetime.utcnow) + + invoice_number = db.Column(db.Integer, unique=True) currency = db.Column(db.String, default='BGN') tax = db.Column(db.Float) #VAT description = db.Column(db.Unicode) diff --git a/app/news/routes.py b/app/news/routes.py index 5e914d7..2055498 100644 --- a/app/news/routes.py +++ b/app/news/routes.py @@ -6,13 +6,13 @@ import requests import json from facepy import GraphAPI -@lru_cache(maxsize=8) +@lru_cache(maxsize=32) def get_fb_token(): payload = {'grant_type': 'client_credentials', 'client_id': current_app.config['FB_APP_ID'], 'client_secret': current_app.config['FB_APP_SECRET']} response = requests.post('https://graph.facebook.com/oauth/access_token?', params = payload) fbjson = json.loads(response.text) fbtoken = fbjson['access_token'] - current_app.logger.info("FB Token: {}".format(fbtoken)) + #current_app.logger.info("FB Token: {}".format(fbtoken)) return fbtoken @news.route("/all", methods=['GET']) diff --git a/app/templates/admin/list_recyclebin.html b/app/templates/admin/list_recyclebin.html index 44c39ba..d7e61fd 100644 --- a/app/templates/admin/list_recyclebin.html +++ b/app/templates/admin/list_recyclebin.html @@ -74,7 +74,7 @@ addEventListener("DOMContentLoaded", function() { {% for deploy in deployments %} - {% if deploy.cancelled == True %} + {% if deploy.deleted == True %} {% else %} {% if deploy.enabled == False %} @@ -99,7 +99,7 @@ addEventListener("DOMContentLoaded", function() { {{ moment(deploy.date_last_charge).format('lll') }} ({{ moment(deploy.date_last_charge).fromNow() }}) {% endif %} {{ deploy.daysleft }} - {% if deploy.cancelled == True %} + {% if deploy.deleted == True %} -deleted- {% else %} diff --git a/app/templates/errors/503.html b/app/templates/errors/503.html new file mode 100644 index 0000000..9f842ba --- /dev/null +++ b/app/templates/errors/503.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} + +{% block title %}Forbidden{% endblock %} + +{% block page_content %} + + +
+         ,-.
+        / \  `.  __..-,O
+       :   \ --''_..-'.'
+       |    . .-' `. '.
+       :     .     .`.'
+        \     `.  /  ..
+         \      `.   ' .
+          `,       `.   \
+         ,|,`.        `-.\
+        '.||  ``-...__..-`
+         |  |
+         |__|
+         /||\
+        //||\\
+       // || \\
+    __//__||__\\__
+   '--------------' SSt
+
+
+ diff --git a/app/templates/main/aboutus.html b/app/templates/main/aboutus.html index 7290c72..bf80ca1 100644 --- a/app/templates/main/aboutus.html +++ b/app/templates/main/aboutus.html @@ -1,5 +1,30 @@ {% extends "base.html" %} +{% block styles %} +{{ super() }} + + +{% endblock %} + + {% block page_content %}

About us

@@ -7,6 +32,27 @@ +
+         ,-.
+        / \  `.  __..-,O
+       :   \ --''_..-'.'
+       |    . .-' `. '.
+       :     .     .`.'
+        \     `.  /  ..
+         \      `.   ' .
+          `,       `.   \
+         ,|,`.        `-.\
+        '.||  ``-...__..-`
+         |  |
+         |__|
+         /||\
+        //||\\
+       // || \\
+    __//__||__\\__
+   '--------------' SSt
+
+ +

datapoint.bg е проект на Новахостинг ЕООД който създадохме, за да предоставим на потребителите ново поколение изчислителни услуги. Стремим се да помагаме на неуверените и неопитни потребители в първата им среща с тях, като сме на линия за съвети отновно одимите услуги и инструменти, за да не влагате излишни средства в ресурси.

Историята

Този сайт е естествено продължение на няколко лични проекта на двама ентусиасти, на едно пространство, използвано по много предназначения и наричано от нас просто “избата“. Там е мястото, където се затваряхме, за да свършим малко работа бързо и без никой да знае къде сме. От там са тръгнали много идеи, за да оживеят в сървърното помещение, което изградихме първоначално за собствена употреба. После пораснахме и дойдоха идеите, а след тях и клиентите ни. Както споменах естественото продължение на нещата беше да затворим цялостно процеса на работа и усъвършенствахме сървърното помещение, за да е пригодно за крайни клиенти. Докато се усетим имахме готово чисто ново сървърно помещение- мечта за всеки системен администратор. С мощни сървъри, гъвкава мрежова инфраструктура, резервирана свързаност с най- големите български интернет доставчици, резервирано захранване, климатични системи, температурен контрол, цялостен мониторинг и ново поколение охранителна система.

diff --git a/app/templates/main/dashboard.html b/app/templates/main/dashboard.html index de41845..4a19adb 100644 --- a/app/templates/main/dashboard.html +++ b/app/templates/main/dashboard.html @@ -2,6 +2,22 @@ {% block styles %} {{ super() }} + + +{% endblock %} + + {% block page_content %} - +
+
+
+
+ +To permanently stay connected to our chat network you could use an client like HexChat and use the following URL:
irc://irc.datapoint.bg:+6697/#support +
+
+
+
{% endblock %} -To permanently stay connected to our chat network you could use an client like HexChan and use the following URL irc://irc.datapoint.bg:+6697/#support {% block footer %} {% endblock %} diff --git a/app/templates/vmanager/market.html b/app/templates/main/market.html similarity index 100% rename from app/templates/vmanager/market.html rename to app/templates/main/market.html diff --git a/app/templates/vmanager/marketgroup.html b/app/templates/main/marketgroup.html similarity index 100% rename from app/templates/vmanager/marketgroup.html rename to app/templates/main/marketgroup.html diff --git a/app/templates/main/terms.html b/app/templates/main/terms.html index 4a24946..a7d8a3f 100644 --- a/app/templates/main/terms.html +++ b/app/templates/main/terms.html @@ -1,5 +1,30 @@ {% extends "base.html" %} +{% block styles %} +{{ super() }} + + +{% endblock %} + + {% block page_content %}
diff --git a/app/templates/vmanager/create.html b/app/templates/vmanager/create.html index 0b069fe..0b8b80f 100644 --- a/app/templates/vmanager/create.html +++ b/app/templates/vmanager/create.html @@ -35,8 +35,9 @@
-
Настройки
+
Create Deployment
+

{{ form.servername.label }}
{{ form.servername(size=42) }}
diff --git a/app/vmanager/routes.py b/app/vmanager/routes.py index de40f82..5de8265 100644 --- a/app/vmanager/routes.py +++ b/app/vmanager/routes.py @@ -6,7 +6,7 @@ from . import vmanager from .forms import CreateForm, ActivateForm from .. import db from ..email import send_email -from ..models import User, Permission, Transaction, Deployment, Service, Region, Address, Domain, contact_proxmaster +from ..models import User, Permission, Transaction, Router, Deployment, Service, Region, Address, Domain, contact_proxmaster from ..decorators import admin_required, permission_required import base64 @@ -34,7 +34,7 @@ def createvm(): flash('Please update profile info for this operation.') return redirect(url_for('settings.profile')) - deployment_seeds = current_user.inv_deployments.filter_by(cancelled=False).filter_by(protected=False).all() + deployment_seeds = current_user.inv_deployments.filter_by(deleted=False).filter_by(protected=False).all() if deployment_seeds != []: flash('Offline deployments still exist.') return redirect(url_for('main.dashboard')) @@ -42,29 +42,6 @@ def createvm(): form = CreateForm() if current_user.confirmed and form.validate_on_submit(): selected_region = Region.query.filter_by(pid=int(form.region.data)).first() - ### - #flash('Region: {}'.format(str(selected_region.description))) - #return redirect(url_for('main.dashboard')) - - router = current_user.inv_routers.filter_by(cancelled=False).all() - if router == []: - #no router. creating... - data = { 'clientid': str(current_user.pid), - 'clientemail': str(current_user.email), - 'hostname': 'c' + str(current_user.pid) + 'router', - 'region': str(selected_region.name), - 'type': 'kvm', - 'cpu': '1', - 'mem': '128', - 'hdd': '1' - } - try: - query = contact_procmaster(data, 'vmcreate') - except: - flash('Region unreachable! Cannot create router. Please try again later...') - return redirect(url_for('main.dashboard')) - #exit 0 - return redirect(url_for('main.dashboard')) data = { 'clientid': str(current_user.pid), 'clientemail': str(current_user.email), @@ -85,9 +62,9 @@ def createvm(): deployment = Deployment(user_id=int(current_user.pid), machine_alias=query['hostname'], machine_id=query['cube'], machine_cpu=data['cpu'], machine_mem=data['mem'], machine_hdd=data['hdd'], enabled=True, protected=False, daysleft=15, warning=True, discount=0) db.session.add(deployment) db.session.commit() - flash('Deploy created successfully in region "{}".'.format(str(selected_region.description))) + flash('Machine created successfully in region "{}".'.format(str(selected_region.description))) else: - flash('Deploy cancelled! Please try again later...') + flash('Machine creation cancelled! Please try again later...') return redirect(url_for('main.dashboard')) return render_template('vmanager/create.html', form=form) @@ -98,22 +75,27 @@ def remove(itemid=0): data = {} deploy = Deployment.query.filter_by(machine_id=int(itemid)).first() if current_user.is_administrator(): - try: - query = contact_proxmaster(data, 'vmremove', int(itemid)) - flash('Machine {} terminated'.format(itemid)) - deploy.cancelled = True - deploy.enabled = False - deploy.warning = False - db.session.commit() - except: - flash('Cannot delete machine {}'.format(itemid)) - return redirect(url_for('admin.list_recyclebin')) + if deploy.protected is not True: + try: + query = contact_proxmaster(data, 'vmremove', int(itemid)) + flash('Machine {} terminated'.format(itemid)) + deploy.deleted = True + deploy.enabled = False + deploy.warning = False + db.session.commit() + except: + flash('Cannot delete machine {}'.format(itemid)) + return redirect(url_for('admin.list_recyclebin')) + else: + current_app.logger.warning('Deployment id:{} is protected! Cannot be removed'.format(itemid)) + else: + current_app.logger.warning('[WARNING] Unauthorized attempt to remove Deployment id:{}'.format(itemid)) abort(404) @vmanager.route('/activate/', methods=['GET', 'POST']) @login_required def activate(itemid=0): - result = current_user.inv_deployments.filter_by(cancelled=False).all() + result = current_user.inv_deployments.filter_by(deleted=False).all() inventory = [] for invcls in result: inventory.extend([invcls.machine_id]) @@ -163,6 +145,10 @@ def activate(itemid=0): deploy.protected = True db.session.commit() + #router = current_user.inv_routers.filter_by(deleted=False).all() + #if router == []: + + transaction = Transaction(user_id=int(owner.pid), description='Deployment {} activated for {} month(s)'.format(str(deploy.machine_alias), form.period.data), value=-total) db.session.add(transaction) db.session.commit() @@ -210,23 +196,3 @@ def command(cmd=None, vmid=0): return redirect(db_result['url']) abort(404) -#APP STORE -@vmanager.route('/market/', methods=['GET']) -@login_required -def market(group_id=0): - page = { 'title': 'Market' } - allproducts = Product.get_products() - allgroups = current_app.config['GROUPS'] - - if group_id == 0: - return render_template('vmanager/market.html', groups=allgroups, products=allproducts) - - filtered_products = {} - for key, value in allproducts.items(): - if value['group'] == group_id: - filtered_products[key] = value - - if filtered_products == {}: - abort(404) - return render_template('vmanager/marketgroup.html', groupname=allgroups[group_id], products=filtered_products) - diff --git a/manage.py b/manage.py index 06400cb..ac77f57 100644 --- a/manage.py +++ b/manage.py @@ -41,7 +41,7 @@ def autoremove(): from app.models import User, Deployment today = datetime.utcnow() print('\nScan for unprotected deployments, lower their days left by 1 and autodelete them if expired. Script Started at {}'.format(today)) - drafts = Deployment.query.filter_by(cancelled=False).filter_by(protected=False).all() + drafts = Deployment.query.filter_by(deleted=False).filter_by(protected=False).all() for draft in drafts: daysleft = draft.daysleft daysleft -= 1 @@ -58,7 +58,7 @@ def autodisable(): dep_c = 0 srv_c = 0 dom_c = 0 - deployments = Deployment.query.filter_by(cancelled=False).filter_by(enabled=True).filter_by(protected=True).all() + deployments = Deployment.query.filter_by(deleted=False).filter_by(enabled=True).filter_by(protected=True).all() for deploy in deployments: #print('Found {}.'.format(str(deploy.machine_alias))) lastcharge = deploy.date_last_charge @@ -71,7 +71,7 @@ def autodisable(): db.session.commit() else: dep_c += 1 - services_ena = Service.query.filter_by(cancelled=False).filter_by(enabled=True).all() + services_ena = Service.query.filter_by(deleted=False).filter_by(enabled=True).all() for service in services_ena: lastcharge = service.date_last_charge expiry = lastcharge + relativedelta(lastcharge, months=+(service.period)) @@ -83,7 +83,7 @@ def autodisable(): db.session.commit() else: srv_c += 1 - domains_ena = Domain.query.filter_by(cancelled=False).filter_by(enabled=True).all() + domains_ena = Domain.query.filter_by(deleted=False).filter_by(enabled=True).all() for domain in domains_ena: expiry = domain.date_expire if today > expiry: @@ -101,7 +101,7 @@ def autowarn(): from app.models import User, Deployment, Service, Domain, Transaction today = datetime.utcnow() print('\nScan for items that will expire soon and enable the warning flag. Script started at {}'.format(today)) - deployments_ena = Deployment.query.filter_by(cancelled=False).filter_by(enabled=True).filter_by(protected=True).all() + deployments_ena = Deployment.query.filter_by(deleted=False).filter_by(enabled=True).filter_by(protected=True).all() for deploy in deployments_ena: lastcharge = deploy.date_last_charge expiry = lastcharge + relativedelta(lastcharge, months=+(deploy.period)) @@ -114,7 +114,7 @@ def autowarn(): deploy.warning = True db.session.commit() - services_ena = Service.query.filter_by(cancelled=False).filter_by(enabled=True).all() + services_ena = Service.query.filter_by(deleted=False).filter_by(enabled=True).all() for service in services_ena: lastcharge = service.date_last_charge expiry = lastcharge + relativedelta(lastcharge, months=+(service.period)) @@ -127,7 +127,7 @@ def autowarn(): service.warning = True db.session.commit() - domains_ena = Domain.query.filter_by(cancelled=False).filter_by(enabled=True).all() + domains_ena = Domain.query.filter_by(deleted=False).filter_by(enabled=True).all() for domain in domains_ena: expiry = domain.date_expire daysleft = expiry - today