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

Merge remote-tracking branch 'origin/v1.7'

Conflicts:
	server/src/uds/REST/methods/providers.py
	server/src/uds/REST/methods/services.py
	server/src/uds/REST/methods/tickets.py
	server/src/uds/REST/model.py
	server/src/uds/web/views/service.py
This commit is contained in:
Adolfo Gómez García 2015-05-14 12:39:58 +02:00
commit 0ffc9964d0
12 changed files with 55 additions and 37 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
@ -132,9 +133,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)
@ -145,7 +146,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

@ -37,6 +37,7 @@ 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 import permissions
from uds.core.util.model import processUuid
from uds.REST import NotFound, RequestError
from uds.REST.model import ModelHandler

View File

@ -40,6 +40,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 import permissions
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
@ -100,7 +101,7 @@ class Services(DetailHandler): # pylint: disable=too-many-public-methods
if item is None:
return [Services.serviceToDict(k, perm) for k in parent.services.all()]
else:
k = parent.services.get(uuid=item)
k = parent.services.get(uuid=processUuid(item))
val = Services.serviceToDict(k, perm, full=True)
return self.fillIntanceFields(k, val)
except Exception:
@ -131,7 +132,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()
@ -152,7 +153,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')
@ -210,7 +211,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.core.util import permissions
from uds.REST.model import ModelHandler
@ -186,7 +187,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'))
@ -198,7 +199,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']
@ -215,7 +216,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.models import TicketStore
from uds.core.util.model import processUuid
import datetime
import six
@ -127,7 +128,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:
@ -160,7 +161,7 @@ class Tickets(Handler):
transport = self._params.get('transport', None)
if servicePool is not None:
servicePool = DeployedService.objects.get(uuid=servicePool.lower())
servicePool = DeployedService.objects.get(uuid=processUuid(servicePool))
# If forced that servicePool must honor groups
if force:
@ -168,7 +169,7 @@ class Tickets(Handler):
servicePool.assignedGroups.add(auth.groups.get(uuid=addGrp))
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,12 +40,14 @@ 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
from uds.core.util import permissions
import logging
logger = logging.getLogger(__name__)
@ -98,7 +100,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()
@ -127,7 +129,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:
@ -135,7 +137,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()
@ -163,7 +165,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')
@ -186,7 +188,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:
@ -222,11 +224,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):
@ -254,11 +256,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):
@ -292,7 +294,7 @@ class Publications(DetailHandler):
self.accessDenied()
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

@ -41,6 +41,7 @@ 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 import permissions
from uds.core.util.model import processUuid
import fnmatch
import re
@ -347,7 +348,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

@ -41,6 +41,7 @@ from uds.core.managers import userServiceManager, cryptoManager
from uds.models import TicketStore
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 import OsDetector
from uds.models import Transport, Image
from uds.core.util import html
@ -83,7 +84,7 @@ def transportOwnLink(request, idService, idTransport):
@cache_page(3600, key_prefix='img')
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')
@ -92,13 +93,13 @@ def transportIcon(request, idTrans):
@cache_page(3600, 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')