diff --git a/app/admin/routes.py b/app/admin/routes.py index 3531ec8..a0430c9 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -34,15 +34,55 @@ def after_request(response): def index(): return redirect(url_for('admin.list_users')) -@admin.route("/listitems", methods=['GET']) + +@admin.route("/listdeployments", methods=['GET']) @login_required @admin_required -def list_items(): +def list_deployments(): alldeployments = Deployment.query.order_by(Deployment.daysleft.asc()).all() - alldomains = Domain.query.order_by(Domain.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.order_by(Service.daysleft.asc()).all() - alladdresses = Address.query.order_by(Address.user_id.asc()).all() - return render_template('admin/list_items.html', deployments=alldeployments, domains=alldomains, services=allservices, addresses=alladdresses) + return render_template('admin/list_services.html', services=allservices) + +@admin.route("/listdomains", methods=['GET']) +@login_required +@admin_required +def list_domains(): + alldomains = Domain.query.order_by(Domain.daysleft.asc()).all() + return render_template('admin/list_domains.html', domains=alldomains) + +@admin.route("/listaddresses", methods=['GET']) +@login_required +@admin_required +def list_addresses(): + alladdresses = Address.query.order_by(Address.ip.asc()).all() + return render_template('admin/list_addresses.html', addresses=alladdresses) + +@admin.route("/addr2pool", methods=['GET', 'POST']) +@login_required +@admin_required +def addr2pool(): + alladdrlist = [] + alladdr = Address.query.all() + for addr in alladdr: + alladdrlist.append(str(addr.ip)) + current_app.logger.info('Current IP pool: {}'.format(alladdrlist)) + form = Addr2PoolForm() + if form.validate_on_submit(): + if form.ip.data in alladdrlist: + flash('IP address {} is already in the pool!'.format(form.ip.data)) + return redirect(url_for('admin.addr2pool')) + address = Address(ip=form.ip.data, region_id=form.region.data, enabled=True, reserved=form.reserved.data) + db.session.add(address) + db.session.commit() + flash('Address {} added to region {}'.format(form.ip.data, form.region.data)) + return redirect(url_for('admin.list_addresses')) + return render_template('admin/addr2pool.html', form=form, alladdresses=alladdrlist) @admin.route("/listusers", methods=['GET']) @login_required @@ -68,26 +108,34 @@ def charge(user_pid=0): return redirect(url_for('admin.list_users')) return render_template('admin/charge.html', form=form, usr=cuser) -@admin.route("/addr2pool", methods=['GET', 'POST']) +@admin.route("/listtransactions", methods=['GET']) @login_required @admin_required -def addr2pool(): - alladdrlist = [] - alladdr = Address.query.all() - for addr in alladdr: - alladdrlist.append(str(addr.ip)) - current_app.logger.info('Current IP pool: {}'.format(alladdrlist)) - form = Addr2PoolForm() - if form.validate_on_submit(): - if form.ip.data in alladdrlist: - flash('IP address {} is already in the pool!'.format(form.ip.data)) - return redirect(url_for('admin.addr2pool')) - address = Address(ip=form.ip.data, region_id=form.region.data, enabled=True, reserved=form.reserved.data) - db.session.add(address) - db.session.commit() - flash('Address {} added to region {}'.format(form.ip.data, form.region.data)) - return redirect(url_for('admin.list_items')) - return render_template('admin/addr2pool.html', form=form, alladdresses=alladdrlist) +def list_transactions(): + alltransactions = Transaction.query.order_by(Transaction.date_created.desc()).all() + return render_template('admin/list_transactions.html', transactions=alltransactions) + +@admin.route("/transaction/", methods=['GET']) +@login_required +@admin_required +def transaction(user_pid=0): + cuser = User.query.filter_by(pid=user_pid).first() + transactions = cuser.inv_transactions.order_by(Transaction.date_created.desc()).all() + + labelslist = ['today'] + translist = [cuser.wallet] + prevvalue = cuser.wallet + for tr in transactions: + labelslist.insert(0, str(tr.date_created.strftime('%d.%m'))) + translist.insert(0, prevvalue - tr.value) + prevvalue -= tr.value + + if len(labelslist) <= 1: + labelslist.insert(0, 'before') + translist.insert(0, 0) + + #current_app.logger.info('[{}] transactions: {} {} '.format(cuser.email, translist, labelslist)) + return render_template('uinvoice/transactions.html', transactions=transactions, translist=translist, labelslist=labelslist, cuser=cuser) @admin.route("/dashboard/", methods=['GET']) @login_required @@ -151,32 +199,4 @@ def dashboard(user_pid=0): 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) -@admin.route("/listtransactions", methods=['GET']) -@login_required -@admin_required -def list_transactions(): - alltransactions = Transaction.query.order_by(Transaction.date_created.desc()).all() - return render_template('admin/list_transactions.html', transactions=alltransactions) - -@admin.route("/transaction/", methods=['GET']) -@login_required -@admin_required -def transaction(user_pid=0): - cuser = User.query.filter_by(pid=user_pid).first() - transactions = cuser.inv_transactions.order_by(Transaction.date_created.desc()).all() - - labelslist = ['today'] - translist = [cuser.wallet] - prevvalue = cuser.wallet - for tr in transactions: - labelslist.insert(0, str(tr.date_created.strftime('%d.%m'))) - translist.insert(0, prevvalue - tr.value) - prevvalue -= tr.value - - if len(labelslist) <= 1: - labelslist.insert(0, 'before') - translist.insert(0, 0) - - #current_app.logger.info('[{}] transactions: {} {} '.format(cuser.email, translist, labelslist)) - return render_template('uinvoice/transactions.html', transactions=transactions, translist=translist, labelslist=labelslist, cuser=cuser) diff --git a/app/models.py b/app/models.py index 64703a3..4886263 100644 --- a/app/models.py +++ b/app/models.py @@ -295,7 +295,7 @@ class Address(db.Model): while True: mac = [ random.randint(0, 255) for x in range(0, 6) ] mac[0] = (mac[0] & 0xfc) | 0x02 - mac = ''.join([ '{0:02x}'.format(x) for x in mac ]) + mac = ':'.join([ '{0:02x}'.format(x) for x in mac ]) if mac in allmacs: current_app.logger.warning('mac address {} is in the pool. regenerating...'.format(mac)) continue diff --git a/app/templates/admin/admin_tasks.html b/app/templates/admin/admin_tasks.html index cf74d32..10284cb 100644 --- a/app/templates/admin/admin_tasks.html +++ b/app/templates/admin/admin_tasks.html @@ -3,8 +3,11 @@
Admin Pages
+ + + + -
diff --git a/app/templates/admin/list_addresses.html b/app/templates/admin/list_addresses.html new file mode 100644 index 0000000..5d46785 --- /dev/null +++ b/app/templates/admin/list_addresses.html @@ -0,0 +1,49 @@ +{% extends "base.html" %} + +{% block styles %} +{{ super() }} + +{% endblock %} + +{% block page_content %} +
+ {% include "admin/admin_tasks.html" %} + +
+
+
Addresses
+

+ + + + + + + + + + {% for address in addresses %} + + {% if address.enabled == False %}{% else %}{% endif %} + + + + {% endfor %} + + +
IPMAC Addr.Reverse DNS
{{ address.ip }}{{ address.mac }}{{ address.rdns }}
+ +

+
+
+ + +
+ + +
+
+
+ +{% endblock %} + diff --git a/app/templates/admin/list_deployments.html b/app/templates/admin/list_deployments.html new file mode 100644 index 0000000..93d087a --- /dev/null +++ b/app/templates/admin/list_deployments.html @@ -0,0 +1,65 @@ +{% extends "base.html" %} + +{% block styles %} +{{ super() }} + +{% endblock %} + +{% block page_content %} +
+ {% include "admin/admin_tasks.html" %} + +
+
+
Deployments
+

+ + + + + + + + + + + + + + + + {% for deploy in deployments %} + {% if deploy.enabled == False %} + + {% else %} + {% if deploy.warning == True %} + + {% else %} + + {% endif %} + {% endif %} + + + + + + + + + + {% endfor %} + +
OwnerCube IDAliasCPUMemHDDPriceLast ChargedDays Left
{{ deploy.owner.email }}{{ deploy.machine_id }}{{ deploy.machine_alias }}{{ deploy.machine_cpu }}{{ deploy.machine_mem }} MB{{ deploy.machine_hdd }} GB{{ deploy.price }}{{ moment(deploy.date_last_charge).format('lll') }} ({{ moment(deploy.date_last_charge).fromNow() }}){{ deploy.daysleft }}
+

+
+
+ +
+ + +
+
+ + +{% endblock %} + diff --git a/app/templates/admin/list_domains.html b/app/templates/admin/list_domains.html new file mode 100644 index 0000000..327e863 --- /dev/null +++ b/app/templates/admin/list_domains.html @@ -0,0 +1,55 @@ +{% extends "base.html" %} + +{% block styles %} +{{ super() }} + +{% endblock %} + +{% block page_content %} +
+ {% include "admin/admin_tasks.html" %} + +
+
+
Domains
+

+ + + + + + + + + + + {% for domain in domains %} + {% if domain.enabled == False %} + + {% else %} + {% if domain.warning == True %} + + {% else %} + + {% endif %} + {% endif %} + + + + + + {% endfor %} + +
OwnerNameExpiry DateDays Left
{{ domain.owner.email }}{{ domain.fqdn }}{{ domain.date_expire }}{{ domain.daysleft }}
+

+
+
+ +
+ +
+
+ + +{% endblock %} + diff --git a/app/templates/admin/list_items.html b/app/templates/admin/list_items.html deleted file mode 100644 index 3e8c45b..0000000 --- a/app/templates/admin/list_items.html +++ /dev/null @@ -1,171 +0,0 @@ -{% extends "base.html" %} - -{% block styles %} -{{ super() }} - -{% endblock %} - -{% block page_content %} -
- {% include "admin/admin_tasks.html" %} - -
-
-
Deployments
-

- - - - - - - - - - - - - - - - {% for deploy in deployments %} - {% if deploy.enabled == False %} - - {% else %} - {% if deploy.warning == True %} - - {% else %} - - {% endif %} - {% endif %} - - - - - - - - - - {% endfor %} - -
OwnerCube IDAliasCPUMemHDDPriceLast ChargedDays Left
{{ deploy.owner.email }}{{ deploy.machine_id }}{{ deploy.machine_alias }}{{ deploy.machine_cpu }}{{ deploy.machine_mem }} MB{{ deploy.machine_hdd }} GB{{ deploy.price }}{{ moment(deploy.date_last_charge).format('lll') }} ({{ moment(deploy.date_last_charge).fromNow() }}){{ deploy.daysleft }}
-

-
-
- -
-
-
Services
-

- - - - - - - - - - - - - {% for service in services %} - {% if service.enabled == False %} - - {% else %} - {% if service.warning == True %} - - {% else %} - - {% endif %} - {% endif %} - - - - - - - - {% endfor %} - -
OwnerCategoryDescriptionPriceLast ChargedDays Left
{{ service.owner.email }}{{ service.category }}{{ service.description }}{{ service.price }}{{ moment(service.date_last_charge).format('ll') }} ({{ moment(service.date_last_charge).fromNow() }}){{ service.daysleft }}
-

-
-
- - -
-
-
Domains
-

- - - - - - - - - - - {% for domain in domains %} - {% if domain.enabled == False %} - - {% else %} - {% if domain.warning == True %} - - {% else %} - - {% endif %} - {% endif %} - - - - - - {% endfor %} - -
OwnerNameExpiry DateDays Left
{{ domain.owner.email }}{{ domain.fqdn }}{{ domain.date_expire }}{{ domain.daysleft }}
-

-
-
- -
-
-
Addresses
-

- - - - - - - - - - {% for address in addresses %} - - {% if address.enabled == False %}{% else %}{% endif %} - - - - {% endfor %} - - -
IPMAC Addr.Reverse DNS
{{ address.ip }}{{ address.mac }}{{ address.rdns }}
- -

-
-
- - -
- - -
-
- - -{% endblock %} - diff --git a/app/templates/admin/list_services.html b/app/templates/admin/list_services.html new file mode 100644 index 0000000..5c5f7f8 --- /dev/null +++ b/app/templates/admin/list_services.html @@ -0,0 +1,58 @@ +{% extends "base.html" %} + +{% block styles %} +{{ super() }} + +{% endblock %} + +{% block page_content %} +
+ {% include "admin/admin_tasks.html" %} + +
+
+
Services
+

+ + + + + + + + + + + + + {% for service in services %} + {% if service.enabled == False %} + + {% else %} + {% if service.warning == True %} + + {% else %} + + {% endif %} + {% endif %} + + + + + + + + {% endfor %} + +
OwnerCategoryDescriptionPriceLast ChargedDays Left
{{ service.owner.email }}{{ service.category }}{{ service.description }}{{ service.price }}{{ moment(service.date_last_charge).format('ll') }} ({{ moment(service.date_last_charge).fromNow() }}){{ service.daysleft }}
+

+
+
+ + +
+
+
+ +{% endblock %} +