vmremove implemented, minor fixes
This commit is contained in:
parent
75dbce93c0
commit
379f7be272
13 changed files with 122 additions and 52 deletions
|
@ -18,6 +18,11 @@ def after_request(response):
|
||||||
current_app.logger.warning('Slow query: %s\nParameters: %s\nDuration: %fs\nContext: %s\n' % (query.statement, query.parameters, query.duration, query.context))
|
current_app.logger.warning('Slow query: %s\nParameters: %s\nDuration: %fs\nContext: %s\n' % (query.statement, query.parameters, query.duration, query.context))
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@dmanager.route('/createdomain', methods=['GET', 'POST'])
|
||||||
|
@login_required
|
||||||
|
def createdomain():
|
||||||
|
return(404)
|
||||||
|
|
||||||
@dmanager.route('/activate/<int:itemid>', methods=['GET', 'POST'])
|
@dmanager.route('/activate/<int:itemid>', methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def activate(itemid=0):
|
def activate(itemid=0):
|
||||||
|
|
|
@ -73,7 +73,7 @@ def dashboard():
|
||||||
#extract rrd and status from the deployments
|
#extract rrd and status from the deployments
|
||||||
rrd = {}
|
rrd = {}
|
||||||
statuses = {}
|
statuses = {}
|
||||||
current_app.logger.warning(str(inv_deploycubeids))
|
#current_app.logger.warning(str(inv_deploycubeids))
|
||||||
for cubeid in inv_deploycubeids:
|
for cubeid in inv_deploycubeids:
|
||||||
rrd[cubeid] = {}
|
rrd[cubeid] = {}
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -205,13 +205,16 @@ def load_user(user_id):
|
||||||
return User.query.get(int(user_id))
|
return User.query.get(int(user_id))
|
||||||
|
|
||||||
def contact_proxmaster(data, method, cubeid=0):
|
def contact_proxmaster(data, method, cubeid=0):
|
||||||
url = current_app.config['PROXMASTER_URL']
|
prxurl = current_app.config['PROXMASTER_URL']
|
||||||
data['apikey'] = current_app.config['APIKEY']
|
data['apikey'] = current_app.config['APIKEY']
|
||||||
data_json = json.dumps(data)
|
data_json = json.dumps(data)
|
||||||
|
|
||||||
|
url = '{}/{}/{}'.format(prxurl, method, cubeid)
|
||||||
if method == 'vmcreate':
|
if method == 'vmcreate':
|
||||||
url = '{}/{}'.format(url, method)
|
url = '{}/vmcreate'.format(prxurl)
|
||||||
else:
|
if method == 'vmremove':
|
||||||
url = '{}/{}/{}'.format(url, method, cubeid)
|
url = '{}/vmremove/{}'.format(prxurl, cubeid)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
db_result = requests.post( url, data=data_json, headers={"content-type": "application/json"}, timeout=30 )
|
db_result = requests.post( url, data=data_json, headers={"content-type": "application/json"}, timeout=30 )
|
||||||
proxjson = db_result.json()
|
proxjson = db_result.json()
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 524 KiB |
BIN
app/static/images/srv.png
Normal file
BIN
app/static/images/srv.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 512 KiB |
|
@ -5,6 +5,51 @@
|
||||||
</style>
|
</style>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block scripts %}
|
||||||
|
{{ super() }}
|
||||||
|
<script>
|
||||||
|
// Only run what comes next *after* the page has loaded
|
||||||
|
addEventListener("DOMContentLoaded", function() {
|
||||||
|
// Grab all of the elements with a class of command
|
||||||
|
// (which all of the buttons we just created have)
|
||||||
|
var commandButtons = document.querySelectorAll(".command");
|
||||||
|
for (var i=0, l=commandButtons.length; i<l; i++) {
|
||||||
|
var button = commandButtons[i];
|
||||||
|
// For each button, listen for the "click" event
|
||||||
|
button.addEventListener("click", function(e) {
|
||||||
|
// When a click happens, stop the button
|
||||||
|
// from submitting our form (if we have one)
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
if (window.confirm("Are you sure?")) {
|
||||||
|
var clickedButton = e.target;
|
||||||
|
var command = clickedButton.value;
|
||||||
|
var vmid = clickedButton.getAttribute('vmid');
|
||||||
|
|
||||||
|
// Now we need to send the data to our server
|
||||||
|
// without reloading the page - this is the domain of
|
||||||
|
// AJAX (Asynchronous JavaScript And XML)
|
||||||
|
// We will create a new request object
|
||||||
|
// and set up a handler for the response
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.onload = function() {
|
||||||
|
// We could do more interesting things with the response
|
||||||
|
// or, we could ignore it entirely
|
||||||
|
//alert(request.responseText);
|
||||||
|
};
|
||||||
|
// We point the request at the appropriate command
|
||||||
|
request.open("GET", "/vmanager/" + command + "/" + vmid, true);
|
||||||
|
// and then we send it off
|
||||||
|
request.send();
|
||||||
|
alert("command " + command + " executed.");
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block page_content %}
|
{% block page_content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% include "admin/admin_tasks.html" %}
|
{% include "admin/admin_tasks.html" %}
|
||||||
|
@ -22,9 +67,9 @@
|
||||||
<th>CPU</th>
|
<th>CPU</th>
|
||||||
<th>Mem</th>
|
<th>Mem</th>
|
||||||
<th>HDD</th>
|
<th>HDD</th>
|
||||||
<th>Price</th>
|
|
||||||
<th>Last Charged</th>
|
<th>Last Charged</th>
|
||||||
<th>Days Left</th>
|
<th>Days Left</th>
|
||||||
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -44,9 +89,9 @@
|
||||||
<td>{{ deploy.machine_cpu }}</td>
|
<td>{{ deploy.machine_cpu }}</td>
|
||||||
<td>{{ deploy.machine_mem }} MB</td>
|
<td>{{ deploy.machine_mem }} MB</td>
|
||||||
<td>{{ deploy.machine_hdd }} GB</td>
|
<td>{{ deploy.machine_hdd }} GB</td>
|
||||||
<td>{{ deploy.price }}</td>
|
|
||||||
<td>{{ moment(deploy.date_last_charge).format('lll') }} ({{ moment(deploy.date_last_charge).fromNow() }})</td>
|
<td>{{ moment(deploy.date_last_charge).format('lll') }} ({{ moment(deploy.date_last_charge).fromNow() }})</td>
|
||||||
<td>{{ deploy.daysleft }}</td>
|
<td>{{ deploy.daysleft }}</td>
|
||||||
|
<td><button class="btn btn-default btn-danger" onclick="window.open('/vmanager/vmremove/{{ deploy.machine_id }}');"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</button></td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
{% for usr in users %}
|
{% for usr in users %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ usr.pid }}</td>
|
<td>{{ usr.pid }}</td>
|
||||||
<td>{{ usr.email }}</td>
|
<td><font {% if usr.is_administrator() == True %}color="red"{% endif %}>{{ usr.email }}</td>
|
||||||
<td>{{ moment(usr.last_seen).format('lll') }}</td>
|
<td>{{ moment(usr.last_seen).format('lll') }}</td>
|
||||||
<td><a href="https://apps.db.ripe.net/search/query.html?searchtext={{ usr.last_ip }}" data-toggle="tooltip" title="RIPE Whois Search" target="_blank">{{ usr.last_ip }}</a></td>
|
<td><a href="https://apps.db.ripe.net/search/query.html?searchtext={{ usr.last_ip }}" data-toggle="tooltip" title="RIPE Whois Search" target="_blank">{{ usr.last_ip }}</a></td>
|
||||||
<td>{{ usr.wallet }}<td>
|
<td>{{ usr.wallet }}<td>
|
||||||
|
|
|
@ -123,12 +123,12 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
{% if inv_deployments != [] %}
|
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="panel panel-info" id="deployments">
|
<div class="panel panel-info" id="deployments">
|
||||||
<div class="panel-heading">Deployments</div>
|
<div class="panel-heading">Deployments</div>
|
||||||
<div class="panel-body"><p>
|
<div class="panel-body"><p>
|
||||||
|
|
||||||
|
{% if inv_deployments != [] %}
|
||||||
<div class="panel-group" id="deploycubes" role="tablist" aria-multiselectable="true">
|
<div class="panel-group" id="deploycubes" role="tablist" aria-multiselectable="true">
|
||||||
{% for deploy in inv_deployments %}
|
{% for deploy in inv_deployments %}
|
||||||
{% if deploy.enabled == False %}
|
{% if deploy.enabled == False %}
|
||||||
|
@ -232,17 +232,19 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
|
|
||||||
<!-- Cloud Storage icon by Icons8 -->
|
<!-- Cloud Storage icon by Icons8 -->
|
||||||
<button class="btn btn-default" onclick="window.open('{{ url_for('vmanager.createvm') }}','_self')"><img class="icon icons8-Cloud-Storage" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAEEklEQVRYhe3Xy0/bBhwHcA6btEMP0077A3boYYdK23EHLiQ0hQBtVC1S9zjs0L069TCkSUWNpgZCshDYItZOI+tKH7Cibgw6Wu2RAXWMYyc8mpAoUAIEp6VuTR5OwAnJd5dBEbYJKDSA1J/0PfjgXz6y5W/ssrKDNm9dYl4+aqYeq00kSpnK5pGUusX1WkGgxux+/ePLvmQ4lkcp88nPfkHV6DpcEFhpGnnH2D8XKzXwQv98UtXoqioIVDeRH/1IcKlSAzsIbqXSTJ0tCKy2uNt/uy+slhrYez8JrY25XhCotdKDgzNiSXHhWB5DYRFaK+0tfAWt9Pzow9WSA8cereKYheILAo/bGDHE72z5n8E46rsC0LXR0LXRqO8K4O5kbEc7pvg8TrQxuXKD8xVFnLrJ9canVyYTO1k84FvCe+1eXCcWwPLLYPlldJMsPrg4ipsMtyPkmasBQWUk3twKWGm8PRff7kImsoxT7V5MLwrYPPNP0tDbPfh3KrltoGkgIqgaXbVbAT9zuLi00oIHfA6O4ShOOyZQZaFQZ3Pjbx8nwa3NcPAp1CYSersH529NwcuubAn8iXya0VjcXykCtVa6o9cn5JVwZzr9OHcziNBDAWI2hzCXwmourwgEAF7IgEuI6CJZ6FppMJFlRWCfX0BNq6dLEVjdQlODYfmK6RiK4twvwS0xheYasYCGnpAi8N6sCK2V8SsCq76hFsce5WRPPu2YQIBNFgXkEiL0do8icGIxB42Fisviyg3Ol463MtkpmYoZj4qoslAQs7migACgNpFo7Hsge6unl/I4+Z0nW25wHpIAVY2uw593BiQVMx4V8eGlMVwZjhSNA4B4OgtL/zROfsvIIs/eCAoVRuKIHLC26Y+IBGjqn0GHc25XcBvnh39mcaF3WgK03F1IqZoJnQR41EzVO1xPVjaf8P73o2D55V0HTi8K0LXREmAnxWe1VtogrZgW+sbvPkFygt7uAZcQdx2o9MDcnkyh1sb8KgNkvEMyFXP+1hS6SXbXgd0kK1s5rrkMalqYSQlQY6HichXjZVdwqt2LHioKXsgUDeMSIrpJFnU2N9xzacnv+R7noDFTwuaKOXSizSPKVcwasqEnhDqbu+iPI73dg4aekCwuHMtjZikPvd2TLTc4X10HVhiJI19cDe7oLeZ55suukFDRfO/tZxXTTOhMdxZK/iWnFNtf0bTKRLy7DjxmcX99meLFvYat5RodW61uYZo2PsH9fX5pxexV7gTTqGn1DGzswODwbGbPYWsZiWSgtTGhZxVjpoTxRfm3mL2In8tBY6ZS60C1icRFJrevojaReAF8bkAykkcqAxDz+W0dFxOlXVsCU///5aYy2NZxMVHadbCv4H7IC+CuA/djyg7C/AeJ36h1J+7ehgAAAABJRU5ErkJggg=="> Create</button>
|
<button class="btn btn-default" onclick="window.open('{{ url_for('vmanager.createvm') }}','_self')"><img class="icon icons8-Cloud-Storage" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAEEklEQVRYhe3Xy0/bBhwHcA6btEMP0077A3boYYdK23EHLiQ0hQBtVC1S9zjs0L069TCkSUWNpgZCshDYItZOI+tKH7Cibgw6Wu2RAXWMYyc8mpAoUAIEp6VuTR5OwAnJd5dBEbYJKDSA1J/0PfjgXz6y5W/ssrKDNm9dYl4+aqYeq00kSpnK5pGUusX1WkGgxux+/ePLvmQ4lkcp88nPfkHV6DpcEFhpGnnH2D8XKzXwQv98UtXoqioIVDeRH/1IcKlSAzsIbqXSTJ0tCKy2uNt/uy+slhrYez8JrY25XhCotdKDgzNiSXHhWB5DYRFaK+0tfAWt9Pzow9WSA8cereKYheILAo/bGDHE72z5n8E46rsC0LXR0LXRqO8K4O5kbEc7pvg8TrQxuXKD8xVFnLrJ9canVyYTO1k84FvCe+1eXCcWwPLLYPlldJMsPrg4ipsMtyPkmasBQWUk3twKWGm8PRff7kImsoxT7V5MLwrYPPNP0tDbPfh3KrltoGkgIqgaXbVbAT9zuLi00oIHfA6O4ShOOyZQZaFQZ3Pjbx8nwa3NcPAp1CYSersH529NwcuubAn8iXya0VjcXykCtVa6o9cn5JVwZzr9OHcziNBDAWI2hzCXwmourwgEAF7IgEuI6CJZ6FppMJFlRWCfX0BNq6dLEVjdQlODYfmK6RiK4twvwS0xheYasYCGnpAi8N6sCK2V8SsCq76hFsce5WRPPu2YQIBNFgXkEiL0do8icGIxB42Fisviyg3Ol463MtkpmYoZj4qoslAQs7migACgNpFo7Hsge6unl/I4+Z0nW25wHpIAVY2uw593BiQVMx4V8eGlMVwZjhSNA4B4OgtL/zROfsvIIs/eCAoVRuKIHLC26Y+IBGjqn0GHc25XcBvnh39mcaF3WgK03F1IqZoJnQR41EzVO1xPVjaf8P73o2D55V0HTi8K0LXREmAnxWe1VtogrZgW+sbvPkFygt7uAZcQdx2o9MDcnkyh1sb8KgNkvEMyFXP+1hS6SXbXgd0kK1s5rrkMalqYSQlQY6HichXjZVdwqt2LHioKXsgUDeMSIrpJFnU2N9xzacnv+R7noDFTwuaKOXSizSPKVcwasqEnhDqbu+iPI73dg4aekCwuHMtjZikPvd2TLTc4X10HVhiJI19cDe7oLeZ55suukFDRfO/tZxXTTOhMdxZK/iWnFNtf0bTKRLy7DjxmcX99meLFvYat5RodW61uYZo2PsH9fX5pxexV7gTTqGn1DGzswODwbGbPYWsZiWSgtTGhZxVjpoTxRfm3mL2In8tBY6ZS60C1icRFJrevojaReAF8bkAykkcqAxDz+W0dFxOlXVsCU///5aYy2NZxMVHadbCv4H7IC+CuA/djyg7C/AeJ36h1J+7ehgAAAABJRU5ErkJggg=="> Create</button>
|
||||||
|
{% else %}
|
||||||
</div>
|
<!-- Cloud Storage icon by Icons8 -->
|
||||||
</div>
|
<button class="btn btn-default btn-lg btn-block" onclick="window.open('{{ url_for('vmanager.createvm') }}','_self')"><img class="icon icons8-Cloud-Storage" width="48" height="48" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAEEklEQVRYhe3Xy0/bBhwHcA6btEMP0077A3boYYdK23EHLiQ0hQBtVC1S9zjs0L069TCkSUWNpgZCshDYItZOI+tKH7Cibgw6Wu2RAXWMYyc8mpAoUAIEp6VuTR5OwAnJd5dBEbYJKDSA1J/0PfjgXz6y5W/ssrKDNm9dYl4+aqYeq00kSpnK5pGUusX1WkGgxux+/ePLvmQ4lkcp88nPfkHV6DpcEFhpGnnH2D8XKzXwQv98UtXoqioIVDeRH/1IcKlSAzsIbqXSTJ0tCKy2uNt/uy+slhrYez8JrY25XhCotdKDgzNiSXHhWB5DYRFaK+0tfAWt9Pzow9WSA8cereKYheILAo/bGDHE72z5n8E46rsC0LXR0LXRqO8K4O5kbEc7pvg8TrQxuXKD8xVFnLrJ9canVyYTO1k84FvCe+1eXCcWwPLLYPlldJMsPrg4ipsMtyPkmasBQWUk3twKWGm8PRff7kImsoxT7V5MLwrYPPNP0tDbPfh3KrltoGkgIqgaXbVbAT9zuLi00oIHfA6O4ShOOyZQZaFQZ3Pjbx8nwa3NcPAp1CYSersH529NwcuubAn8iXya0VjcXykCtVa6o9cn5JVwZzr9OHcziNBDAWI2hzCXwmourwgEAF7IgEuI6CJZ6FppMJFlRWCfX0BNq6dLEVjdQlODYfmK6RiK4twvwS0xheYasYCGnpAi8N6sCK2V8SsCq76hFsce5WRPPu2YQIBNFgXkEiL0do8icGIxB42Fisviyg3Ol463MtkpmYoZj4qoslAQs7migACgNpFo7Hsge6unl/I4+Z0nW25wHpIAVY2uw593BiQVMx4V8eGlMVwZjhSNA4B4OgtL/zROfsvIIs/eCAoVRuKIHLC26Y+IBGjqn0GHc25XcBvnh39mcaF3WgK03F1IqZoJnQR41EzVO1xPVjaf8P73o2D55V0HTi8K0LXREmAnxWe1VtogrZgW+sbvPkFygt7uAZcQdx2o9MDcnkyh1sb8KgNkvEMyFXP+1hS6SXbXgd0kK1s5rrkMalqYSQlQY6HichXjZVdwqt2LHioKXsgUDeMSIrpJFnU2N9xzacnv+R7noDFTwuaKOXSizSPKVcwasqEnhDqbu+iPI73dg4aekCwuHMtjZikPvd2TLTc4X10HVhiJI19cDe7oLeZ55suukFDRfO/tZxXTTOhMdxZK/iWnFNtf0bTKRLy7DjxmcX99meLFvYat5RodW61uYZo2PsH9fX5pxexV7gTTqGn1DGzswODwbGbPYWsZiWSgtTGhZxVjpoTxRfm3mL2In8tBY6ZS60C1icRFJrevojaReAF8bkAykkcqAxDz+W0dFxOlXVsCU///5aYy2NZxMVHadbCv4H7IC+CuA/djyg7C/AeJ36h1J+7ehgAAAABJRU5ErkJggg=="> Create</button>
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% if inv_domains != [] %}
|
{% if inv_domains != [] %}
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="panel panel-info" id="domains">
|
<div class="panel panel-info" id="domains">
|
||||||
<div class="panel-heading">Domains</div>
|
<div class="panel-heading">Domains</div>
|
||||||
<div class="panel-body"><p>
|
<div class="panel-body">
|
||||||
<div id="no-more-tables">
|
<div id="no-more-tables">
|
||||||
<table class="table table-hover table-striped table-condensed cf">
|
<table class="table table-hover table-striped table-condensed cf">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -272,13 +274,15 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- Address Book icon by Icons8 -->
|
<!-- Address Book icon by Icons8 -->
|
||||||
<img class="icon icons8-Address-Book" width="40" height="40" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAACOElEQVRYhe2Y3W7aQBCF83ZIVdTn4iK973tUCo1KoVVbCC0hSqUoKrKxoQYDCf5BGBtjz+nFeMFO41RtyIIqjzTCs1jMt7OzZ7GPjgrboR2ffK2Wyk3sw49PWm/+CFgqN/G6HW+8VG7iVCEpXio3UQD+94DCX+T1474B03kLwAKwAJQJWNUI17eEvgs4AbBcA1MP0BzgwtwzYMckrCIgigHLZyjFAswFsAgBAJgtgc8/9wA4nDPA1ANq+sP3XI4J/hogAr48ApkW6pevWuMnA15NCADQs5EZ/9jnJT9VCHWdr2s6IYwBLwTOevmAwp5cwarGCRchUFF5rGEQlutNDvRs/tQdZCakWHh+wJs7TnY+5PhDnxATEERAe0T4NqJN/3UToLcqgQiYeBIAzQX/kFiugctxx/x9Et+n2zE3APy1BMD5iqVExKJa71L9JZb0crwds30gjCUARjHrnYhjAtwgm7hrcbKGwXFF5fucQAKgE7DupeP7lbF9ZPq0YXBFNUcCYD/puXqifUpSretb3gw3d4Spx2Oqzb069XhS7zUJMiP6y5hzNT4N+DQR5gYsP35KdoIIaBoShXq25MStZAlrOp8a50PaaONZj3BhEtojymygPEDNIWjOI88nfwNY13mzxAT8mG2h7ntFzf/uWQEF5CTpNS/kPwhdC7ia8C4euMAq2vaqdEDhHZPF2vax6UV/zZKiWPnnrzTAXXgBWAAeAmBKqA/z1ceDUAXgLgEP/hVwYf9gvwBORombjyORBAAAAABJRU5ErkJggg==">
|
<button class="btn btn-default" onclick="window.open('{{ url_for('dmanager.createdomain') }}','_self')"><img class="icon icons8-Address-Book" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAACOElEQVRYhe2Y3W7aQBCF83ZIVdTn4iK973tUCo1KoVVbCC0hSqUoKrKxoQYDCf5BGBtjz+nFeMFO41RtyIIqjzTCs1jMt7OzZ7GPjgrboR2ffK2Wyk3sw49PWm/+CFgqN/G6HW+8VG7iVCEpXio3UQD+94DCX+T1474B03kLwAKwAJQJWNUI17eEvgs4AbBcA1MP0BzgwtwzYMckrCIgigHLZyjFAswFsAgBAJgtgc8/9wA4nDPA1ANq+sP3XI4J/hogAr48ApkW6pevWuMnA15NCADQs5EZ/9jnJT9VCHWdr2s6IYwBLwTOevmAwp5cwarGCRchUFF5rGEQlutNDvRs/tQdZCakWHh+wJs7TnY+5PhDnxATEERAe0T4NqJN/3UToLcqgQiYeBIAzQX/kFiugctxx/x9Et+n2zE3APy1BMD5iqVExKJa71L9JZb0crwds30gjCUARjHrnYhjAtwgm7hrcbKGwXFF5fucQAKgE7DupeP7lbF9ZPq0YXBFNUcCYD/puXqifUpSretb3gw3d4Spx2Oqzb069XhS7zUJMiP6y5hzNT4N+DQR5gYsP35KdoIIaBoShXq25MStZAlrOp8a50PaaONZj3BhEtojymygPEDNIWjOI88nfwNY13mzxAT8mG2h7ntFzf/uWQEF5CTpNS/kPwhdC7ia8C4euMAq2vaqdEDhHZPF2vax6UV/zZKiWPnnrzTAXXgBWAAeAmBKqA/z1ceDUAXgLgEP/hVwYf9gvwBORombjyORBAAAAABJRU5ErkJggg=="> Order</button>
|
||||||
<button class="btn btn-default" onclick="window.open('{{ url_for('main.dashboard') }}','_self')"><span class="glyphicon glyphicon-plus" aria-hiddent="true"></span> Order</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<!--<button class="btn btn-default btn-lg btn-block" onclick="window.open('{{ url_for('dmanager.createdomain') }}','_self')"><img class="icon icons8-Address-Book" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAACOElEQVRYhe2Y3W7aQBCF83ZIVdTn4iK973tUCo1KoVVbCC0hSqUoKrKxoQYDCf5BGBtjz+nFeMFO41RtyIIqjzTCs1jMt7OzZ7GPjgrboR2ffK2Wyk3sw49PWm/+CFgqN/G6HW+8VG7iVCEpXio3UQD+94DCX+T1474B03kLwAKwAJQJWNUI17eEvgs4AbBcA1MP0BzgwtwzYMckrCIgigHLZyjFAswFsAgBAJgtgc8/9wA4nDPA1ANq+sP3XI4J/hogAr48ApkW6pevWuMnA15NCADQs5EZ/9jnJT9VCHWdr2s6IYwBLwTOevmAwp5cwarGCRchUFF5rGEQlutNDvRs/tQdZCakWHh+wJs7TnY+5PhDnxATEERAe0T4NqJN/3UToLcqgQiYeBIAzQX/kFiugctxx/x9Et+n2zE3APy1BMD5iqVExKJa71L9JZb0crwds30gjCUARjHrnYhjAtwgm7hrcbKGwXFF5fucQAKgE7DupeP7lbF9ZPq0YXBFNUcCYD/puXqifUpSretb3gw3d4Spx2Oqzb069XhS7zUJMiP6y5hzNT4N+DQR5gYsP35KdoIIaBoShXq25MStZAlrOp8a50PaaONZj3BhEtojymygPEDNIWjOI88nfwNY13mzxAT8mG2h7ntFzf/uWQEF5CTpNS/kPwhdC7ia8C4euMAq2vaqdEDhHZPF2vax6UV/zZKiWPnnrzTAXXgBWAAeAmBKqA/z1ceDUAXgLgEP/hVwYf9gvwBORombjyORBAAAAABJRU5ErkJggg=="> Order</button>-->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
{% if inv_addresses != [] %}
|
{% if inv_addresses != [] %}
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="panel panel-info" id="addresses">
|
<div class="panel panel-info" id="addresses">
|
||||||
|
@ -306,18 +310,18 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- GPS Signal icon by Icons8 -->
|
<!-- GPS Signal icon by Icons8 -->
|
||||||
<img class="icon icons8-GPS-Signal" width="40" height="40" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAEW0lEQVRYhe3YT0zbVhwH8HfgwKGHHnrYYYcddkBVT7t0kybNh8kvgTiBJlTdhCba0R03qVo3NBUtUkv88sdOgtapYu0mFQ1tY4BGK9qKaZmYkud/BFzKyBYYGmgRNCGBjf+ovB0SVyklJHEM7aR9pafIVmJ//Ht5z34G4P8AAJHQDxHegm48bkJCj4nFzZQzdPRZux4nByT5jUYRGbK4xZATmFhM1XmFXsoZqtJ7DMoZOkK7IjWQxS0Q4aE87FcVVdPE4pdsnJQ816muWznxViXIXcdthm4hk0PO6EJSzlB1PS/9cX04kYwlt8m7nWr6dFD5qVwkREI/jfBa9jPSSjlDRwAAwOwWXoQI/6JVsmyg2YM/uvD15N8zSztkZmmHxJLb5L0b6lq5ldzjPxiiUfgMAACYXOHXIItViPAWdIXPloyjnKGjFq+4oiY2iQbUkHoqyfiUY7QrYoEIh3LIbbNbeBWAXHdn981p1S0ae0DmP/5mcj4fVykyd+FVJiRczoEmKWeoGgAANLgJhZtKvGIxNTy18hSu0u7WooFoFPkQAABoFL6U3cZdRX9Mt4dPnO4YyRTClVPJWq9ykuHlGMPLMRMSXn8MZAU7RJhAt9ANAAC0O+zQ5seiQCsntbX1xVPFgKUgrbwS//ROirQNJomVV6a1/WbX8PFcNy9lt4Xj2S7Ga0WBjR3K3R4lWRSXjzx/4z6xeEWya7QShpPJXkAAsqPbhISeQtsF4wgq6lBsuWTgfpU0e6Q3LD6JMJwchyx+s+jJS4mNl+aVufWygPshIcLEEJgWq09MR//aKBtYaHQbDmzwywk9FSxUScOBjqCi3vt1STdwN9JwoN0vD3SLCxUB87vb4hWJUU9BAAAAGjtGLl76/veiE3WpyLOdY0TPbbFgIBt52cqJ60YAS5nMdaWeFxfKnQsPFfn2ZyPtH9ycWDQKaDiScoaqGU5c3u+J5pkjzR7h3PtdE8tGAvNHd8VrHMoZqmoMKqP+e7MPDwJpSCUZn3KsnpcWeqPJjecWCT34FYYTdwbUtKFADXn+C3XNwol9uoH24AjfdO1++q2ro6TjxzlDgX3R5GqDX868cy3q0IWjXZGaWo+4/t34Bumd2CItX06QC92TpNLRrSY2ibM/vmnjpFnaFanRXT0bL09eGUxkBqd2yODUDrkdf0TYuwli5UTS+u1vD8uFqolNcuWH6bTFK643XY1er+i1RwMvXzzz+dji7fgjogG1BhEmFo9wmfGJaUdQXnXdmt4aUNPk5/g/RHtUG5/fItKfa+TOgwwJDs1uN3eOZWo94gbjE27WeqQXdMMAyL6WqPOKK13R1adwGlD7Lt0ePmH24E/sAQWf8stxGyclIcKE8YnL9bw0eyogR+s8gtfEYsqwe3GDXxlu7Z1J7YXbDTyU2ALKSXtAju1ele3X7IEn17oHmsYOJd4/uljWH743miKO4JNLyQMLRFjXdHFoXf2fAOpthwJ8XvMve9hz7NcDU4IAAAAASUVORK5CYII=">
|
<img class="icon icons8-GPS-Signal" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAEW0lEQVRYhe3YT0zbVhwH8HfgwKGHHnrYYYcddkBVT7t0kybNh8kvgTiBJlTdhCba0R03qVo3NBUtUkv88sdOgtapYu0mFQ1tY4BGK9qKaZmYkud/BFzKyBYYGmgRNCGBjf+ovB0SVyklJHEM7aR9pafIVmJ//Ht5z34G4P8AAJHQDxHegm48bkJCj4nFzZQzdPRZux4nByT5jUYRGbK4xZATmFhM1XmFXsoZqtJ7DMoZOkK7IjWQxS0Q4aE87FcVVdPE4pdsnJQ816muWznxViXIXcdthm4hk0PO6EJSzlB1PS/9cX04kYwlt8m7nWr6dFD5qVwkREI/jfBa9jPSSjlDRwAAwOwWXoQI/6JVsmyg2YM/uvD15N8zSztkZmmHxJLb5L0b6lq5ldzjPxiiUfgMAACYXOHXIItViPAWdIXPloyjnKGjFq+4oiY2iQbUkHoqyfiUY7QrYoEIh3LIbbNbeBWAXHdn981p1S0ae0DmP/5mcj4fVykyd+FVJiRczoEmKWeoGgAANLgJhZtKvGIxNTy18hSu0u7WooFoFPkQAABoFL6U3cZdRX9Mt4dPnO4YyRTClVPJWq9ykuHlGMPLMRMSXn8MZAU7RJhAt9ANAAC0O+zQ5seiQCsntbX1xVPFgKUgrbwS//ROirQNJomVV6a1/WbX8PFcNy9lt4Xj2S7Ga0WBjR3K3R4lWRSXjzx/4z6xeEWya7QShpPJXkAAsqPbhISeQtsF4wgq6lBsuWTgfpU0e6Q3LD6JMJwchyx+s+jJS4mNl+aVufWygPshIcLEEJgWq09MR//aKBtYaHQbDmzwywk9FSxUScOBjqCi3vt1STdwN9JwoN0vD3SLCxUB87vb4hWJUU9BAAAAGjtGLl76/veiE3WpyLOdY0TPbbFgIBt52cqJ60YAS5nMdaWeFxfKnQsPFfn2ZyPtH9ycWDQKaDiScoaqGU5c3u+J5pkjzR7h3PtdE8tGAvNHd8VrHMoZqmoMKqP+e7MPDwJpSCUZn3KsnpcWeqPJjecWCT34FYYTdwbUtKFADXn+C3XNwol9uoH24AjfdO1++q2ro6TjxzlDgX3R5GqDX868cy3q0IWjXZGaWo+4/t34Bumd2CItX06QC92TpNLRrSY2ibM/vmnjpFnaFanRXT0bL09eGUxkBqd2yODUDrkdf0TYuwli5UTS+u1vD8uFqolNcuWH6bTFK643XY1er+i1RwMvXzzz+dji7fgjogG1BhEmFo9wmfGJaUdQXnXdmt4aUNPk5/g/RHtUG5/fItKfa+TOgwwJDs1uN3eOZWo94gbjE27WeqQXdMMAyL6WqPOKK13R1adwGlD7Lt0ePmH24E/sAQWf8stxGyclIcKE8YnL9bw0eyogR+s8gtfEYsqwe3GDXxlu7Z1J7YXbDTyU2ALKSXtAju1ele3X7IEn17oHmsYOJd4/uljWH743miKO4JNLyQMLRFjXdHFoXf2fAOpthwJ8XvMve9hz7NcDU4IAAAAASUVORK5CYII=">
|
||||||
<!--<button class="btn btn-default" onclick="window.open('{{ url_for('main.dashboard') }}','_self')"><span class="glyphicon glyphicon-plus" aria-hiddent="true"></span> Assign</button> -->
|
<!--<button class="btn btn-default" onclick="window.open('{{ url_for('main.dashboard') }}','_self')"><span class="glyphicon glyphicon-plus" aria-hiddent="true"></span> Assign</button> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if inv_services != [] %}
|
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="panel panel-info" id="services">
|
<div class="panel panel-info" id="services">
|
||||||
<div class="panel-heading">Services</div>
|
<div class="panel-heading">Services</div>
|
||||||
<div class="panel-body"><p>
|
<div class="panel-body">
|
||||||
|
{% if inv_services != [] %}
|
||||||
<div id="no-more-tables">
|
<div id="no-more-tables">
|
||||||
<table class="table table-hover table-striped table-condensed cf">
|
<table class="table table-hover table-striped table-condensed cf">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -356,10 +360,13 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn-default" onclick="window.open('{{ url_for('smanager.requestservice') }}','_self')"><img class="icon icons8-Key-2" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAADwUlEQVRYhdXYz0/bVhwA8Bz4I/Yn9A/gwKGHHApxiENwo8IG2rSqh/XUw267cRmJY8dOQpIGOq2cdtguFZNoUQQeiOBnm7h4iB+TRkJwkiJtdZ0GQzPLeTtU0bIQ0qQ8wP1K30sU6X3y/X7fs18cjk89Bsn1fjwEAgQj7nhpQXMFeeilBY1gpV2cFkgsCG7fCAwL8E5fWBQmk7IeX1bNTM6ASrkG83odKuUazOQMGF9WzYmEXPWFxd+xAO+8FphziuvzMRKDkcBKLKt/H2gWzOv1C/NAs2ByRdXdJDD9kc2oc4rru1LcSFj4dTIpn6z9edIR1pqZnAG/mt06GWXExStD+hiJ+SKR1ff/MnvCNVfz69mt1yOMOI8chwV4J0YCq9fKtSZ/aEA3Ccyh6Q0cKdAXFoUUVzJbK8IsFc4IVqoSrFSln+fffWgm83odpriSiVNgDxlukFzvn0zKeuvizFLhzEuL224SDLhJMOClBIlZKpx10+qJhFxBtrPHY9mZaLqgty5EsFLVTYKB5h9CsFK1m1ZH0wX9XlSaRQIkGHEnkzPOLXIZYCZnQIIRd5AAvbSgNQ7h5qSf59/hlCAOkuv9g+R6P06BNWoxf9oNUCnXoJcWNCRAV5C/cJaYFwWjsUmoxfxpN5ukka4gD5EAR8LtK3iZVMo1OBJGVMG7EWmv3QxeJjM5AxKstIsE+Hk8G4+mC29RAqPpo+pYbPMJEiAWBLe/fPyy0st8dXEO1rGQcA8J0OFwOPwRaT+5op47Cz8m51ZLcHwma92NSK+GQ+JnSIBYgHe6SWBedhb5QwN6KAEuKBqcXS1VkCL9kc1ou0deL6395sdt+OinAygfv/8MKdI5xfWNMuLigzmlyh/2Vkn+0IAPn27D737+A26+suDTl9aVIufdJDATK6rWzRv13GoJ4pQAv184gI3vy8f1/yF/WCtbPkYsImv30PTGKE6Bvc53kqI5kZTrY7GstaBo5/CtSOQz6XC83zweCrBtb3UUiLpIcN9LC5UUV2x7AlwL8kMxNL1xy0uLeoorvrE5UtBTvxU12yMfc6q9kZ4Q0FxBHjayExL57u412r1r2qKSnYC2Qg6HwOtPvt2/7P73tIqljyw/Kz2zDbA1t4//gTglnF7pn1AXRad2N+eDJ8obV4C/c+3A5ugEjKXVk7EZed62wPR+BfrCYvlGgZ4Q0GLpI6v1uquUa3A8nn07TPHf3ihwaHrjlp+VnuEUOL0/t6UnllVraVe3B645nFNcnyvA3/FQIOELi2Vb4bqJfwEpWpu91pyNygAAAABJRU5ErkJggg==">Request</button>
|
<button class="btn btn-default" onclick="window.open('{{ url_for('smanager.requestservice') }}','_self')"><img class="icon icons8-Key-2" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAADwUlEQVRYhdXYz0/bVhwA8Bz4I/Yn9A/gwKGHHApxiENwo8IG2rSqh/XUw267cRmJY8dOQpIGOq2cdtguFZNoUQQeiOBnm7h4iB+TRkJwkiJtdZ0GQzPLeTtU0bIQ0qQ8wP1K30sU6X3y/X7fs18cjk89Bsn1fjwEAgQj7nhpQXMFeeilBY1gpV2cFkgsCG7fCAwL8E5fWBQmk7IeX1bNTM6ASrkG83odKuUazOQMGF9WzYmEXPWFxd+xAO+8FphziuvzMRKDkcBKLKt/H2gWzOv1C/NAs2ByRdXdJDD9kc2oc4rru1LcSFj4dTIpn6z9edIR1pqZnAG/mt06GWXExStD+hiJ+SKR1ff/MnvCNVfz69mt1yOMOI8chwV4J0YCq9fKtSZ/aEA3Ccyh6Q0cKdAXFoUUVzJbK8IsFc4IVqoSrFSln+fffWgm83odpriSiVNgDxlukFzvn0zKeuvizFLhzEuL224SDLhJMOClBIlZKpx10+qJhFxBtrPHY9mZaLqgty5EsFLVTYKB5h9CsFK1m1ZH0wX9XlSaRQIkGHEnkzPOLXIZYCZnQIIRd5AAvbSgNQ7h5qSf59/hlCAOkuv9g+R6P06BNWoxf9oNUCnXoJcWNCRAV5C/cJaYFwWjsUmoxfxpN5ukka4gD5EAR8LtK3iZVMo1OBJGVMG7EWmv3QxeJjM5AxKstIsE+Hk8G4+mC29RAqPpo+pYbPMJEiAWBLe/fPyy0st8dXEO1rGQcA8J0OFwOPwRaT+5op47Cz8m51ZLcHwma92NSK+GQ+JnSIBYgHe6SWBedhb5QwN6KAEuKBqcXS1VkCL9kc1ou0deL6395sdt+OinAygfv/8MKdI5xfWNMuLigzmlyh/2Vkn+0IAPn27D737+A26+suDTl9aVIufdJDATK6rWzRv13GoJ4pQAv184gI3vy8f1/yF/WCtbPkYsImv30PTGKE6Bvc53kqI5kZTrY7GstaBo5/CtSOQz6XC83zweCrBtb3UUiLpIcN9LC5UUV2x7AlwL8kMxNL1xy0uLeoorvrE5UtBTvxU12yMfc6q9kZ4Q0FxBHjayExL57u412r1r2qKSnYC2Qg6HwOtPvt2/7P73tIqljyw/Kz2zDbA1t4//gTglnF7pn1AXRad2N+eDJ8obV4C/c+3A5ugEjKXVk7EZed62wPR+BfrCYvlGgZ4Q0GLpI6v1uquUa3A8nn07TPHf3ihwaHrjlp+VnuEUOL0/t6UnllVraVe3B645nFNcnyvA3/FQIOELi2Vb4bqJfwEpWpu91pyNygAAAABJRU5ErkJggg==">Request</button>
|
||||||
</div>
|
{% else %}
|
||||||
</div>
|
<button class="btn btn-default btn-lg btn-block" onclick="window.open('{{ url_for('smanager.requestservice') }}','_self')"><img class="icon icons8-Key-2" width="48" height="48" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAADwUlEQVRYhdXYz0/bVhwA8Bz4I/Yn9A/gwKGHHApxiENwo8IG2rSqh/XUw267cRmJY8dOQpIGOq2cdtguFZNoUQQeiOBnm7h4iB+TRkJwkiJtdZ0GQzPLeTtU0bIQ0qQ8wP1K30sU6X3y/X7fs18cjk89Bsn1fjwEAgQj7nhpQXMFeeilBY1gpV2cFkgsCG7fCAwL8E5fWBQmk7IeX1bNTM6ASrkG83odKuUazOQMGF9WzYmEXPWFxd+xAO+8FphziuvzMRKDkcBKLKt/H2gWzOv1C/NAs2ByRdXdJDD9kc2oc4rru1LcSFj4dTIpn6z9edIR1pqZnAG/mt06GWXExStD+hiJ+SKR1ff/MnvCNVfz69mt1yOMOI8chwV4J0YCq9fKtSZ/aEA3Ccyh6Q0cKdAXFoUUVzJbK8IsFc4IVqoSrFSln+fffWgm83odpriSiVNgDxlukFzvn0zKeuvizFLhzEuL224SDLhJMOClBIlZKpx10+qJhFxBtrPHY9mZaLqgty5EsFLVTYKB5h9CsFK1m1ZH0wX9XlSaRQIkGHEnkzPOLXIZYCZnQIIRd5AAvbSgNQ7h5qSf59/hlCAOkuv9g+R6P06BNWoxf9oNUCnXoJcWNCRAV5C/cJaYFwWjsUmoxfxpN5ukka4gD5EAR8LtK3iZVMo1OBJGVMG7EWmv3QxeJjM5AxKstIsE+Hk8G4+mC29RAqPpo+pYbPMJEiAWBLe/fPyy0st8dXEO1rGQcA8J0OFwOPwRaT+5op47Cz8m51ZLcHwma92NSK+GQ+JnSIBYgHe6SWBedhb5QwN6KAEuKBqcXS1VkCL9kc1ou0deL6395sdt+OinAygfv/8MKdI5xfWNMuLigzmlyh/2Vkn+0IAPn27D737+A26+suDTl9aVIufdJDATK6rWzRv13GoJ4pQAv184gI3vy8f1/yF/WCtbPkYsImv30PTGKE6Bvc53kqI5kZTrY7GstaBo5/CtSOQz6XC83zweCrBtb3UUiLpIcN9LC5UUV2x7AlwL8kMxNL1xy0uLeoorvrE5UtBTvxU12yMfc6q9kZ4Q0FxBHjayExL57u412r1r2qKSnYC2Qg6HwOtPvt2/7P73tIqljyw/Kz2zDbA1t4//gTglnF7pn1AXRad2N+eDJ8obV4C/c+3A5ugEjKXVk7EZed62wPR+BfrCYvlGgZ4Q0GLpI6v1uquUa3A8nn07TPHf3ihwaHrjlp+VnuEUOL0/t6UnllVraVe3B645nFNcnyvA3/FQIOELi2Vb4bqJfwEpWpu91pyNygAAAABJRU5ErkJggg==">Request</button>
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="panel panel-primary panel-transparent">
|
<div class="panel panel-primary panel-transparent">
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<img src="../../static/images/serverroom.jpg" width="100%" />
|
<img src="../../static/images/srv.png" width="100%" />
|
||||||
<!--
|
<!--
|
||||||
<div class="bss-slides">
|
<div class="bss-slides">
|
||||||
<figure>
|
<figure>
|
||||||
|
|
|
@ -13,36 +13,36 @@
|
||||||
<h1>Правила и Условия</h1>
|
<h1>Правила и Условия</h1>
|
||||||
|
|
||||||
<h3 class="h3_paa" style="text-align: left;"> I. ОСНОВНИ ДЕФИНИЦИИ:</h3>
|
<h3 class="h3_paa" style="text-align: left;"> I. ОСНОВНИ ДЕФИНИЦИИ:</h3>
|
||||||
<p>Чл.1 (1) Информация съгласно Закона за електронната търговия и Закона за защита на потребителите:</p>
|
<p>(1) Информация съгласно Закона за електронната търговия и Закона за защита на потребителите:</p>
|
||||||
<p>Новахостинг ЕООД, ЕИК 202555287, адрес на управление: гр. Пловдив, ул. Волга №52., наричана по- долу ДОСТАВЧИК.</p>
|
<p>Новахостинг ЕООД, ЕИК 202555287, адрес на управление: гр. Пловдив, ул. Волга №52., наричана по- долу ДОСТАВЧИК.</p>
|
||||||
<p>(2) КЛИЕНТ- физическо или юридическо лице, което използва услугите на ДОСТАВЧИКА.</p>
|
<p>(2) КЛИЕНТ- физическо или юридическо лице, което използва услугите на ДОСТАВЧИКА.</p>
|
||||||
<p>(3) СЪРВЪР – Компютърна конфигурация или изчислителна система за съхранение и изпълнение на потребителски приложения и потребителска информация.</p>
|
<p>(3) СЪРВЪР – Компютърна конфигурация или изчислителна система за съхранение и изпълнение на потребителски приложения и потребителска информация.</p>
|
||||||
<p>(8)Политика за използване на бисквитки (cookies)</p>
|
<p>(4)Политика за използване на бисквитки (cookies)</p>
|
||||||
<p>Cookies (бисквитки) – малки текстови файлове, чрез инсталирането на които, НОВАХОСТИНГ ЕООД осигурява най-добра възможност за ползване на уебсайта си, чрез съхраняване на информация за потребителите, възстановяване на информацията за потребителя, проследяване на действия, идентификация и други сходни дейности, например съхранение на информация за услугите, от които се интересува потребителя, с цел предоставяне на подходяща информация при посещението му на Уебсайта.</p>
|
<p>Cookies (бисквитки) – малки текстови файлове, чрез инсталирането на които, НОВАХОСТИНГ ЕООД осигурява най-добра възможност за ползване на уебсайта си, чрез съхраняване на информация за потребителите, възстановяване на информацията за потребителя, проследяване на действия, идентификация и други сходни дейности, например съхранение на информация за услугите, от които се интересува потребителя, с цел предоставяне на подходяща информация при посещението му на Уебсайта.</p>
|
||||||
<p>(9) ВИРТУАЛЕН СЪРВЪР – Свободно пространство на сървър на ДОСТАВЧИКА, на което Клиента има право да инсталира приложения и да помества информация, която да споделя с трети лица в Интернет.</p>
|
<p>(5) ВИРТУАЛЕН СЪРВЪР – Свободно пространство на сървър на ДОСТАВЧИКА, на което Клиента има право да инсталира приложения и да помества информация, която да споделя с трети лица в Интернет.</p>
|
||||||
<p> </p>
|
<p> </p>
|
||||||
<h3></h3>
|
<h3></h3>
|
||||||
<h3 class="h3_paa"> II.ОБЩИ УСЛОВИЯ:</h3>
|
<h3 class="h3_paa"> II.ОБЩИ УСЛОВИЯ:</h3>
|
||||||
<p> </p>
|
<p> </p>
|
||||||
<p>Чл.2 (1) Клиентът се съгласява с настоящите общи условия и се съгласява да ги спазва чрез едно от следните действия:</p>
|
<p>(1) Клиентът се съгласява с настоящите общи условия и се съгласява да ги спазва чрез едно от следните действия:</p>
|
||||||
<p>1. Избиране на отметка “ Съгласен съм с общите условия“</p>
|
<p>(2) Избиране на отметка “ Съгласен съм с общите условия“</p>
|
||||||
<p>2. При закупуване на услуга от ДОСТАВЧИКА.</p>
|
<p>(3) При закупуване на услуга от ДОСТАВЧИКА.</p>
|
||||||
<p>(3) Избирането на отметка ‘Съгласен съм’, от КЛИЕНТА се счита за електронно изявление по смисъла на Закона за електронния документ и електронния подпис (ЗЕДЕП), като със записването му на съответен носител в сървъра на ДОСТАВЧИКА, електронното изявление придобива качеството на електронен документ по смисъла на цитирания закон.</p>
|
<p>(4) Избирането на отметка ‘Съгласен съм’, от КЛИЕНТА се счита за електронно изявление по смисъла на Закона за електронния документ и електронния подпис (ЗЕДЕП), като със записването му на съответен носител в сървъра на ДОСТАВЧИКА, електронното изявление придобива качеството на електронен документ по смисъла на цитирания закон.</p>
|
||||||
<p>(4) ДОСТАВЧИКЪТ записва чрез общоприет стандарт за преобразуване, по технически начин, правещ възможно възпроизвеждането и съхраняването в специални файлове (лог-файлове, Log files) на своя сървър IP адреса на КЛИЕНТ, както и всяка друга информация, необходима за идентифициране на КЛИЕНТ и възпроизвеждане на електронното му изявление за приемане на Общите условия, в случай на възникване на правен спор.</p>
|
<p>(5) ДОСТАВЧИКЪТ записва чрез общоприет стандарт за преобразуване, по технически начин, правещ възможно възпроизвеждането и съхраняването в специални файлове (лог-файлове, Log files) на своя сървър IP адреса на КЛИЕНТ, както и всяка друга информация, необходима за идентифициране на КЛИЕНТ и възпроизвеждане на електронното му изявление за приемане на Общите условия, в случай на възникване на правен спор.</p>
|
||||||
<p>(3) Договорът за предоставяне на хостинг услуги между ДОСТАВЧИКА и КЛИЕНТА се счита за сключен при едно от събитията упоменати в Чл.2,</p>
|
<p>(6) Договорът за предоставяне на хостинг услуги между ДОСТАВЧИКА и КЛИЕНТА се счита за сключен при едно от събитията упоменати в Чл.2,</p>
|
||||||
<p>(4) Доставчикът си запазва правото да допълва, променя и редактира настоящите ОБЩИ УСЛОВИЯ.</p>
|
<p>(7) Доставчикът си запазва правото да допълва, променя и редактира настоящите ОБЩИ УСЛОВИЯ.</p>
|
||||||
<h3 class="h3_paa"> III. Основни положения</h3>
|
<h3 class="h3_paa"> III. Основни положения</h3>
|
||||||
<p>Чл.3 (1) Въз основа на настоящите Общи условия, ДОСТАВЧИКЪТ предоставя на КЛИЕНТА хостинг услуга, наричана по-долу за краткост ‘УСЛУГАТА’, представляваща правото на ползване на ресурсите на определена компютърна конфигурация – сървър, предостъпване на част от неговото дисково пространство, изчислителни ресурси и софтуер за управление чрез които КЛИЕНТА предоставя желана от него информация да бъде достъпна от други компютри през Интернет.</p>
|
<p>(1) Въз основа на настоящите Общи условия, ДОСТАВЧИКЪТ предоставя на КЛИЕНТА хостинг услуга, наричана по-долу за краткост ‘УСЛУГАТА’, представляваща правото на ползване на ресурсите на определена компютърна конфигурация – сървър, предостъпване на част от неговото дисково пространство, изчислителни ресурси и софтуер за управление чрез които КЛИЕНТА предоставя желана от него информация да бъде достъпна от други компютри през Интернет.</p>
|
||||||
<h3 class="h3_paa"> IV. Права и задължения на страните</h3>
|
<h3 class="h3_paa"> IV. Права и задължения на страните</h3>
|
||||||
<h4> Задължения на Доставчика:</h4>
|
<h4> Задължения на Доставчика:</h4>
|
||||||
<p>Чл.4 (1) ДОСТАВЧИКЪТ се задължава да поддържа постоянно техническите параметри на услугите, закупени от КЛИЕНТА.</p>
|
<p>(1) ДОСТАВЧИКЪТ се задължава да поддържа постоянно техническите параметри на услугите, закупени от КЛИЕНТА.</p>
|
||||||
<p>(2) ДОСТАВЧИКЪТ се задължава да предостави на КЛИЕНТА техническа възможност да променя паролите и кодовете си за достъп до системата, като се задължава да не ги предоставя на трети лица</p>
|
<p>(2) ДОСТАВЧИКЪТ се задължава да предостави на КЛИЕНТА техническа възможност да променя паролите и кодовете си за достъп до системата, като се задължава да не ги предоставя на трети лица</p>
|
||||||
<p>(3) ДОСТАВЧИКЪТ има право да прави софтуерни и хардуерни промени по техническото оборудване, като предупреди КЛИЕНТА за евентуални технически проблеми и прекъсвания на услугата.</p>
|
<p>(3) ДОСТАВЧИКЪТ има право да прави софтуерни и хардуерни промени по техническото оборудване, като предупреди КЛИЕНТА за евентуални технически проблеми и прекъсвания на услугата.</p>
|
||||||
<p>(4) ДОСТАВЧИКЪТ се задължава да пази данните и файловете на КЛИЕНТА и да не допуска да стават достояние на трети лица, дори и след прекратяване на взаимоотношенията между двете страни.</p>
|
<p>(4) ДОСТАВЧИКЪТ се задължава да пази данните и файловете на КЛИЕНТА и да не допуска да стават достояние на трети лица, дори и след прекратяване на взаимоотношенията между двете страни.</p>
|
||||||
<p>(5) При констатирани нарушения или неспазване на клаузите по настоящите ОБЩИ УСЛОВИЯ, ДОСТАВЧИКЪТ има право да спре услугите, закупени от КЛИЕНТА без предупреждение.</p>
|
<p>(5) При констатирани нарушения или неспазване на клаузите по настоящите ОБЩИ УСЛОВИЯ, ДОСТАВЧИКЪТ има право да спре услугите, закупени от КЛИЕНТА без предупреждение.</p>
|
||||||
<p> </p>
|
<p> </p>
|
||||||
<h4> Права на ДОСТАВЧИКА:</h4>
|
<h4> Права на ДОСТАВЧИКА:</h4>
|
||||||
<p>Чл.5 (1) ДОСТАВЧИКЪТ не носи отговорност спрямо КЛИЕНТА в случаите, когато:</p>
|
<p>(1) ДОСТАВЧИКЪТ не носи отговорност спрямо КЛИЕНТА в случаите, когато:</p>
|
||||||
<p>(2) УСЛУГАТА, закупена от клиента е с нарушени показатели, заради регулярни или инцидентни дейности по оборудването на ДОСТАВЧИКА, с цел подобряването качесвото на УСЛУГАТА.</p>
|
<p>(2) УСЛУГАТА, закупена от клиента е с нарушени показатели, заради регулярни или инцидентни дейности по оборудването на ДОСТАВЧИКА, с цел подобряването качесвото на УСЛУГАТА.</p>
|
||||||
<p>(3) ДОСТАВЧИКЪТ има право да спре достъпа до услугата, използвана от клиента поради неплащане на задължение в срок от страна на КЛИЕНТА.</p>
|
<p>(3) ДОСТАВЧИКЪТ има право да спре достъпа до услугата, използвана от клиента поради неплащане на задължение в срок от страна на КЛИЕНТА.</p>
|
||||||
<p>(4) e налице проблем със свързаността на ДОСТАВЧИКА с Интернет, поради локални или глобални проблеми с ресурси, извън мрежата на ДОСТАВЧИКА или неработоспособност на Интернет мрежата, преносната среда или оборудване между ДОСТАВЧИКА и КЛИЕНТА.</p>
|
<p>(4) e налице проблем със свързаността на ДОСТАВЧИКА с Интернет, поради локални или глобални проблеми с ресурси, извън мрежата на ДОСТАВЧИКА или неработоспособност на Интернет мрежата, преносната среда или оборудване между ДОСТАВЧИКА и КЛИЕНТА.</p>
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
<p>(6) КЛИЕНТЪТ използва непозволен софтуер, който вреди на оборудването на ДОСТАВЧИКА и петни името му.</p>
|
<p>(6) КЛИЕНТЪТ използва непозволен софтуер, който вреди на оборудването на ДОСТАВЧИКА и петни името му.</p>
|
||||||
<h4><strong> ПРАВА И ЗАДЪЛЖЕНИЯ НА КЛИЕНТА</strong></h4>
|
<h4><strong> ПРАВА И ЗАДЪЛЖЕНИЯ НА КЛИЕНТА</strong></h4>
|
||||||
<p> </p>
|
<p> </p>
|
||||||
<p>Чл.5 (1) КЛИЕНТЪТ е длъжен да заплаща заявените за използване услуги в срок, определен от ДОСТАВЧИКА.</p>
|
<p>(1) КЛИЕНТЪТ е длъжен да заплаща заявените за използване услуги в срок, определен от ДОСТАВЧИКА.</p>
|
||||||
<p>(2) КЛИЕНТЪТ се задължава да не нарушава законовите разпоредби на Република България при използването на УСЛУГАТА.</p>
|
<p>(2) КЛИЕНТЪТ се задължава да не нарушава законовите разпоредби на Република България при използването на УСЛУГАТА.</p>
|
||||||
<p>(3) Докато използва услугата, КИЛЕНТЪТ се задължава да не нарушава под никаква форма права и законни интереси на ДОСТАВЧИКА и/или трети лица.</p>
|
<p>(3) Докато използва услугата, КИЛЕНТЪТ се задължава да не нарушава под никаква форма права и законни интереси на ДОСТАВЧИКА и/или трети лица.</p>
|
||||||
<p>(4) КЛИЕНТЪТ се задължава да не предприема каквито и да било действия чрез УСЛУГАТА, които са в нарушение на законите на Република България или която и да е друга страна по света,</p>
|
<p>(4) КЛИЕНТЪТ се задължава да не предприема каквито и да било действия чрез УСЛУГАТА, които са в нарушение на законите на Република България или която и да е друга страна по света,</p>
|
||||||
|
|
|
@ -56,7 +56,7 @@ Storage: {{ deploy.machine_hdd }} GB<br />
|
||||||
{% if deploy.discount != 0 %}
|
{% if deploy.discount != 0 %}
|
||||||
<div id="totalDiscount">Discount <font color=#ff0000>-{{ deploy.discount }}%</font>: {{ discount }} {{ currency }}</div>
|
<div id="totalDiscount">Discount <font color=#ff0000>-{{ deploy.discount }}%</font>: {{ discount }} {{ currency }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div id="totalPrice">Previous Period: {{ total }} {{ currency }}</div>
|
<div id="totalPrice">{% if deploy.protected == False %}Total:{% else %}Previous Period:{% endif %} {{ total }} {{ currency }}</div>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
{% extends "base.html" %}
|
|
||||||
|
|
||||||
{% block page_content %}
|
|
||||||
<h1>Dashboard</h1>
|
|
||||||
<center>
|
|
||||||
<div class="row">
|
|
||||||
Празно е :( Можете да посетите <a href='/market/0'>магазинчето</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
|
@ -62,7 +62,7 @@ def createvm():
|
||||||
return redirect(url_for('main.dashboard'))
|
return redirect(url_for('main.dashboard'))
|
||||||
|
|
||||||
if query is not None:
|
if query is not None:
|
||||||
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)
|
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.add(deployment)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash('Deploy created successfully in region "{}".'.format(str(selected_region.description)))
|
flash('Deploy created successfully in region "{}".'.format(str(selected_region.description)))
|
||||||
|
@ -72,6 +72,21 @@ def createvm():
|
||||||
return redirect(url_for('main.dashboard'))
|
return redirect(url_for('main.dashboard'))
|
||||||
return render_template('vmanager/create.html', form=form)
|
return render_template('vmanager/create.html', form=form)
|
||||||
|
|
||||||
|
@vmanager.route('/vmremove/<int:itemid>', methods=['GET', 'POST'])
|
||||||
|
@login_required
|
||||||
|
def remove(itemid=0):
|
||||||
|
data = {}
|
||||||
|
result = 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))
|
||||||
|
|
||||||
|
except:
|
||||||
|
flash('Cannot delete machine {}'.format(itemid))
|
||||||
|
return redirect(url_for('admin.list_cancelled'))
|
||||||
|
abort(404)
|
||||||
|
|
||||||
@vmanager.route('/activate/<int:itemid>', methods=['GET', 'POST'])
|
@vmanager.route('/activate/<int:itemid>', methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def activate(itemid=0):
|
def activate(itemid=0):
|
||||||
|
@ -108,6 +123,9 @@ def activate(itemid=0):
|
||||||
total = ppm * form.period.data
|
total = ppm * form.period.data
|
||||||
if owner.wallet < total:
|
if owner.wallet < total:
|
||||||
flash('Activation costs {} {}. Insufficient Funds'.format(total, owner.currency))
|
flash('Activation costs {} {}. Insufficient Funds'.format(total, owner.currency))
|
||||||
|
if current_user.is_administrator():
|
||||||
|
return redirect(url_for('admin.list_users'))
|
||||||
|
else:
|
||||||
return redirect(url_for('uinvoice.transactions'))
|
return redirect(url_for('uinvoice.transactions'))
|
||||||
current_app.logger.info('[{}] Charge deployment: {}'.format(owner.email, deploy.machine_id))
|
current_app.logger.info('[{}] Charge deployment: {}'.format(owner.email, deploy.machine_id))
|
||||||
today = datetime.utcnow()
|
today = datetime.utcnow()
|
||||||
|
@ -150,9 +168,11 @@ def command(cmd=None, vmid=0):
|
||||||
for invcls in result:
|
for invcls in result:
|
||||||
inventory.extend([invcls.machine_id])
|
inventory.extend([invcls.machine_id])
|
||||||
|
|
||||||
|
data = {}
|
||||||
|
|
||||||
if current_user.is_administrator():
|
if current_user.is_administrator():
|
||||||
#current_app.logger.warning('[ADMIN] Access override for cube id:{}'.format(vmid))
|
#current_app.logger.warning('[ADMIN] Access override for cube id:{}'.format(vmid))
|
||||||
db_result = contact_proxmaster({}, cmd, vmid)
|
db_result = contact_proxmaster(data, cmd, int(vmid))
|
||||||
if cmd == 'vmvnc':
|
if cmd == 'vmvnc':
|
||||||
return redirect(db_result['url'])
|
return redirect(db_result['url'])
|
||||||
else:
|
else:
|
||||||
|
@ -161,7 +181,7 @@ def command(cmd=None, vmid=0):
|
||||||
current_app.logger.warning('[{}] Access violation with cube id: {}'.format(current_user.email, vmid))
|
current_app.logger.warning('[{}] Access violation with cube id: {}'.format(current_user.email, vmid))
|
||||||
#TODO: log ips
|
#TODO: log ips
|
||||||
else:
|
else:
|
||||||
db_result = contact_proxmaster({}, cmd, vmid)
|
db_result = contact_proxmaster(data, cmd, int(vmid))
|
||||||
#print(db_result)
|
#print(db_result)
|
||||||
if cmd == 'vmvnc':
|
if cmd == 'vmvnc':
|
||||||
return redirect(db_result['url'])
|
return redirect(db_result['url'])
|
||||||
|
|
Loading…
Reference in a new issue