diff --git a/actors/linux/buildrpm.sh b/actors/linux/buildrpm.sh
index 4447ea170..6cdc003a5 100755
--- a/actors/linux/buildrpm.sh
+++ b/actors/linux/buildrpm.sh
@@ -6,12 +6,12 @@ RELEASE=1
top=`pwd`
cat udsactor-template.spec |
- sed -e s/"version 1.7.0"/"version ${VERSION}"/g |
+ sed -e s/"version 0.0.0"/"version ${VERSION}"/g |
sed -e s/"release 1"/"release ${RELEASE}"/g > udsactor-$VERSION.spec
# Now fix dependencies for opensuse
cat udsactor-template.spec |
- sed -e s/"version 1.7.0"/"version ${VERSION}"/g |
+ sed -e s/"version 0.0.0"/"version ${VERSION}"/g |
sed -e s/"name udsactor"/"name udsactor-opensuse"/g |
sed -e s/"PyQt4"/"python-qt4"/g |
sed -e s/"libXScrnSaver"/"libXss1"/g > udsactor-opensuse-$VERSION.spec
diff --git a/actors/linux/udsactor-1.7.0.spec b/actors/linux/udsactor-1.7.0.spec
deleted file mode 100644
index cd45db3b1..000000000
--- a/actors/linux/udsactor-1.7.0.spec
+++ /dev/null
@@ -1,69 +0,0 @@
-%define _topdir %(echo $PWD)/rpm
-%define name udsactor
-%define version 1.7.0
-%define release 1
-%define buildroot %{_topdir}/%{name}-%{version}-%{release}-root
-
-BuildRoot: %{buildroot}
-Name: %{name}
-Version: %{version}
-Release: %{release}
-Summary: Actor for Universal Desktop Services (UDS) Broker
-License: BSD3
-Group: Admin
-Requires: python-six python-requests PyQt4 libXScrnSaver
-Vendor: Virtual Cable S.L.U.
-URL: http://www.udsenterprise.com
-Provides: udsactor
-
-%define _rpmdir ../
-%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
-
-
-%install
-curdir=`pwd`
-cd ../..
-make DESTDIR=$RPM_BUILD_ROOT DISTRO=rh install-udsactor
-cd $curdir
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-curdir=`pwd`
-cd ../..
-make DESTDIR=$RPM_BUILD_ROOT DISTRO=rh clean
-cd $curdir
-
-
-%post
-systemctl enable udsactor.service > /dev/null 2>&1
-
-%preun
-systemctl disable udsactor.service > /dev/null 2>&1
-systemctl stop udsactor.service > /dev/null 2>&1
-
-%postun
-# $1 == 0 on uninstall, == 1 on upgrade for preun and postun (just a reminder for me... :) )
-if [ $1 -eq 0 ]; then
- rm -rf /etc/udsactor
- rm /var/log/udsactor.log
-fi
-# And, posibly, the .pyc leaved behind on /usr/share/UDSActor
-rm -rf /usr/share/UDSActor > /dev/null 2>&1
-
-%description
-This package provides the required components to allow this machine to work on an environment managed by UDS Broker.
-
-%files
-%defattr(-,root,root)
-/etc/udsactor
-/etc/xdg/autostart/UDSActorTool.desktop
-/etc/init.d/udsactor
-/usr/bin/UDSActorTool-startup
-/usr/bin/udsactor
-/usr/bin/UDSActorTool
-/usr/sbin/UDSActorConfig
-/usr/sbin/UDSActorConfig-pkexec
-/usr/share/UDSActor/*
-/usr/share/applications/UDS_Actor_Configuration.desktop
-/usr/share/autostart/UDSActorTool.desktop
-/usr/share/polkit-1/actions/org.openuds.pkexec.UDSActorConfig.policy
diff --git a/actors/linux/udsactor-template.spec b/actors/linux/udsactor-template.spec
index cd45db3b1..22402cacd 100644
--- a/actors/linux/udsactor-template.spec
+++ b/actors/linux/udsactor-template.spec
@@ -1,6 +1,6 @@
%define _topdir %(echo $PWD)/rpm
%define name udsactor
-%define version 1.7.0
+%define version 0.0.0
%define release 1
%define buildroot %{_topdir}/%{name}-%{version}-%{release}-root
diff --git a/actors/linux/udsactor-xrdp-1.7.0.spec b/actors/linux/udsactor-xrdp-1.7.0.spec
deleted file mode 100644
index b07abb5f0..000000000
--- a/actors/linux/udsactor-xrdp-1.7.0.spec
+++ /dev/null
@@ -1,61 +0,0 @@
-%define _topdir %(echo $PWD)/rpm
-%define name udsactor-xrdp
-%define version 1.7.0
-%define release 1
-%define buildroot %{_topdir}/%{name}-%{version}-%{release}-root
-
-BuildRoot: %{buildroot}
-Name: %{name}
-Version: %{version}
-Release: %{release}
-Summary: Glue between UDS Actor and XRDP
-License: BSD3
-Group: Admin
-Requires: xrdp udsactor pam
-Vendor: Virtual Cable S.L.U.
-URL: http://www.udsenterprise.com
-Provides: udsactor-xrdp
-
-%define _rpmdir ../
-%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
-
-
-%install
-curdir=`pwd`
-cd ../..
-make DESTDIR=$RPM_BUILD_ROOT DISTRO=rh install-udsactor-xrdp
-cd $curdir
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-curdir=`pwd`
-cd ../..
-make DESTDIR=$RPM_BUILD_ROOT DISTRO=rh clean
-cd $curdir
-
-
-%post
-SESMANFILE=/etc/pam.d/xrdp-sesman
-TMPFILE=$(mktemp /tmp/sesman.XXXXX)
-grep -v uds $SESMANFILE > $TMPFILE
-echo >> $TMPFILE
-echo "# Added by udsactor-xrdp" >> $TMPFILE
-echo "session optional pam_exec.so /usr/bin/uds-sesman" >> $TMPFILE
-cp $TMPFILE $SESMANFILE
-rm $TMPFILE > /dev/null 2>&1
-
-%preun
-
-%postun
-SESMANFILE=/etc/pam.d/xrdp-sesman
-TMPFILE=$(mktemp /tmp/sesman.XXXXX)
-grep -v uds $SESMANFILE > $TMPFILE
-cp $TMPFILE $SESMANFILE
-rm $TMPFILE > /dev/null 2>&1
-
-%description
-This package provides the required components to allow this machine to work on an environment managed by UDS Broker.
-
-%files
-%defattr(-,root,root)
-/usr/bin/*
\ No newline at end of file
diff --git a/actors/src/UDSActorUser.py b/actors/src/UDSActorUser.py
index 7714fc576..fb55cf702 100644
--- a/actors/src/UDSActorUser.py
+++ b/actors/src/UDSActorUser.py
@@ -46,6 +46,7 @@ from udsactor import operations
from about_dialog_ui import Ui_UDSAboutDialog
from message_dialog_ui import Ui_UDSMessageDialog
from udsactor.scriptThread import ScriptExecutorThread
+from udsactor import VERSION
trayIcon = None
@@ -61,6 +62,7 @@ class UDSAboutDialog(QtGui.QDialog):
QtGui.QDialog.__init__(self, parent)
self.ui = Ui_UDSAboutDialog()
self.ui.setupUi(self)
+ self.ui.VersionLabel.setText("Version " + VERSION)
def closeDialog(self):
self.hide()
diff --git a/actors/src/udsactor/__init__.py b/actors/src/udsactor/__init__.py
index 7f1159979..ff599793c 100644
--- a/actors/src/udsactor/__init__.py
+++ b/actors/src/udsactor/__init__.py
@@ -31,17 +31,19 @@
'''
from __future__ import unicode_literals
-__title__ = 'udsactor'
-__version__ = '1.7.0'
-__build__ = 0x010700
-__author__ = 'Adolfo Gómez'
-__license__ = "BSD 3-clause"
-__copyright__ = "Copyright 2014 VirtualCable S.L.U."
-
-
# On centos, old six release does not includes byte2int, nor six.PY2
import six
+VERSION = '1.7.5'
+
+__title__ = 'udsactor'
+__version__ = VERSION
+__build__ = 0x010750
+__author__ = 'Adolfo Gómez'
+__license__ = "BSD 3-clause"
+__copyright__ = "Copyright 2014-205 VirtualCable S.L.U."
+
+
if not hasattr(six, 'byte2int'):
if six.PY3:
import operator
diff --git a/server/src/uds/REST/methods/client.py b/server/src/uds/REST/methods/client.py
index 8e21a640f..5e638ff00 100644
--- a/server/src/uds/REST/methods/client.py
+++ b/server/src/uds/REST/methods/client.py
@@ -42,7 +42,7 @@ from uds.models import User
from uds.web import errors
from uds.web.views.service import getService
from uds.core.managers import cryptoManager
-
+from uds.core.util.Config import GlobalConfig
import six
@@ -89,7 +89,7 @@ class Client(Handler):
'''
logger.debug("Client args for GET: {0}".format(self._args))
- if len(self._args) == 0:
+ if len(self._args) == 0: # Gets version
url = self._request.build_absolute_uri(reverse('ClientDownload'))
return Client.result({
'availableVersion': CLIENT_VERSION,
@@ -97,14 +97,23 @@ class Client(Handler):
'downloadUrl': url
})
- if len(self._args) == 1:
+ if len(self._args) == 1: # Simple test
return Client.result(_('Correct'))
try:
- ticket, scrambler = self._args
+ ticket, scrambler = self._args # If more than 2 args, got an error
+ hostname = self._params['hostname'] # Or if hostname is not included...
+ srcIp = self._request.ip
+
+ # Ip is optional,
+ if GlobalConfig.HONOR_CLIENT_IP_NOTIFY.getBool() is True:
+ srcIp = self._params.get('ip', srcIp)
+
except Exception:
raise RequestError('Invalid request')
+ logger.debug('Got Ticket: {}, scrambled: {}, Hostname: {}, Ip: {}'.format(ticket, scrambler, hostname, srcIp))
+
try:
data = TicketStore.get(ticket)
except Exception:
@@ -120,6 +129,8 @@ class Client(Handler):
ip, userService, userServiceInstance, transport, transportInstance = res
password = cryptoManager().xor(data['password'], scrambler).decode('utf-8')
+ userService.setConnectionSource(srcIp, hostname) # Store where we are accessing from so we can notify Service
+
transportScript = transportInstance.getUDSTransportScript(userService, transport, ip, self._request.os, self._request.user, password, self._request)
logger.debug('Script:\n{}'.format(transportScript))
diff --git a/server/src/uds/REST/methods/tickets.py b/server/src/uds/REST/methods/tickets.py
index 1f1858fae..aaf22cef9 100644
--- a/server/src/uds/REST/methods/tickets.py
+++ b/server/src/uds/REST/methods/tickets.py
@@ -37,8 +37,7 @@ from uds.REST import RequestError
from uds.models import Authenticator
from uds.models import DeployedService
from uds.models import Transport
-from uds.core.util.Ticket import Ticket
-
+from uds.models import TicketStore
import datetime
import six
@@ -132,12 +131,11 @@ class Tickets(Handler):
time = 60 if time < 1 else time
realname = self._params.get('realname', self._params['username'])
servicePool = self._params.get('servicePool', None)
- transport = None
+ transport = self._params.get('transport', None)
if servicePool is not None:
servicePool = DeployedService.objects.get(uuid=servicePool.lower())
- transport = self._params.get('transport', None)
if transport is not None:
transport = Transport.objects.get(uuid=transport.lower())
try:
@@ -163,16 +161,16 @@ class Tickets(Handler):
except Exception as e:
return Tickets.result(error=six.text_type(e))
- data = {}
- data['username'] = username
- data['password'] = password
- data['realname'] = realname
- data['groups'] = groups
- data['auth'] = auth.uuid
- data['servicePool'] = servicePool
- data['transport'] = transport
+ data = {
+ 'username': username,
+ 'password': password,
+ 'realname': realname,
+ 'groups': groups,
+ 'auth': auth.uuid,
+ 'servicePool': servicePool,
+ 'transport': transport,
+ }
- ticket = Ticket()
- ticket.save(data, time)
+ ticket = TicketStore.create(data)
- return Tickets.result(ticket.key)
+ return Tickets.result(ticket)
diff --git a/server/src/uds/admin/views/reporting/users.py b/server/src/uds/admin/views/reporting/users.py
index b1cff753d..064a1683d 100644
--- a/server/src/uds/admin/views/reporting/users.py
+++ b/server/src/uds/admin/views/reporting/users.py
@@ -55,7 +55,7 @@ import logging
logger = logging.getLogger(__name__)
-class TestReport(Report):
+class UsersReport(Report):
title = 'Test report'
author = 'UDS Enterprise'
@@ -79,6 +79,7 @@ class TestReport(Report):
elements = [
SystemField(expression='%(report_title)s', top=0.1 * cm, left=0, width=BAND_WIDTH,
style={'fontName': 'Helvetica-Bold', 'fontSize': 14, 'alignment': TA_CENTER}),
+
Label(text="User ID", top=0.8 * cm, left=0.5 * cm),
Label(text="Real Name", top=0.8 * cm, left=3 * cm),
Label(text="Last access", top=0.8 * cm, left=7 * cm),
@@ -102,9 +103,11 @@ class TestReport(Report):
def users(request, idAuth):
resp = HttpResponse(content_type='application/pdf')
- users = Authenticator.objects.get(uuid=idAuth).users.order_by('name')
+ auth = Authenticator.objects.get(uuid=idAuth)
+ users = auth.users.order_by('name')
- report = TestReport(queryset=users)
+ report = UsersReport(queryset=users)
+ report.title = _('Users List for {}').format(auth.name)
report.generate_by(PDFGenerator, filename=resp)
return resp
# return HttpResponse(pdf, content_type='application/pdf')
diff --git a/server/src/uds/templates/uds/html5/show_transport.html b/server/src/uds/templates/uds/html5/show_transport.html
deleted file mode 100644
index dd6398c20..000000000
--- a/server/src/uds/templates/uds/html5/show_transport.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends "uds/html5/templates/base.html" %}
-{% load i18n static %}
-
-{% block body %}
-
-
-{% endblock %}
diff --git a/server/src/uds/templates/uds/html5/simpleLauncher.html b/server/src/uds/templates/uds/html5/simpleLauncher.html
new file mode 100644
index 000000000..5197a8453
--- /dev/null
+++ b/server/src/uds/templates/uds/html5/simpleLauncher.html
@@ -0,0 +1,35 @@
+{% extends "uds/html5/templates/base.html" %}
+{% load i18n html5 static %}
+
+{% block title %}{% trans 'Service launcher' %}{% endblock %}
+
+{% block body %}
+
+
{% trans 'Service launcher' %}
+
+
{% trans 'The service you have requested is being launched.' %}
+
+
{% trans 'If the service does not launchs automatically, probably you dont have the UDS plugin installed' %}
+
+
+{% endblock %}
+
+
+{% block js %}
+
+{% endblock %}
diff --git a/server/src/uds/urls.py b/server/src/uds/urls.py
index 59a259169..b5d640977 100644
--- a/server/src/uds/urls.py
+++ b/server/src/uds/urls.py
@@ -30,22 +30,21 @@
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
+from django.conf.urls import patterns, include, url
+from uds.core.util.modfinder import loadModulesUrls
+from uds import REST
+
js_info_dict = {
'domain': 'djangojs',
'packages': ('uds',),
}
-from django.conf.urls import patterns, include, url
-from uds.core.util.modfinder import loadModulesUrls
-from uds import REST
-
urlpatterns = patterns(
'uds',
url(r'^$', 'web.views.index', name='Index'),
(r'^login/$', 'web.views.login'),
(r'^login/(?P.+)$', 'web.views.login'),
(r'^logout$', 'web.views.logout'),
- (r'^service/(?P.+)/(?P.+)$', 'web.views.service'),
# Icons
(r'^transicon/(?P.+)$', 'web.views.transportIcon'),
# Images
@@ -55,9 +54,7 @@ urlpatterns = patterns(
# Transport component url
url(r'^transcomp/(?P.+)/(?P.+)$', 'web.views.transcomp', name='TransportComponent'),
# Transport own link processor
- url(r'^trans/(?P.+)/(?P.+)$', 'web.views.trans', name='TransportOwnLink'),
- # Service notification url
- (r'^sernotify/(?P.+)/(?P.+)$', 'web.views.sernotify'),
+ url(r'^trans/(?P.+)/(?P.+)$', 'web.views.transportOwnLink', name='TransportOwnLink'),
# Authenticators custom html
(r'^customAuth/(?P.*)$', 'web.views.customAuth'),
# Preferences
diff --git a/server/src/uds/web/views/__init__.py b/server/src/uds/web/views/__init__.py
index 22ed8121b..f4a3e0dde 100644
--- a/server/src/uds/web/views/__init__.py
+++ b/server/src/uds/web/views/__init__.py
@@ -30,18 +30,18 @@
'''
from __future__ import unicode_literals
-__updated__ = '2015-03-27'
-
import logging
-logger = logging.getLogger(__name__)
-
from .login import login, logout, customAuth
from .index import index, about
from .prefs import prefs
-from .service import service, trans, transcomp, sernotify, transportIcon, serviceImage, clientEnabler
+from .service import transportOwnLink, transcomp, transportIcon, serviceImage, clientEnabler
from .auth import authCallback, authInfo, ticketAuth
from .download import download
from .client_download import client_downloads, plugin_detection
from .js import jsCatalog
from ..errors import error
+
+__updated__ = '2015-04-26'
+
+logger = logging.getLogger(__name__)
diff --git a/server/src/uds/web/views/auth.py b/server/src/uds/web/views/auth.py
index da1067b05..367d2835c 100644
--- a/server/src/uds/web/views/auth.py
+++ b/server/src/uds/web/views/auth.py
@@ -30,30 +30,35 @@
'''
from __future__ import unicode_literals
-__updated__ = '2015-03-27'
+__updated__ = '2015-04-26'
+from django.utils.translation import ugettext as _
from django.http import HttpResponse, HttpResponseRedirect, HttpResponsePermanentRedirect
from django.views.decorators.csrf import csrf_exempt
-from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
from django.views.decorators.cache import never_cache
+from django.shortcuts import render_to_response
+from django.template import RequestContext
from uds.core.auths.auth import webLogin, webLogout, authenticateViaCallback, authLogLogin, getUDSCookie
from uds.models import Authenticator, DeployedService, Transport
+from uds.core.util import html
from uds.core.util import OsDetector
-from uds.core.util.Ticket import Ticket
from uds.core.util.State import State
+from uds.core.ui import theme
+
+from uds.models import TicketStore
+
from uds.core.auths.Exceptions import InvalidUserException
from uds.core.services.Exceptions import InvalidServiceException, ServiceInMaintenanceMode
import uds.web.errors as errors
+from uds.web.views.service import getService
import logging
logger = logging.getLogger(__name__)
-from .service import service
-
@csrf_exempt
def authCallback(request, authName):
@@ -136,27 +141,22 @@ def ticketAuth(request, ticketId):
'''
Used to authenticate an user via a ticket
'''
- ticket = Ticket(ticketId)
-
- logger.debug('Ticket: {}'.format(ticket))
+ data = TicketStore.get(ticketId)
try:
try:
# Extract ticket.data from ticket.data storage, and remove it if success
- username = ticket.data['username']
- groups = ticket.data['groups']
- auth = ticket.data['auth']
- realname = ticket.data['realname']
- servicePool = ticket.data['servicePool']
- password = ticket.data['password']
- transport = ticket.data['transport']
- except:
+ username = data['username']
+ groups = data['groups']
+ auth = data['auth']
+ realname = data['realname']
+ servicePool = data['servicePool']
+ password = data['password']
+ transport = data['transport']
+ except Exception:
logger.error('Ticket stored is not valid')
raise InvalidUserException()
- # Remove ticket
- ticket.delete()
-
auth = Authenticator.objects.get(uuid=auth)
# If user does not exists in DB, create it right now
# Add user to groups, if they exists...
@@ -165,7 +165,7 @@ def ticketAuth(request, ticketId):
try:
grps.append(auth.groups.get(uuid=g))
except Exception:
- logger.debug('Group list has changed since ticket assignement')
+ logger.debug('Group list has changed since ticket assignment')
if len(grps) == 0:
logger.error('Ticket has no valid groups')
@@ -186,15 +186,25 @@ def ticketAuth(request, ticketId):
# Check if servicePool is part of the ticket
if servicePool is not None:
- servicePool = DeployedService.objects.get(uuid=servicePool)
- # Check if service pool can't be accessed by groups
- servicePool.validateUser(usr)
- if servicePool.isInMaintenance():
- raise ServiceInMaintenanceMode()
+ # If service pool is in there, also is transport
+ res = getService(request, servicePool, transport)
+ if res is None:
+ return render_to_response(theme.template('service_not_ready.html'), context_instance=RequestContext(request))
- transport = Transport.objects.get(uuid=transport)
+ ip, userService, userServiceInstance, transport, transportInstance = res
- response = service(request, 'F' + servicePool.uuid, transport.uuid) # 'A' Indicates 'assigned service'
+ if transportInstance.ownLink is True:
+ link = reverse('TransportOwnLink', args=('F' + userServiceInstance.uuid, transportInstance.uuid))
+ else:
+ link = html.udsAccessLink(request, 'F' + userService.uuid, transport.uuid)
+
+ return render_to_response(
+ theme.template('simpleLauncher.html'),
+ {
+ 'link': link
+ },
+ context_instance=RequestContext(request)
+ )
else:
response = HttpResponsePermanentRedirect(reverse('uds.web.views.index'))
diff --git a/server/src/uds/web/views/index.py b/server/src/uds/web/views/index.py
index 34c9f7e0e..dd6a3be97 100644
--- a/server/src/uds/web/views/index.py
+++ b/server/src/uds/web/views/index.py
@@ -34,20 +34,17 @@ __updated__ = '2015-04-24'
from django.shortcuts import render_to_response
from django.shortcuts import render
-from django.shortcuts import redirect
from django.core.urlresolvers import reverse
from django.template import RequestContext
-from uds.core.auths.auth import webLoginRequired, webPassword
+from uds.core.auths.auth import webLoginRequired
-from uds.models import DeployedService, Transport, UserService, Network, TicketStore
+from uds.models import DeployedService, Transport, UserService, Network
from uds.core.util.Config import GlobalConfig
-from uds.core.util import OsDetector
from uds.core.util import html
from uds.core.ui import theme
from uds.core.managers.UserServiceManager import UserServiceManager
-from uds.core.managers import cryptoManager
import logging
@@ -173,7 +170,7 @@ def index(request):
services = sorted(services, key=lambda s: s['name'].upper())
autorun = False
- if len(services) == 1 and GlobalConfig.AUTORUN_SERVICE.get(True) == '1' and len(services[0]['transports']) > 0:
+ if len(services) == 1 and GlobalConfig.AUTORUN_SERVICE.getBool(True) and len(services[0]['transports']) > 0:
if request.session.get('autorunDone', '0') == '0':
request.session['autorunDone'] = '1'
autorun = True
diff --git a/server/src/uds/web/views/service.py b/server/src/uds/web/views/service.py
index b8a69bc0a..d50b031dd 100644
--- a/server/src/uds/web/views/service.py
+++ b/server/src/uds/web/views/service.py
@@ -30,8 +30,6 @@
'''
from __future__ import unicode_literals
-__updated__ = '2015-04-16'
-
from django.utils.translation import ugettext as _
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
@@ -59,7 +57,7 @@ import logging
logger = logging.getLogger(__name__)
-__updated__ = '2015-02-22'
+__updated__ = '2015-04-26'
def getService(request, idService, idTransport, doTest=True):
@@ -68,24 +66,24 @@ def getService(request, idService, idTransport, doTest=True):
logger.debug('Kind of service: {0}, idService: {1}'.format(kind, idService))
if kind == 'A': # This is an assigned service
logger.debug('Getting A service {}'.format(idService))
- ads = UserService.objects.get(uuid=idService)
- ads.deployed_service.validateUser(request.user)
+ userService = UserService.objects.get(uuid=idService)
+ userService.deployed_service.validateUser(request.user)
else:
ds = DeployedService.objects.get(uuid=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)
# Now we have to locate an instance of the service, so we can assign it to user.
- ads = UserServiceManager.manager().getAssignationForUser(ds, request.user)
+ userService = UserServiceManager.manager().getAssignationForUser(ds, request.user)
- if ads.isInMaintenance() is True:
+ if userService.isInMaintenance() is True:
raise ServiceInMaintenanceMode()
- logger.debug('Found service: {0}'.format(ads))
+ logger.debug('Found service: {0}'.format(userService))
trans = Transport.objects.get(uuid=idTransport)
# Ensures that the transport is allowed for this service
- if trans not in ads.deployed_service.transports.all():
+ if trans not in userService.deployed_service.transports.all():
raise InvalidServiceException()
# If transport is not available for the request IP...
@@ -93,57 +91,41 @@ def getService(request, idService, idTransport, doTest=True):
raise InvalidServiceException()
if doTest is False:
- return (None, ads, None, trans, None)
+ return (None, userService, None, trans, None)
# Test if the service is ready
- if ads.isReady():
- log.doLog(ads, log.INFO, "User {0} from {1} has initiated access".format(request.user.name, request.ip), log.WEB)
+ if userService.isReady():
+ log.doLog(userService, log.INFO, "User {0} from {1} has initiated access".format(request.user.name, request.ip), log.WEB)
# If ready, show transport for this service, if also ready ofc
- iads = ads.getInstance()
+ iads = userService.getInstance()
ip = iads.getIp()
- events.addEvent(ads.deployed_service, events.ET_ACCESS, username=request.user.name, srcip=request.ip, dstip=ip, uniqueid=ads.unique_id)
+ events.addEvent(userService.deployed_service, events.ET_ACCESS, username=request.user.name, srcip=request.ip, dstip=ip, uniqueid=userService.unique_id)
if ip is not None:
itrans = trans.getInstance()
if itrans.isAvailableFor(ip):
- ads.setConnectionSource(request.ip, 'unknown')
- log.doLog(ads, log.INFO, "User service ready", log.WEB)
- UserServiceManager.manager().notifyPreconnect(ads, itrans.processedUser(ads, request.user), itrans.protocol)
- return (ip, ads, iads, trans, itrans)
+ userService.setConnectionSource(request.ip, 'unknown')
+ log.doLog(userService, log.INFO, "User service ready", log.WEB)
+ UserServiceManager.manager().notifyPreconnect(userService, itrans.processedUser(userService, request.user), itrans.protocol)
+ return (ip, userService, iads, trans, itrans)
else:
- log.doLog(ads, log.WARN, "User service is not accessible (ip {0})".format(ip), log.TRANSPORT)
- logger.debug('Transport is not ready for user service {0}'.format(ads))
+ log.doLog(userService, log.WARN, "User service is not accessible (ip {0})".format(ip), log.TRANSPORT)
+ logger.debug('Transport is not ready for user service {0}'.format(userService))
else:
- logger.debug('Ip not available from user service {0}'.format(ads))
+ logger.debug('Ip not available from user service {0}'.format(userService))
else:
- log.doLog(ads, log.WARN, "User {0} from {1} tried to access, but machine was not ready".format(request.user.name, request.ip), log.WEB)
+ log.doLog(userService, log.WARN, "User {0} from {1} tried to access, but machine was not ready".format(request.user.name, request.ip), log.WEB)
return None
@webLoginRequired(admin=False)
-def service(request, idService, idTransport):
+def transportOwnLink(request, idService, idTransport):
try:
res = getService(request, idService, idTransport)
if res is not None:
- ip, ads, iads, trans, itrans = res
-
- transportHtml = itrans.renderAsHtml(ads, trans, ip, request)
- return render_to_response(theme.template('show_transport.html'), {'transport': transportHtml, 'nolang': True}, context_instance=RequestContext(request))
- except Exception, e:
- logger.exception("Exception")
- return errors.exceptionView(request, e)
-
- # Not ready, show message and return to this page in a while
- return render_to_response(theme.template('service_not_ready.html'), context_instance=RequestContext(request))
-
-
-@webLoginRequired(admin=False)
-def trans(request, idService, idTransport):
- try:
- res = getService(request, idService, idTransport)
- if res is not None:
- ip, ads, iads, trans, itrans = res
- return itrans.getLink(ads, trans, ip, request.os, request.user, webPassword(request), request)
+ ip, userService, iads, trans, itrans = res
+ # This returns a response object in fact
+ return itrans.getLink(userService, trans, ip, request.os, request.user, webPassword(request), request)
except Exception, e:
logger.exception("Exception")
return errors.exceptionView(request, e)
@@ -165,35 +147,6 @@ def transcomp(request, idTransport, componentId):
return errors.exceptionView(request, e)
-@webLoginRequired(admin=False)
-def sernotify(request, idUserService, notification):
- try:
- if notification == 'hostname':
- hostname = request.GET.get('hostname', None)[:64] # Cuts host name to 64 chars
- ip = request.ip
-
- if GlobalConfig.HONOR_CLIENT_IP_NOTIFY.getBool(True) is True:
- ip = request.GET.get('ip', ip)
-
- if ip is not None and hostname is not None:
- us = UserService.objects.get(uuid=idUserService)
- us.setConnectionSource(ip, hostname)
- else:
- return HttpResponse('Invalid request!', 'text/plain')
- elif notification == "log":
- 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)
- log.doLog(us, level, message, log.TRANSPORT)
- else:
- return HttpResponse('Invalid request!', 'text/plain')
- except Exception as e:
- logger.exception("Exception")
- return errors.errorView(request, e)
- return HttpResponse('ok', content_type='text/plain')
-
-
def transportIcon(request, idTrans):
try:
icon = Transport.objects.get(uuid=idTrans).getInstance().icon(False)
@@ -232,10 +185,10 @@ def clientEnabler(request, idService, idTransport):
scrambler = cryptoManager().randomString(32)
password = cryptoManager().xor(webPassword(request), scrambler)
- _x, ads, _x, trans, _x = res
+ _x, userService, _x, trans, _x = res
data = {
- 'service': 'A' + ads.uuid,
+ 'service': 'A' + userService.uuid,
'transport': trans.uuid,
'user': request.user.uuid,
'password': password