forked from shaba/openuds
* Added cache flush functionality to dashboard
* added rest method to flush cache * Fixed tabletools "stuff" left behind, removing all this on any "main link" click
This commit is contained in:
parent
732840df42
commit
64382b5afe
@ -11,6 +11,7 @@ encoding//src/server/urls.py=utf-8
|
|||||||
encoding//src/uds/REST/__init__.py=utf-8
|
encoding//src/uds/REST/__init__.py=utf-8
|
||||||
encoding//src/uds/REST/handlers.py=utf-8
|
encoding//src/uds/REST/handlers.py=utf-8
|
||||||
encoding//src/uds/REST/methods/authenticators.py=utf-8
|
encoding//src/uds/REST/methods/authenticators.py=utf-8
|
||||||
|
encoding//src/uds/REST/methods/cache.py=utf-8
|
||||||
encoding//src/uds/REST/methods/gui_callback.py=utf-8
|
encoding//src/uds/REST/methods/gui_callback.py=utf-8
|
||||||
encoding//src/uds/REST/methods/login_logout.py=utf-8
|
encoding//src/uds/REST/methods/login_logout.py=utf-8
|
||||||
encoding//src/uds/REST/methods/networks.py=utf-8
|
encoding//src/uds/REST/methods/networks.py=utf-8
|
||||||
@ -107,6 +108,7 @@ encoding//src/uds/core/util/ThreadPool.py=utf-8
|
|||||||
encoding//src/uds/core/util/UniqueIDGenerator.py=utf-8
|
encoding//src/uds/core/util/UniqueIDGenerator.py=utf-8
|
||||||
encoding//src/uds/core/util/UniqueMacGenerator.py=utf-8
|
encoding//src/uds/core/util/UniqueMacGenerator.py=utf-8
|
||||||
encoding//src/uds/core/util/UniqueNameGenerator.py=utf-8
|
encoding//src/uds/core/util/UniqueNameGenerator.py=utf-8
|
||||||
|
encoding//src/uds/core/util/__init__.py=utf-8
|
||||||
encoding//src/uds/core/util/connection.py=utf-8
|
encoding//src/uds/core/util/connection.py=utf-8
|
||||||
encoding//src/uds/core/util/html.py=utf-8
|
encoding//src/uds/core/util/html.py=utf-8
|
||||||
encoding//src/uds/core/util/log.py=utf-8
|
encoding//src/uds/core/util/log.py=utf-8
|
||||||
|
74
server/src/uds/REST/methods/cache.py
Normal file
74
server/src/uds/REST/methods/cache.py
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014 Virtual Cable S.L.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
# are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software
|
||||||
|
# without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
'''
|
||||||
|
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||||
|
'''
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from uds.core.util.Cache import Cache as uCache
|
||||||
|
from uds.REST import Handler, RequestError, NotFound
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Enclosed methods under /auth path
|
||||||
|
|
||||||
|
class Cache(Handler):
|
||||||
|
authenticated = True # Public method
|
||||||
|
needs_staff = True #
|
||||||
|
|
||||||
|
def get(self):
|
||||||
|
'''
|
||||||
|
This login uses parameters to generate auth token
|
||||||
|
The alternative is to use the template tag inside "REST" that is called auth_token, that extracts an auth token from an user session
|
||||||
|
We can use any of this forms due to the fact that the auth token is in fact a session key
|
||||||
|
Parameters:
|
||||||
|
mandatory:
|
||||||
|
username:
|
||||||
|
password:
|
||||||
|
auth:
|
||||||
|
optional:
|
||||||
|
locale: (defaults to "en")
|
||||||
|
Result:
|
||||||
|
on success: { 'result': 'ok', 'auth': [auth_code] }
|
||||||
|
on error: { 'result: 'error', 'error': [error string] }
|
||||||
|
'''
|
||||||
|
|
||||||
|
logger.debug('Params: {0}'.format(self._params))
|
||||||
|
if len(self._args) == 0:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
if len(self._args) != 1:
|
||||||
|
raise RequestError('Invalid Request')
|
||||||
|
|
||||||
|
|
||||||
|
uCache.purge()
|
||||||
|
return 'done'
|
@ -47,24 +47,6 @@ class Callback(Handler):
|
|||||||
needs_staff = True #
|
needs_staff = True #
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
'''
|
|
||||||
This login uses parameters to generate auth token
|
|
||||||
The alternative is to use the template tag inside "REST" that is called auth_token, that extracts an auth token from an user session
|
|
||||||
We can use any of this forms due to the fact that the auth token is in fact a session key
|
|
||||||
Parameters:
|
|
||||||
mandatory:
|
|
||||||
username:
|
|
||||||
password:
|
|
||||||
auth:
|
|
||||||
optional:
|
|
||||||
locale: (defaults to "en")
|
|
||||||
Result:
|
|
||||||
on success: { 'result': 'ok', 'auth': [auth_code] }
|
|
||||||
on error: { 'result: 'error', 'error': [error string] }
|
|
||||||
'''
|
|
||||||
|
|
||||||
logger.debug('Params: {0}'.format(self._params))
|
|
||||||
|
|
||||||
if len(self._args) != 1:
|
if len(self._args) != 1:
|
||||||
raise RequestError('Invalid Request')
|
raise RequestError('Invalid Request')
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
'''
|
'''
|
||||||
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||||
'''
|
'''
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from server.settings import RSA_KEY
|
from server.settings import RSA_KEY
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
@ -59,17 +60,18 @@ class CryptoManager(object):
|
|||||||
|
|
||||||
def encrypt(self, string):
|
def encrypt(self, string):
|
||||||
atfork()
|
atfork()
|
||||||
return self._rsa.encrypt(string, '')[0].encode(CryptoManager.CODEC)
|
return self._rsa.encrypt(string.encode('utf-8'), '')[0].encode(CryptoManager.CODEC)
|
||||||
|
|
||||||
def decrypt(self, string):
|
def decrypt(self, string):
|
||||||
atfork()
|
atfork()
|
||||||
return self._rsa.decrypt(string.decode(CryptoManager.CODEC))
|
return self._rsa.decrypt(string.decode(CryptoManager.CODEC)).decode('utf-8')
|
||||||
|
|
||||||
def xor(self, s1, s2):
|
def xor(self, s1, s2):
|
||||||
|
s1, s2 = s1.encode('utf-8'), s2.encode('utf-8')
|
||||||
mult = (len(s1)/len(s2)) + 1
|
mult = (len(s1)/len(s2)) + 1
|
||||||
s1 = array.array('B', s1)
|
s1 = array.array(b'B', s1)
|
||||||
s2 = array.array('B', s2 * mult)
|
s2 = array.array(b'B', s2 * mult)
|
||||||
return array.array('B', (s1[i] ^ s2[i] for i in range(len(s1)))).tostring()
|
return array.array(b'B', (s1[i] ^ s2[i] for i in range(len(s1)))).tostring()
|
||||||
|
|
||||||
def loadPrivateKey(self, rsaKey):
|
def loadPrivateKey(self, rsaKey):
|
||||||
try:
|
try:
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
'''
|
'''
|
||||||
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||||
'''
|
'''
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from uds.models import Config as dbConfig
|
from uds.models import Config as dbConfig
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (c) 2012 Virtual Cable S.L.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
# are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software
|
||||||
|
# without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
'''
|
||||||
|
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||||
|
'''
|
||||||
|
from __future__ import unicode_literals
|
@ -243,7 +243,7 @@ gui.connectivity.link = function(event) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onDelete: function(value, event, table, refreshFnc) {
|
onDelete: function(value, event, table, refreshFncs) {
|
||||||
// TODO: Add confirmation to deletion
|
// TODO: Add confirmation to deletion
|
||||||
gui.connectivity.transports.rest.del(value.id, function(){
|
gui.connectivity.transports.rest.del(value.id, function(){
|
||||||
refreshFnc();
|
refreshFnc();
|
||||||
@ -258,3 +258,15 @@ gui.connectivity.link = function(event) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Tools
|
||||||
|
gui.clear_cache = new BasicGuiElement('Clear cache');
|
||||||
|
gui.clear_cache.link = function() {
|
||||||
|
"use strict";
|
||||||
|
api.getJson('cache/flush', {
|
||||||
|
success: function() {
|
||||||
|
gui.launchModal(gettext('Cache'), gettext('Cache has been flushed'), ' ' );
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
@ -151,32 +151,41 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
gui.setLinksEvents = function() {
|
gui.setLinksEvents = function() {
|
||||||
var sidebarLinks = [ {
|
var sidebarLinks = [
|
||||||
id : 'lnk-dashboard',
|
{
|
||||||
exec : gui.dashboard.link,
|
id : 'lnk-dashboard',
|
||||||
}, {
|
exec : gui.dashboard.link,
|
||||||
id : 'lnk-service_providers',
|
}, {
|
||||||
exec : gui.providers.link
|
id : 'lnk-service_providers',
|
||||||
}, {
|
exec : gui.providers.link
|
||||||
id : 'lnk-authenticators',
|
}, {
|
||||||
exec : gui.authenticators.link
|
id : 'lnk-authenticators',
|
||||||
}, {
|
exec : gui.authenticators.link
|
||||||
id : 'lnk-osmanagers',
|
}, {
|
||||||
exec : gui.osmanagers.link
|
id : 'lnk-osmanagers',
|
||||||
}, {
|
exec : gui.osmanagers.link
|
||||||
id : 'lnk-connectivity',
|
}, {
|
||||||
exec : gui.connectivity.link
|
id : 'lnk-connectivity',
|
||||||
}, {
|
exec : gui.connectivity.link
|
||||||
id : 'lnk-deployed_services',
|
}, {
|
||||||
exec : gui.deployed_services
|
id : 'lnk-deployed_services',
|
||||||
}, ];
|
exec : gui.deployed_services
|
||||||
|
}, {
|
||||||
|
id : 'lnk-clear_cache',
|
||||||
|
exec : gui.clear_cache.link,
|
||||||
|
},
|
||||||
|
];
|
||||||
$.each(sidebarLinks, function(index, value) {
|
$.each(sidebarLinks, function(index, value) {
|
||||||
gui.doLog('Adding ' + value.id);
|
gui.doLog('Adding ' + value.id);
|
||||||
$('.' + value.id).unbind('click').click(function(event) {
|
$('.' + value.id).unbind('click').click(function(event) {
|
||||||
|
event.preventDefault();
|
||||||
if ($('.navbar-toggle').css('display') != 'none') {
|
if ($('.navbar-toggle').css('display') != 'none') {
|
||||||
$(".navbar-toggle").trigger("click");
|
$(".navbar-toggle").trigger("click");
|
||||||
}
|
}
|
||||||
$('html, body').scrollTop(0);
|
$('html, body').scrollTop(0);
|
||||||
|
// Tabletools creates divs at end that do not get removed, here is a good place to ensure there is no garbage left behind
|
||||||
|
// And anyway, if this div does not exists, it creates a new one...
|
||||||
|
$('.DTTT_dropdown').remove();
|
||||||
value.exec(event);
|
value.exec(event);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<!-- Brand and toggle get grouped for better mobile display -->
|
<!-- Brand and toggle get grouped for better mobile display -->
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||||
<span class="sr-only">{% trans 'toggle navigation'|capfirst %}</span>
|
<span class="sr-only">{% trans 'Toggle navigation' %}</span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
@ -24,7 +24,7 @@
|
|||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-caret-square-o-down"></i> Tools <b class="caret"></b></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-caret-square-o-down"></i> Tools <b class="caret"></b></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="#">{% trans 'Configuration' %}</a></li>
|
<li><a href="#">{% trans 'Configuration' %}</a></li>
|
||||||
<li><a href="#">Another Item</a></li>
|
<li><a class="lnk-clear_cache" href="#">{% trans 'Clear cache' %}</a></li>
|
||||||
<li><a href="#">Third Item</a></li>
|
<li><a href="#">Third Item</a></li>
|
||||||
<li><a href="#">Last Item</a></li>
|
<li><a href="#">Last Item</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -54,8 +54,8 @@
|
|||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-dashboard"></i> {{ user.real_name }} <b class="caret"></b></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-dashboard"></i> {{ user.real_name }} <b class="caret"></b></a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="{% url 'uds.web.views.index' %}"><span class="fa fa-user"></span> {% trans 'Exit dashboard' %}</a></li>
|
<li><a href="{% url 'uds.web.views.index' %}"><span class="fa fa-user"></span> {% trans 'Exit' %}</a></li>
|
||||||
<li><a href="/logout"><span class="fa fa-power-off text-danger"></span> {% trans 'logout'|capfirst %}</a></li>
|
<li><a href="/logout"><span class="fa fa-power-off text-danger"></span> {% trans 'Logout' %}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user