mirror of
https://github.com/dkmstr/openuds.git
synced 2025-01-11 05:17:55 +03:00
* Added comm url as property
* Moved values from storage() to properties table * Added support for idle times to Windows & Linux OS Managers * Fixed configurations objects, so if get() is invoked before DB is accesible, returns default value and, later, will be executed "in fact"
This commit is contained in:
parent
d77a56f953
commit
8cf6815e8e
@ -141,6 +141,7 @@ class Actor(Handler):
|
|||||||
maxIdle = None
|
maxIdle = None
|
||||||
if service.deployed_service.osmanager is not None:
|
if service.deployed_service.osmanager is not None:
|
||||||
maxIdle = service.deployed_service.osmanager.getInstance().maxIdle()
|
maxIdle = service.deployed_service.osmanager.getInstance().maxIdle()
|
||||||
|
logger.debug('Max idle: {}'.format(maxIdle))
|
||||||
return Actor.result((service.uuid, service.unique_id, 0 if maxIdle is None else maxIdle))
|
return Actor.result((service.uuid, service.unique_id, 0 if maxIdle is None else maxIdle))
|
||||||
raise RequestError('Invalid request')
|
raise RequestError('Invalid request')
|
||||||
|
|
||||||
@ -169,8 +170,7 @@ class Actor(Handler):
|
|||||||
username = ''
|
username = ''
|
||||||
|
|
||||||
if message == 'notifyComms':
|
if message == 'notifyComms':
|
||||||
service.comms_url = data
|
service.setProperty('comms_url', data)
|
||||||
service.save()
|
|
||||||
return Actor.result('ok')
|
return Actor.result('ok')
|
||||||
|
|
||||||
# Preprocess some messages, common to all clients, such as "log"
|
# Preprocess some messages, common to all clients, such as "log"
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
from django.utils.translation import ugettext, ugettext_lazy as _
|
||||||
|
from django.conf import settings
|
||||||
from uds.models import OSManager
|
from uds.models import OSManager
|
||||||
|
|
||||||
from uds.REST import NotFound, RequestError
|
from uds.REST import NotFound, RequestError
|
||||||
@ -77,7 +78,7 @@ class OsManagers(ModelHandler):
|
|||||||
raise RequestError(ugettext('Can\'t delete an OSManager with deployed services associated'))
|
raise RequestError(ugettext('Can\'t delete an OSManager with deployed services associated'))
|
||||||
|
|
||||||
def checkSave(self, item):
|
def checkSave(self, item):
|
||||||
if item.deployedServices.count() > 0:
|
if item.deployedServices.count() > 0 and settings.DEBUG is False:
|
||||||
raise RequestError(ugettext('Can\'t modify an OSManager with deployed services associated'))
|
raise RequestError(ugettext('Can\'t modify an OSManager with deployed services associated'))
|
||||||
|
|
||||||
# Types related
|
# Types related
|
||||||
|
@ -45,6 +45,7 @@ CLUSTER_SECTION = 'Cluster'
|
|||||||
|
|
||||||
# For save when initialized
|
# For save when initialized
|
||||||
saveLater = []
|
saveLater = []
|
||||||
|
getLater = []
|
||||||
|
|
||||||
|
|
||||||
class Config(object):
|
class Config(object):
|
||||||
@ -74,9 +75,13 @@ class Config(object):
|
|||||||
def get(self, force=False):
|
def get(self, force=False):
|
||||||
# Ensures DB contains configuration values
|
# Ensures DB contains configuration values
|
||||||
# From Django 1.7, DB can only be accessed AFTER all apps are initialized, curious at least.. :)
|
# From Django 1.7, DB can only be accessed AFTER all apps are initialized, curious at least.. :)
|
||||||
if apps.ready is True and GlobalConfig.initDone is False:
|
if apps.ready is True:
|
||||||
logger.debug('Initializing configuration & updating db values')
|
if GlobalConfig.initDone is False:
|
||||||
GlobalConfig.initialize()
|
logger.debug('Initializing configuration & updating db values')
|
||||||
|
GlobalConfig.initialize()
|
||||||
|
else:
|
||||||
|
getLater.append(self)
|
||||||
|
return self._default
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if force or self._data is None:
|
if force or self._data is None:
|
||||||
@ -108,7 +113,7 @@ class Config(object):
|
|||||||
logger.error('Value for {0}.{1} is invalid (integer expected)'.format(self._section, self._key))
|
logger.error('Value for {0}.{1} is invalid (integer expected)'.format(self._section, self._key))
|
||||||
try:
|
try:
|
||||||
return int(self._default)
|
return int(self._default)
|
||||||
except:
|
except Exception:
|
||||||
logger.error('Default value for {0}.{1} is also invalid (integer expected)'.format(self._section, self._key))
|
logger.error('Default value for {0}.{1} is also invalid (integer expected)'.format(self._section, self._key))
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
@ -303,6 +308,12 @@ class GlobalConfig(object):
|
|||||||
if type(v) is Config._Value:
|
if type(v) is Config._Value:
|
||||||
v.get()
|
v.get()
|
||||||
|
|
||||||
|
for c in getLater:
|
||||||
|
logger.debug('Get later: {}'.format(c))
|
||||||
|
c.get()
|
||||||
|
|
||||||
|
getLater[:] = []
|
||||||
|
|
||||||
for c, v in saveLater:
|
for c, v in saveLater:
|
||||||
logger.debug('Saving delayed value: {}'.format(c))
|
logger.debug('Saving delayed value: {}'.format(c))
|
||||||
c.set(v)
|
c.set(v)
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('uds', '0004_auto_20140916_1217'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='userservice',
|
|
||||||
name='comms_url',
|
|
||||||
field=models.CharField(default=None, max_length=256, null=True, blank=True),
|
|
||||||
preserve_default=True,
|
|
||||||
),
|
|
||||||
]
|
|
@ -10,7 +10,6 @@ def add_parent_uuids(apps, schema_editor):
|
|||||||
'''
|
'''
|
||||||
model = apps.get_model("uds", 'User')
|
model = apps.get_model("uds", 'User')
|
||||||
for m in model.objects.all():
|
for m in model.objects.all():
|
||||||
print m
|
|
||||||
parent = int(m.parent)
|
parent = int(m.parent)
|
||||||
if parent != -1:
|
if parent != -1:
|
||||||
try:
|
try:
|
||||||
@ -44,7 +43,7 @@ def remove_parent_uuids(apps, schema_editor):
|
|||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('uds', '0005_userservice_comms_url'),
|
('uds', '0004_auto_20140916_1217'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
__updated__ = '2014-11-24'
|
__updated__ = '2014-12-02'
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import signals
|
from django.db.models import signals
|
||||||
@ -92,7 +92,7 @@ class UserService(UUIDModel):
|
|||||||
# "Secret" url used to communicate (send message) to services
|
# "Secret" url used to communicate (send message) to services
|
||||||
# if This is None, communication is not possible
|
# if This is None, communication is not possible
|
||||||
# The communication is done using POST via REST & Json
|
# The communication is done using POST via REST & Json
|
||||||
comms_url = models.CharField(max_length=256, default=None, null=True, blank=True)
|
# comms_url = models.CharField(max_length=256, default=None, null=True, blank=True)
|
||||||
|
|
||||||
# objects = LockingManager() This model is on an innoDb table, so we do not need the locking manager anymore
|
# objects = LockingManager() This model is on an innoDb table, so we do not need the locking manager anymore
|
||||||
|
|
||||||
@ -199,7 +199,8 @@ class UserService(UUIDModel):
|
|||||||
name: Name of the value to store
|
name: Name of the value to store
|
||||||
value: Value of the value to store
|
value: Value of the value to store
|
||||||
'''
|
'''
|
||||||
self.getEnvironment().storage().put(name, value)
|
# Store value as a property
|
||||||
|
self.setProperty(name, value)
|
||||||
|
|
||||||
def recoverValue(self, name):
|
def recoverValue(self, name):
|
||||||
'''
|
'''
|
||||||
@ -211,7 +212,13 @@ class UserService(UUIDModel):
|
|||||||
Returns:
|
Returns:
|
||||||
Stored value, None if no value was stored
|
Stored value, None if no value was stored
|
||||||
'''
|
'''
|
||||||
return self.getEnvironment().storage().get(name)
|
val = self.getProperty(name)
|
||||||
|
|
||||||
|
# To transition between old stor at storage table and new properties table
|
||||||
|
# If value is found on property, use it, else, try to recover it from storage
|
||||||
|
if val is None:
|
||||||
|
val = self.getEnvironment().storage().get(name)
|
||||||
|
return val
|
||||||
|
|
||||||
def setConnectionSource(self, ip, hostname=''):
|
def setConnectionSource(self, ip, hostname=''):
|
||||||
'''
|
'''
|
||||||
@ -403,13 +410,10 @@ class UserService(UUIDModel):
|
|||||||
res.append({'id': us.id, 'name': usi.getName(), 'transports': us.deployed_service.transports, 'service': us})
|
res.append({'id': us.id, 'name': usi.getName(), 'transports': us.deployed_service.transports, 'service': us})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return "User service {0}, cache_level {1}, user {2}, name {3}, state {4}:{5}".format(self.id, self.cache_level, self.user, self.friendly_name,
|
|
||||||
State.toString(self.state), State.toString(self.os_state))
|
|
||||||
|
|
||||||
def getProperty(self, propName, default=None):
|
def getProperty(self, propName, default=None):
|
||||||
try:
|
try:
|
||||||
return self.properties.get(name=propName).value
|
val = self.properties.get(name=propName).value
|
||||||
|
return val if val is not '' else default # Empty string is null
|
||||||
except Exception:
|
except Exception:
|
||||||
return default
|
return default
|
||||||
|
|
||||||
@ -418,6 +422,10 @@ class UserService(UUIDModel):
|
|||||||
prop.value = propValue
|
prop.value = propValue
|
||||||
prop.save()
|
prop.save()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "User service {0}, cache_level {1}, user {2}, name {3}, state {4}:{5}".format(self.id, self.cache_level, self.user, self.friendly_name,
|
||||||
|
State.toString(self.state), State.toString(self.os_state))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def beforeDelete(sender, **kwargs):
|
def beforeDelete(sender, **kwargs):
|
||||||
'''
|
'''
|
||||||
|
@ -63,7 +63,7 @@ class LinuxOsManager(osmanagers.OSManager):
|
|||||||
defvalue='keep')
|
defvalue='keep')
|
||||||
|
|
||||||
idle = gui.NumericField(label=_("Max.Idle time"), length=4, defvalue=-1, rdonly=False, order=11,
|
idle = gui.NumericField(label=_("Max.Idle time"), length=4, defvalue=-1, rdonly=False, order=11,
|
||||||
tooltip=_('Maximum idle time (in seconds) before session is automaticatlly closed to the user (<= 0 means no max idle time). Note that this value only applies to "removable" services'), required=True)
|
tooltip=_('Maximum idle time (in seconds) before session is automaticatlly closed to the user (<= 0 means no max idle time).'), required=True)
|
||||||
|
|
||||||
def __setProcessUnusedMachines(self):
|
def __setProcessUnusedMachines(self):
|
||||||
self.processUnusedMachines = self._onLogout == 'remove'
|
self.processUnusedMachines = self._onLogout == 'remove'
|
||||||
@ -188,7 +188,7 @@ class LinuxOsManager(osmanagers.OSManager):
|
|||||||
return State.RUNNING
|
return State.RUNNING
|
||||||
|
|
||||||
def maxIdle(self):
|
def maxIdle(self):
|
||||||
if self._onLogout == 'remove' or self._idle <= 0:
|
if self._idle <= 0:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self._idle
|
return self._idle
|
||||||
|
@ -56,7 +56,7 @@ class WindowsOsManager(osmanagers.OSManager):
|
|||||||
)
|
)
|
||||||
|
|
||||||
idle = gui.NumericField(label=_("Max.Idle time"), length=4, defvalue=-1, rdonly=False, order=11,
|
idle = gui.NumericField(label=_("Max.Idle time"), length=4, defvalue=-1, rdonly=False, order=11,
|
||||||
tooltip=_('Maximum idle time (in seconds) before session is automaticatlly closed to the user (<= 0 means no max idle time). Note that this value only applies to "removable" services'), required=True)
|
tooltip=_('Maximum idle time (in seconds) before session is automaticatlly closed to the user (<= 0 means no max idle time).'), required=True)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def validateLen(length):
|
def validateLen(length):
|
||||||
@ -112,7 +112,7 @@ class WindowsOsManager(osmanagers.OSManager):
|
|||||||
|
|
||||||
msg, level = data.split('\t')
|
msg, level = data.split('\t')
|
||||||
log.doLog(service, int(level), msg, origin)
|
log.doLog(service, int(level), msg, origin)
|
||||||
except:
|
except Exception:
|
||||||
log.doLog(service, log.ERROR, "do not understand {0}".format(data), origin)
|
log.doLog(service, log.ERROR, "do not understand {0}".format(data), origin)
|
||||||
|
|
||||||
def process(self, service, msg, data):
|
def process(self, service, msg, data):
|
||||||
@ -195,7 +195,7 @@ class WindowsOsManager(osmanagers.OSManager):
|
|||||||
return State.RUNNING
|
return State.RUNNING
|
||||||
|
|
||||||
def maxIdle(self):
|
def maxIdle(self):
|
||||||
if self._onLogout == 'remove' or self._idle <= 0:
|
if self._idle <= 0:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self._idle
|
return self._idle
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
from django.utils.translation import ugettext_noop as _
|
from django.utils.translation import ugettext_noop as _
|
||||||
from uds.core.osmanagers.OSManagersFactory import OSManagersFactory
|
from uds.core.osmanagers.OSManagersFactory import OSManagersFactory
|
||||||
from uds.core.managers.DownloadsManager import DownloadsManager
|
from uds.core.managers.DownloadsManager import DownloadsManager
|
||||||
from WindowsOsManager import WindowsOsManager
|
from .WindowsOsManager import WindowsOsManager
|
||||||
from WinDomainOsManager import WinDomainOsManager
|
from .WinDomainOsManager import WinDomainOsManager
|
||||||
from WinRandomPassOsManager import WinRandomPassManager
|
from .WinRandomPassOsManager import WinRandomPassManager
|
||||||
import os.path
|
import os.path
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user