1
0
mirror of https://github.com/dkmstr/openuds.git synced 2025-03-11 00:58:39 +03:00

Fixed several "case" uuids tests, so UDS can work with case sensitive

databases
This commit is contained in:
Adolfo Gómez García 2015-05-14 11:46:45 +02:00
parent b592e10126
commit df498dd5bc
12 changed files with 64 additions and 46 deletions

View File

@ -36,6 +36,7 @@ from django.utils.translation import ugettext as _
from uds.core.util import Config
from uds.core.util.State import State
from uds.core.util.model import processUuid
from uds.core.util import log
from uds.core.managers import cryptoManager
from uds.REST import Handler
@ -170,7 +171,7 @@ class Actor(Handler):
# Right now, only "message" posts
try:
service = UserService.objects.get(uuid=uuid)
service = UserService.objects.get(uuid=processUuid(uuid))
except Exception:
return Actor.result(_('User service not found'), error=ERR_USER_SERVICE_NOT_FOUND)

View File

@ -37,6 +37,7 @@ from django.utils.translation import ugettext as _
from uds.REST import Handler
from uds.REST import RequestError
from uds.models import UserService, DeployedService, Transport
from uds.core.util.model import processUuid
from uds.core.managers.UserServiceManager import UserServiceManager
from uds.core.util import log
from uds.core.util.stats import events
@ -133,9 +134,9 @@ class Connection(Handler):
try:
logger.debug('Kind of service: {0}, idService: {1}'.format(kind, idService))
if kind == 'A': # This is an assigned service
ads = UserService.objects.get(uuid=idService)
ads = UserService.objects.get(uuid=processUuid(idService))
else:
ds = DeployedService.objects.get(uuid=idService)
ds = DeployedService.objects.get(uuid=processUuid(idService))
# We first do a sanity check for this, if the user has access to this service
# If it fails, will raise an exception
ds.validateUser(self._user)
@ -146,7 +147,7 @@ class Connection(Handler):
return Connection.result(error='Service in maintenance')
logger.debug('Found service: {0}'.format(ads))
trans = Transport.objects.get(uuid=idTransport)
trans = Transport.objects.get(uuid=processUuid(idTransport))
if trans.validForIp(self._request.ip) is False:
return Connection.result(error='Access denied')

View File

@ -33,6 +33,7 @@
from __future__ import unicode_literals
from uds.core.util.Config import GlobalConfig
from uds.core.util.model import processUuid
from uds.models import Authenticator
from uds.core.auths.auth import authenticate
@ -90,7 +91,7 @@ class Login(Handler):
try:
# Will raise an exception if no auth found
if authId is not None:
auth = Authenticator.objects.get(uuid=authId)
auth = Authenticator.objects.get(uuid=processUuid(authId))
elif authName is not None:
auth = Authenticator.objects.get(name=authName)
else:

View File

@ -36,6 +36,7 @@ from django.utils.translation import ugettext, ugettext_lazy as _
from uds.models import Provider, Service, UserService
from uds.REST.methods.services import Services as DetailServices
from uds.core import services
from uds.core.util.model import processUuid
from uds.REST import NotFound, RequestError
from uds.REST.model import ModelHandler
@ -119,7 +120,7 @@ class Providers(ModelHandler):
Custom method that returns a service by its uuid, no matter who's his daddy
'''
try:
return DetailServices.serviceToDict(Service.objects.get(uuid=self._args[1]), True)
return DetailServices.serviceToDict(Service.objects.get(uuid=processUuid(self._args[1])), True)
except Exception:
raise RequestError(ugettext('Service not found'))

View File

@ -39,6 +39,7 @@ from uds.models import Service, UserService
from uds.core.services import Service as coreService
from uds.core.util import log
from uds.core.util.model import processUuid
from uds.core.Environment import Environment
from uds.REST.model import DetailHandler
from uds.REST import NotFound, ResponseError, RequestError
@ -93,7 +94,7 @@ class Services(DetailHandler): # pylint: disable=too-many-public-methods
if item is None:
return [Services.serviceToDict(k) for k in parent.services.all()]
else:
k = parent.services.get(uuid=item)
k = parent.services.get(uuid=processUuid(item))
val = Services.serviceToDict(k)
return self.fillIntanceFields(k, val)
except Exception:
@ -124,7 +125,7 @@ class Services(DetailHandler): # pylint: disable=too-many-public-methods
if item is None: # Create new
service = parent.services.create(**fields)
else:
service = parent.services.get(uuid=item)
service = parent.services.get(uuid=processUuid(item))
service.__dict__.update(fields)
service.data = service.getInstance(self._params).serialize()
@ -145,7 +146,7 @@ class Services(DetailHandler): # pylint: disable=too-many-public-methods
def deleteItem(self, parent, item):
try:
service = parent.services.get(uuid=item)
service = parent.services.get(uuid=processUuid(item))
if service.deployedServices.count() != 0:
raise RequestError('Item has associated deployed services')
@ -203,7 +204,7 @@ class Services(DetailHandler): # pylint: disable=too-many-public-methods
def getLogs(self, parent, item):
try:
item = parent.services.get(uuid=item)
item = parent.services.get(uuid=processUuid(item))
logger.debug('Getting logs for {0}'.format(item))
return log.getLogs(item)
except Exception:

View File

@ -36,6 +36,7 @@ from django.utils.translation import ugettext, ugettext_lazy as _
from uds.models import DeployedService, OSManager, Service, Image
from uds.core.ui.images import DEFAULT_THUMB_BASE64
from uds.core.util.State import State
from uds.core.util.model import processUuid
from uds.core.util import log
from uds.REST.model import ModelHandler
from uds.REST import RequestError, ResponseError
@ -180,7 +181,7 @@ class ServicesPools(ModelHandler):
# logger.debug(self._params)
try:
try:
service = Service.objects.get(uuid=fields['service_id'])
service = Service.objects.get(uuid=processUuid(fields['service_id']))
fields['service_id'] = service.id
except:
raise RequestError(ugettext('Base service does not exist anymore'))
@ -192,7 +193,7 @@ class ServicesPools(ModelHandler):
self._params['publish_on_save'] = False
if serviceType.needsManager is True:
osmanager = OSManager.objects.get(uuid=fields['osmanager_id'])
osmanager = OSManager.objects.get(uuid=processUuid(fields['osmanager_id']))
fields['osmanager_id'] = osmanager.id
else:
del fields['osmanager_id']
@ -209,7 +210,7 @@ class ServicesPools(ModelHandler):
logger.debug('Image id: {}'.format(imgId))
try:
if imgId != '-1':
image = Image.objects.get(uuid=imgId)
image = Image.objects.get(uuid=processUuid(imgId))
fields['image_id'] = image.id
except Exception:
logger.exception('At image recovering')

View File

@ -38,6 +38,7 @@ from uds.models import Authenticator
from uds.models import DeployedService
from uds.models import Transport
from uds.core.util.Ticket import Ticket
from uds.core.util.model import processUuid
import datetime
@ -105,7 +106,7 @@ class Tickets(Handler):
# Will raise an exception if no auth found
if authId is not None:
auth = Authenticator.objects.get(uuid=authId.lower())
auth = Authenticator.objects.get(uuid=processUuid(authId.lower()))
elif authName is not None:
auth = Authenticator.objects.get(name=authName)
else:
@ -135,11 +136,11 @@ class Tickets(Handler):
transport = None
if servicePool is not None:
servicePool = DeployedService.objects.get(uuid=servicePool.lower())
servicePool = DeployedService.objects.get(uuid=processUuid(servicePool))
transport = self._params.get('transport', None)
if transport is not None:
transport = Transport.objects.get(uuid=transport.lower())
transport = Transport.objects.get(uuid=processUuid(transport))
try:
servicePool.validateTransport(transport)
except Exception:

View File

@ -40,10 +40,12 @@ from django.utils.translation import ugettext as _
from uds.models import Group, Transport, DeployedServicePublication
from uds.core.util.State import State
from uds.core.util.model import processUuid
from uds.core.util import log
from uds.REST.model import DetailHandler
from uds.REST import ResponseError
import logging
logger = logging.getLogger(__name__)
@ -96,7 +98,7 @@ class AssignedService(DetailHandler):
return [AssignedService.itemToDict(k) for k in parent.assignedUserServices().all()
.prefetch_related('properties').prefetch_related('deployed_service').prefetch_related('publication')]
else:
return parent.assignedUserServices().get(uuid=item)
return parent.assignedUserServices().get(processUuid(uuid=processUuid(item)))
except Exception:
logger.exception('getItems')
self.invalidItemException()
@ -125,7 +127,7 @@ class AssignedService(DetailHandler):
def getLogs(self, parent, item):
try:
item = parent.assignedUserServices().get(uuid=item)
item = parent.assignedUserServices().get(uuid=processUuid(item))
logger.debug('Getting logs for {0}'.format(item))
return log.getLogs(item)
except Exception:
@ -133,7 +135,7 @@ class AssignedService(DetailHandler):
def deleteItem(self, parent, item): # This is also used by CachedService, so we use "userServices" directly and is valid for both
try:
service = parent.userServices.get(uuid=item)
service = parent.userServices.get(uuid=processUuid(item))
except Exception:
logger.exception('deleteItem')
self.invalidItemException()
@ -161,7 +163,7 @@ class CachedService(AssignedService):
return [AssignedService.itemToDict(k, True) for k in parent.cachedUserServices().all()
.prefetch_related('properties').prefetch_related('deployed_service').prefetch_related('publication')]
else:
k = parent.cachedUserServices().get(uuid=item)
k = parent.cachedUserServices().get(uuid=processUuid(item))
return AssignedService.itemToDict(k, True)
except Exception:
logger.exception('getItems')
@ -184,7 +186,7 @@ class CachedService(AssignedService):
def getLogs(self, parent, item):
try:
item = parent.cachedUserServices().get(uuid=item)
item = parent.cachedUserServices().get(uuid=processUuid(item))
logger.debug('Getting logs for {0}'.format(item))
return log.getLogs(item)
except Exception:
@ -220,11 +222,11 @@ class Groups(DetailHandler):
return {'field': 'state', 'prefix': 'row-state-'}
def saveItem(self, parent, item):
parent.assignedGroups.add(Group.objects.get(uuid=self._params['id']))
parent.assignedGroups.add(Group.objects.get(uuid=processUuid(self._params['id'])))
return self.success()
def deleteItem(self, parent, item):
parent.assignedGroups.remove(Group.objects.get(uuid=self._args[0]))
parent.assignedGroups.remove(Group.objects.get(uuid=processUuid(self._args[0])))
class Transports(DetailHandler):
@ -252,11 +254,11 @@ class Transports(DetailHandler):
]
def saveItem(self, parent, item):
parent.transports.add(Transport.objects.get(uuid=self._params['id']))
parent.transports.add(Transport.objects.get(uuid=processUuid(self._params['id'])))
return self.success()
def deleteItem(self, parent, item):
parent.transports.remove(Transport.objects.get(uuid=self._args[0]))
parent.transports.remove(Transport.objects.get(uuid=processUuid(self._args[0])))
class Publications(DetailHandler):
@ -282,7 +284,7 @@ class Publications(DetailHandler):
:param uuid: uuid of the publication
'''
try:
ds = DeployedServicePublication.objects.get(uuid=uuid)
ds = DeployedServicePublication.objects.get(uuid=processUuid(uuid))
ds.cancel()
except Exception as e:
raise ResponseError(unicode(e))

View File

@ -41,6 +41,7 @@ from uds.core.util.State import State
from uds.core.auths.Exceptions import AuthenticatorException
from uds.core.util import log
from uds.core.util.model import processUuid
from uds.models import Authenticator, User, Group
from uds.core.auths.User import User as aUser
from uds.core.managers import cryptoManager
@ -71,7 +72,7 @@ class Users(DetailHandler):
if item is None:
return list(Users.uuid_to_id(parent.users.all().values('uuid', 'name', 'real_name', 'comments', 'state', 'staff_member', 'is_admin', 'last_access', 'parent')))
else:
u = parent.users.get(uuid=item)
u = parent.users.get(uuid=processUuid(item))
res = model_to_dict(u, fields=('name', 'real_name', 'comments', 'state', 'staff_member', 'is_admin', 'last_access', 'parent'))
res['id'] = u.uuid
usr = aUser(u)
@ -84,7 +85,7 @@ class Users(DetailHandler):
def getTitle(self, parent):
try:
return _('Users of {0}').format(Authenticator.objects.get(uuid=self._kwargs['parent_id']).name)
return _('Users of {0}').format(Authenticator.objects.get(uuid=processUuid(self._kwargs['parent_id'])).name)
except Exception:
return _('Current users')
@ -102,7 +103,7 @@ class Users(DetailHandler):
def getLogs(self, parent, item):
try:
user = parent.users.get(uuid=item)
user = parent.users.get(uuid=processUuid(item))
except Exception:
self.invalidItemException()
@ -129,7 +130,7 @@ class Users(DetailHandler):
toSave = {}
for k in valid_fields:
toSave[k] = fields[k]
user = parent.users.get(uuid=item)
user = parent.users.get(uuid=processUuid(item))
user.__dict__.update(toSave)
logger.debug('User parent: {}'.format(user.parent))
@ -157,7 +158,7 @@ class Users(DetailHandler):
def deleteItem(self, parent, item):
try:
user = parent.users.get(uuid=item)
user = parent.users.get(uuid=processUuid(item))
user.delete()
except Exception:
@ -175,7 +176,7 @@ class Groups(DetailHandler):
multi = True
q = parent.groups.all().order_by('name')
else:
q = parent.groups.filter(uuid=item)
q = parent.groups.filter(uuid=processUuid(item))
res = []
for i in q:
val = {
@ -198,7 +199,7 @@ class Groups(DetailHandler):
def getTitle(self, parent):
try:
return _('Groups of {0}').format(Authenticator.objects.get(uuid=self._kwargs['parent_id']).name)
return _('Groups of {0}').format(Authenticator.objects.get(uuid=processUuid(self._kwargs['parent_id'])).name)
except:
return _('Current groups')
@ -258,7 +259,7 @@ class Groups(DetailHandler):
toSave['comments'] = fields['comments'][:255]
toSave['meta_if_any'] = meta_if_any
group = parent.groups.get(uuid=item)
group = parent.groups.get(uuid=processUuid(item))
group.__dict__.update(toSave)
if is_meta:

View File

@ -40,6 +40,7 @@ from django.db import IntegrityError
from uds.core.ui.UserInterface import gui as uiGui
from uds.REST.handlers import Handler, HandlerError
from uds.core.util import log
from uds.core.util.model import processUuid
import fnmatch
import re
@ -50,7 +51,7 @@ import logging
logger = logging.getLogger(__name__)
__updated__ = '2015-02-16'
__updated__ = '2015-05-14'
# a few constants
@ -332,7 +333,7 @@ class DetailHandler(BaseModelHandler): # pylint: disable=abstract-class-not-use
return self.processTableFields(self.getTitle(parent), self.getFields(parent), self.getRowStyle(parent))
# try to get id
return self.getItems(parent, self._args[0].upper())
return self.getItems(parent, processUuid(self._args[0]))
if nArgs == 2:
if self._args[0] == GUI:

View File

@ -6,9 +6,15 @@ Created on Sep 15, 2014
from __future__ import unicode_literals
from uds.core.managers import cryptoManager
import six
def generateUuid():
'''
Generates a ramdom uuid for models default
'''
return cryptoManager().uuid().lower()
def processUuid(uuid):
return six.text_type(uuid).lower()

View File

@ -40,6 +40,7 @@ from uds.core.services.Exceptions import ServiceInMaintenanceMode, InvalidServic
from uds.core.managers.UserServiceManager import UserServiceManager
from uds.core.ui.images import DEFAULT_IMAGE
from uds.core.ui import theme
from uds.core.util.model import processUuid
from uds.core.util.Config import GlobalConfig
from uds.core.util.stats import events
from uds.core.util import log
@ -52,7 +53,7 @@ import logging
logger = logging.getLogger(__name__)
__updated__ = '2015-04-16'
__updated__ = '2015-05-14'
@webLoginRequired
@ -61,9 +62,9 @@ def service(request, idService, idTransport):
try:
logger.debug('Kind of service: {0}, idService: {1}'.format(kind, idService))
if kind == 'A': # This is an assigned service
ads = UserService.objects.get(uuid=idService)
ads = UserService.objects.get(uuid=processUuid(idService))
else:
ds = DeployedService.objects.get(uuid=idService)
ds = DeployedService.objects.get(uuid=processUuid(idService))
# We first do a sanity check for this, if the user has access to this service
# If it fails, will raise an exception
ds.validateUser(request.user)
@ -74,7 +75,7 @@ def service(request, idService, idTransport):
raise ServiceInMaintenanceMode()
logger.debug('Found service: {0}'.format(ads))
trans = Transport.objects.get(uuid=idTransport)
trans = Transport.objects.get(uuid=processUuid(idTransport))
if trans.validForIp(request.ip) is False:
raise InvalidServiceException()
@ -111,7 +112,7 @@ def service(request, idService, idTransport):
def transcomp(request, idTransport, componentId):
try:
# We got translated first id
trans = Transport.objects.get(uuid=idTransport.upper())
trans = Transport.objects.get(uuid=processUuid(idTransport))
itrans = trans.getInstance()
res = itrans.getHtmlComponent(trans.uuid, OsDetector.getOsFromRequest(request), componentId)
response = HttpResponse(res[1], content_type=res[0])
@ -132,7 +133,7 @@ def sernotify(request, idUserService, notification):
ip = request.GET.get('ip', ip)
if ip is not None and hostname is not None:
us = UserService.objects.get(uuid=idUserService)
us = UserService.objects.get(uuid=processUuid(idUserService))
us.setConnectionSource(ip, hostname)
else:
return HttpResponse('Invalid request!', 'text/plain')
@ -140,7 +141,7 @@ def sernotify(request, idUserService, notification):
message = request.GET.get('message', None)
level = request.GET.get('level', None)
if message is not None and level is not None:
us = UserService.objects.get(uuid=idUserService)
us = UserService.objects.get(uuid=processUuid(idUserService))
log.doLog(us, level, message, log.TRANSPORT)
else:
return HttpResponse('Invalid request!', 'text/plain')
@ -152,7 +153,7 @@ def sernotify(request, idUserService, notification):
def transportIcon(request, idTrans):
try:
icon = Transport.objects.get(uuid=idTrans).getInstance().icon(False)
icon = Transport.objects.get(uuid=processUuid(idTrans)).getInstance().icon(False)
return HttpResponse(icon, content_type='image/png')
except Exception:
return HttpResponseRedirect('/static/img/unknown.png')
@ -161,13 +162,13 @@ def transportIcon(request, idTrans):
@cache_page(86400, key_prefix='img')
def serviceImage(request, idImage):
try:
icon = Image.objects.get(uuid=idImage)
icon = Image.objects.get(uuid=processUuid(idImage))
return icon.imageResponse()
except Image.DoesNotExist:
pass # Tries to get image from transport
try:
icon = Transport.objects.get(uuid=idImage).getInstance().icon(False)
icon = Transport.objects.get(uuid=processUuid(idImage)).getInstance().icon(False)
return HttpResponse(icon, content_type='image/png')
except Exception:
return HttpResponse(DEFAULT_IMAGE, content_type='image/png')