def auto_select_workspace(request, mode=None): if settings.ALLOW_ANONYMOUS_ACCESS is False and request.user.is_authenticated() is False: return redirect_to_login(request.get_full_path()) if request.user.is_authenticated(): url = urlresolvers.reverse('wirecloud.workspace_view', kwargs={ 'owner': 'wirecloud', 'name': 'home' }) parameters = {} if mode: parameters['mode'] = mode if 'theme' in request.GET: parameters['theme'] = request.GET['theme'] if len(parameters) > 0: url += '?' + urlencode(parameters) return HttpResponseRedirect(url) else: context = { 'THEME': get_active_theme_name(), 'VIEW_MODE': 'classic', 'WIRECLOUD_VERSION_HASH': get_version_hash() } return render(request, 'wirecloud/landing_page.html', context=context, content_type="application/xhtml+xml; charset=UTF-8")
def auto_select_workspace(request, mode=None): if settings.ALLOW_ANONYMOUS_ACCESS is False and request.user.is_authenticated() is False: return redirect_to_login(request.get_full_path()) _junk1, active_workspace = get_workspace_list(request.user) if active_workspace is not None: url = urlresolvers.reverse('wirecloud.workspace_view', kwargs={ 'owner': active_workspace.workspace.creator.username, 'name': active_workspace.workspace.name, }) if mode: url += '?' + urlencode({'mode': mode}) return HttpResponseRedirect(url) elif request.user.is_authenticated(): return render_wirecloud(request, mode) else: context = { 'THEME': get_active_theme_name(), 'VIEW_MODE': 'classic', 'WIRECLOUD_VERSION_HASH': get_version_hash() } context = RequestContext(request, context) return render(request, 'wirecloud/landing_page.html', context_instance=context, content_type="application/xhtml+xml; charset=UTF-8")
def render_wirecloud(request, view_type=None, title=None, description=None): if view_type is None: if 'mode' in request.GET: view_type = request.GET['mode'] else: view_type = get_default_view(request) theme = request.GET.get('theme', get_active_theme_name()) if theme not in get_available_themes(): return remove_query_parameter(request, 'theme') context = { 'title': title, 'description': description, 'THEME': theme, 'VIEW_MODE': view_type, 'WIRECLOUD_VERSION_HASH': get_version_hash() } try: return render(request, theme + ':wirecloud/views/%s.html' % view_type, context=context, content_type="application/xhtml+xml; charset=UTF-8") except TemplateDoesNotExist: if 'mode' in request.GET: return remove_query_parameter(request, 'mode') else: view_type = get_default_view(request) return render_wirecloud(request, view_type, title, description)
def render_wirecloud(request, view_type=None): if view_type is None: if 'mode' in request.GET: view_type = request.GET['mode'] else: view_type = get_default_view(request) theme = request.GET.get('theme', get_active_theme_name()) if theme not in get_available_themes(): return remove_query_parameter(request, 'theme') try: template = get_template(theme + ':wirecloud/views/%s.html' % view_type) except TemplateDoesNotExist: if 'mode' in request.GET: return remove_query_parameter(request, 'mode') else: view_type = get_default_view(request) return render_wirecloud(request, view_type) context = { 'THEME': theme, 'VIEW_MODE': view_type, 'WIRECLOUD_VERSION_HASH': get_version_hash() } content = template.render(RequestContext(request, context)) return HttpResponse(content, content_type="application/xhtml+xml; charset=UTF-8")
def version_entry(request): # git hash and release_date is only available on released versions # but we can retrieve it using get_git_info if not hasattr(wirecloud.platform, "__git_hash__"): wirecloud.platform.__git_hash__, wirecloud.platform.__release_date__, wirecloud.platform.__git_dirty__ = get_git_info( ) td = datetime.now() - START_TIME info = { "version": wirecloud.platform.__version__, "uptime": "%d d, %d h, %d m, %d s" % (td.days, td.seconds // 3600, (td.seconds // 60) % 60, td.seconds % 60), "version_hash": get_version_hash(), "doc": "http://fiware.github.io/apps.Wirecloud/restapi/v2.2/", "git_hash": wirecloud.platform.__git_hash__, "git_dirty": wirecloud.platform.__git_dirty__, "release_date": wirecloud.platform.__release_date__, } return HttpResponse(json.dumps(info), content_type='application/json; charset=UTF-8')
def get_widget_api_files(request): from wirecloud.platform.core.plugins import get_version_hash key = 'widget_api_files/%s?v=%s' % (get_current_domain(request), get_version_hash()) widget_api_files = cache.get(key) if widget_api_files is None or settings.DEBUG is True: code = '''{% load compress %}{% load static from staticfiles %}{% compress js %} <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPIBootstrap.js" %}"></script> <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudWidgetAPI.js" %}"></script> <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPICommon.js" %}"></script> {% endcompress %}''' result = Template(code).render(Context()) doc = etree.parse( BytesIO(('<files>' + result + '</files>').encode('utf-8')), etree.XMLParser()) files = [script.get('src') for script in doc.getroot()] files.reverse() widget_api_files = tuple([ get_absolute_static_url(file, request=request, versioned=True) for file in files ]) cache.set(key, widget_api_files) return list(widget_api_files)
def auto_select_workspace(request, mode=None): if settings.ALLOW_ANONYMOUS_ACCESS is False and request.user.is_authenticated( ) is False: return redirect_to_login(request.get_full_path()) if request.user.is_authenticated(): url = urlresolvers.reverse('wirecloud.workspace_view', kwargs={ 'owner': 'wirecloud', 'name': 'home' }) parameters = {} if mode: parameters['mode'] = mode if 'theme' in request.GET: parameters['theme'] = request.GET['theme'] if len(parameters) > 0: url += '?' + urlencode(parameters) return HttpResponseRedirect(url) else: context = { 'THEME': get_active_theme_name(), 'VIEW_MODE': 'classic', 'WIRECLOUD_VERSION_HASH': get_version_hash() } return render(request, 'wirecloud/landing_page.html', context=context, content_type="application/xhtml+xml; charset=UTF-8")
def render_wirecloud(request, view_type=None): if view_type is None: if 'mode' in request.GET: view_type = request.GET['mode'] else: view_type = get_default_view(request) try: return render(request, 'wirecloud/views/%s.html' % view_type, { 'VIEW_MODE': view_type, 'WIRECLOUD_VERSION_HASH': get_version_hash() }, content_type="application/xhtml+xml; charset=UTF-8") except TemplateDoesNotExist: if 'mode' in request.GET: url = urlparse(request.build_absolute_uri()) query_params = parse_qs(url.query, True) del query_params['mode'] return HttpResponseRedirect( urlunparse((url.scheme, url.netloc, url.path, url.params, urlencode(query_params, True), url.fragment))) else: view_type = get_default_view(request) return render_wirecloud(request, view_type)
def render_wirecloud(request, view_type=None): if view_type is None: if 'mode' in request.GET: view_type = request.GET['mode'] else: view_type = get_default_view(request) theme = request.GET.get('theme', get_active_theme_name()) if theme not in get_available_themes(): return remove_query_parameter(request, 'theme') context = { 'THEME': theme, 'VIEW_MODE': view_type, 'WIRECLOUD_VERSION_HASH': get_version_hash() } try: return render(request, theme + ':wirecloud/views/%s.html' % view_type, context=context, content_type="application/xhtml+xml; charset=UTF-8") except TemplateDoesNotExist: if 'mode' in request.GET: return remove_query_parameter(request, 'mode') else: view_type = get_default_view(request) return render_wirecloud(request, view_type)
def test_get_absolute_static_url_versioned(self, get_current_domain, get_current_scheme): request = self._prepare_request_mock() get_current_scheme.return_value = "http" get_current_domain.return_value = "dashboards.example.org" self.assertEqual( get_absolute_static_url("/path", request=request, versioned=True), 'http://dashboards.example.org/path?v=' + get_version_hash()) get_current_scheme.assert_called_once_with(request) get_current_domain.assert_called_once_with(request)
def get_absolute_static_url(url, request=None, versioned=False): from django.conf import settings scheme = get_current_scheme() base = urljoin(scheme + '://' + get_current_domain(request), settings.STATIC_URL) if versioned: from wirecloud.platform.core.plugins import get_version_hash url += '?v=' + get_version_hash() return urljoin(base, url)
def get_urls(self): if IDM_SUPPORT_ENABLED: from wirecloud.fiware.views import oauth_discovery return (url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())(oauth_discovery), name='oauth.discovery'), ) else: return ()
def get_urls(self): urls = (url(r'^api/marketAdaptor/', include('wirecloud.fiware.marketAdaptor.urls')), ) if IDM_SUPPORT_ENABLED: from wirecloud.fiware.views import oauth_discovery urls += (url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())(oauth_discovery), name='oauth.discovery'), ) return urls
def version_entry(request): # git hash and release_date is only available on released versions # but we can retrieve it using get_git_info if not hasattr(wirecloud.platform, "__git_hash__"): wirecloud.platform.__git_hash__, wirecloud.platform.__release_date__, wirecloud.platform.__git_dirty__ = get_git_info() td = datetime.now() - START_TIME info = { "version": wirecloud.platform.__version__, "uptime": "%d d, %d h, %d m, %d s" % (td.days, td.seconds // 3600, (td.seconds // 60) % 60, td.seconds % 60), "version_hash": get_version_hash(), "doc": "https://wirecloud.github.io/wirecloud/restapi/v%s/" % wirecloud.platform.__application_mashup_version__, "userDoc": "https://wirecloud.readthedocs.io/en/%s/" % wirecloud.platform.__version__, "git_hash": wirecloud.platform.__git_hash__, "git_dirty": wirecloud.platform.__git_dirty__, "release_date": wirecloud.platform.__release_date__, } return HttpResponse(json.dumps(info), content_type='application/json; charset=UTF-8')
def get_widget_api_files(request): from wirecloud.platform.core.plugins import get_version_hash key = 'widget_api_files/%s?v=%s' % (get_current_domain(request), get_version_hash()) widget_api_files = cache.get(key) if widget_api_files is None or settings.DEBUG is True: code = '''{% load compress %}{% load static from staticfiles %}{% compress js %} <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPIBootstrap.js" %}"></script> <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudWidgetAPI.js" %}"></script> <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPICommon.js" %}"></script> {% endcompress %}''' result = Template(code).render(Context({})) doc = etree.parse(BytesIO(('<files>' + result + '</files>').encode('utf-8')), etree.XMLParser()) files = [script.get('src') for script in doc.getroot()] files.reverse() widget_api_files = tuple([get_absolute_static_url(file, request=request, versioned=True) for file in files]) cache.set(key, widget_api_files) return list(widget_api_files)
from user_agents import parse as ua_parse import six from wirecloud.commons.utils.cache import patch_cache_headers from wirecloud.commons.utils.http import build_error_response from wirecloud.platform.core.plugins import get_version_hash from wirecloud.platform.plugins import get_active_features_info, get_plugins from wirecloud.platform.models import Workspace from wirecloud.platform.themes import get_active_theme_name, get_available_themes from wirecloud.platform.workspace.utils import get_workspace_list LANGUAGE_QUERY_PARAMETER = 'language' @cache_page(60 * 60 * 24, key_prefix='wirecloud-features-%s' % get_version_hash()) @require_safe def feature_collection(request): features = get_active_features_info() response = HttpResponse(json.dumps(features, sort_keys=True), content_type='application/json; charset=UTF-8') return patch_cache_headers(response) def resolve_url(to, *args, **kwargs): # pragma: no cover """ Return a URL appropriate for the arguments passed. The arguments could be: * A model: the model's `get_absolute_url()` function will be called. * A view name, possibly with arguments: `urlresolvers.reverse()` will
# (at your option) any later version. # Wirecloud is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with Wirecloud. If not, see <http://www.gnu.org/licenses/>. from django.conf.urls import patterns, include, url from django.views.decorators.cache import cache_page from wirecloud.oauth2provider.views import oauth_discovery from wirecloud.platform.core.plugins import get_version_hash urlpatterns = patterns( 'wirecloud.oauth2provider.views', url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())(oauth_discovery), name='oauth.discovery'), url('^oauth2/auth$', 'provide_authorization_code', name='oauth2provider.auth'), url('^oauth2/token$', 'provide_authorization_token', name='oauth2provider.token'), )
from django.contrib.auth.decorators import login_required from django.http import HttpResponse from django.views.decorators.cache import cache_page from django.views.decorators.csrf import csrf_protect from django.views.decorators.http import require_GET, require_http_methods, require_POST from django.shortcuts import render from wirecloud.commons.utils.http import get_absolute_reverse_url, build_error_response from wirecloud.oauth2provider.provider import WirecloudAuthorizationProvider from wirecloud.platform.core.plugins import get_version_hash provider = WirecloudAuthorizationProvider() @cache_page(60 * 60 * 24, key_prefix='oauth2provider-info-%s' % get_version_hash()) @require_GET def oauth_discovery(request): endpoints = { 'flows': ["Authorization Code Grant"], 'auth_endpoint': get_absolute_reverse_url('oauth2provider.auth', request), 'token_endpoint': get_absolute_reverse_url('oauth2provider.token', request), 'default_redirect_uri': get_absolute_reverse_url('oauth.default_redirect_uri', request), 'version': '2.0', } return HttpResponse(json.dumps(endpoints, sort_keys=True), content_type='application/json; charset=UTF-8') @require_http_methods(["GET", "POST"])
# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # Wirecloud is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with Wirecloud. If not, see <http://www.gnu.org/licenses/>. from django.conf.urls import url from django.views.decorators.cache import cache_page from wirecloud.oauth2provider import views from wirecloud.platform.core.plugins import get_version_hash urlpatterns = ( url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())(views.oauth_discovery), name='oauth.discovery'), url('^oauth2/auth$', views.provide_authorization_code, name='oauth2provider.auth'), url('^oauth2/token$', views.provide_authorization_token, name='oauth2provider.token'), )
from django.contrib.auth.decorators import login_required from django.http import HttpResponse from django.views.decorators.cache import cache_page from django.views.decorators.csrf import csrf_protect from django.views.decorators.http import require_GET, require_http_methods, require_POST from django.shortcuts import render from wirecloud.commons.utils.http import get_absolute_reverse_url, build_error_response from wirecloud.oauth2provider.provider import WirecloudAuthorizationProvider from wirecloud.platform.core.plugins import get_version_hash provider = WirecloudAuthorizationProvider() @cache_page(60 * 60 * 24, key_prefix='oauth2provider-info-%s' % get_version_hash()) @require_GET def oauth_discovery(request): endpoints = { 'flows': ["Authorization Code Grant"], 'auth_endpoint': get_absolute_reverse_url('oauth2provider.auth', request), 'token_endpoint': get_absolute_reverse_url('oauth2provider.token', request), 'default_redirect_uri': get_absolute_reverse_url('oauth.default_redirect_uri', request), 'version': '2.0', }
# Copyright (c) 2013-2015 CoNWeT Lab., Universidad Politécnica de Madrid # This file is part of Wirecloud. # Wirecloud is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # Wirecloud is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with Wirecloud. If not, see <http://www.gnu.org/licenses/>. from django.conf.urls import patterns, include, url from django.views.decorators.cache import cache_page from wirecloud.oauth2provider.views import oauth_discovery from wirecloud.platform.core.plugins import get_version_hash urlpatterns = patterns('wirecloud.oauth2provider.views', url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())(oauth_discovery), name='oauth.discovery'), url('^oauth2/auth$', 'provide_authorization_code', name='oauth2provider.auth'), url('^oauth2/token$', 'provide_authorization_token', name='oauth2provider.token'), )
def render_wirecloud(request, view_type=None): if view_type is None: if 'mode' in request.GET: view_type = request.GET['mode'] else: view_type = get_default_view(request) try: return render(request, 'wirecloud/views/%s.html' % view_type, {'VIEW_MODE': view_type, 'WIRECLOUD_VERSION_HASH': get_version_hash()}, content_type="application/xhtml+xml; charset=UTF-8") except TemplateDoesNotExist: if 'mode' in request.GET: url = urlparse(request.build_absolute_uri()) query_params = parse_qs(url.query, True) del query_params['mode'] return HttpResponseRedirect(urlunparse(( url.scheme, url.netloc, url.path, url.params, urlencode(query_params, True), url.fragment ))) else: view_type = get_default_view(request) return render_wirecloud(request, view_type)
from django.views.i18n import render_javascript_catalog from user_agents import parse as ua_parse import six from wirecloud.commons.utils.cache import patch_cache_headers from wirecloud.commons.utils.http import build_error_response from wirecloud.platform.core.plugins import get_version_hash from wirecloud.platform.plugins import get_active_features_info, get_plugins from wirecloud.platform.models import Workspace from wirecloud.platform.themes import get_active_theme_name, get_available_themes from wirecloud.platform.workspace.utils import get_workspace_list LANGUAGE_QUERY_PARAMETER = 'language' @cache_page(60 * 60 * 24, key_prefix='wirecloud-features-%s' % get_version_hash()) @require_safe def feature_collection(request): features = get_active_features_info() response = HttpResponse(json.dumps(features, sort_keys=True), content_type='application/json; charset=UTF-8') return patch_cache_headers(response) def resolve_url(to, *args, **kwargs): # pragma: no cover """ Return a URL appropriate for the arguments passed. The arguments could be: * A model: the model's `get_absolute_url()` function will be called. * A view name, possibly with arguments: `urlresolvers.reverse()` will be used to reverse-resolve the name.
def get_urls(self): if IDM_SUPPORT_ENABLED: from wirecloud.fiware.views import oauth_discovery return ( url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())(oauth_discovery), name='oauth.discovery'), ) else: return ()
def test_get_absolute_static_url_versioned(self, get_current_domain, get_current_scheme): request = self._prepare_request_mock() get_current_scheme.return_value = "http" get_current_domain.return_value = "dashboards.example.org" self.assertEqual(get_absolute_static_url("/path", request=request, versioned=True), 'http://dashboards.example.org/path?v=' + get_version_hash()) get_current_scheme.assert_called_once_with(request) get_current_domain.assert_called_once_with(request)
if callable(to): raise # If this doesn't "feel" like a URL, re-raise. if '/' not in to and '.' not in to: raise # Finally, fall back and assume it's a URL return to def redirect_to_login(*args, **kwargs): kwargs['login_url'] = resolve_url(kwargs.get('login_url') or settings.LOGIN_URL) return django_redirect_to_login(*args, **kwargs) @cache_page(60 * 60 * 24, key_prefix='js18n-%s' % get_version_hash()) def cached_javascript_catalog(request): packages = ['wirecloud.commons', 'wirecloud.catalogue', 'wirecloud.platform'] for plugin in get_plugins(): packages.append(plugin.__module__) return javascript_catalog(request, "djangojs", packages) def render_root_page(request): return auto_select_workspace(request, request.GET.get('mode', None)) def auto_select_workspace(request, mode=None):
# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # Wirecloud is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with Wirecloud. If not, see <http://www.gnu.org/licenses/>. from django.conf.urls import include, url from django.views.decorators.cache import cache_page from wirecloud.oauth2provider import views from wirecloud.platform.core.plugins import get_version_hash urlpatterns = ( url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())( views.oauth_discovery), name='oauth.discovery'), url('^oauth2/auth$', views.provide_authorization_code, name='oauth2provider.auth'), url('^oauth2/token$', views.provide_authorization_token, name='oauth2provider.token'), )
raise # If this doesn't "feel" like a URL, re-raise. if '/' not in to and '.' not in to: raise # Finally, fall back and assume it's a URL return to def redirect_to_login(*args, **kwargs): kwargs['login_url'] = resolve_url( kwargs.get('login_url') or settings.LOGIN_URL) return django_redirect_to_login(*args, **kwargs) @cache_page(60 * 60 * 24, key_prefix='js18n-%s' % get_version_hash()) def cached_javascript_catalog(request): packages = [ 'wirecloud.commons', 'wirecloud.catalogue', 'wirecloud.platform' ] for plugin in get_plugins(): packages.append(plugin.__module__) return javascript_catalog(request, "djangojs", packages) def render_root_page(request): return auto_select_workspace(request, request.GET.get('mode', None))
def get_urls(self): urls = patterns('', url(r'^api/marketAdaptor/', include('wirecloud.fiware.marketAdaptor.urls')), ) if IDM_SUPPORT_ENABLED: from wirecloud.fiware.views import oauth_discovery urls += patterns('', url('^.well-known/oauth$', cache_page(7 * 24 * 60 * 60, key_prefix='well-known-oauth-%s' % get_version_hash())(oauth_discovery), name='oauth.discovery'), ) return urls
from wirecloud.commons.utils.cache import patch_cache_headers from wirecloud.commons.utils.git import get_git_info from wirecloud.commons.utils.http import build_error_response import wirecloud.platform from wirecloud.platform.core.plugins import get_version_hash from wirecloud.platform.plugins import get_active_features_info from wirecloud.platform.models import Workspace from wirecloud.platform.themes import get_active_theme_name, get_available_themes from wirecloud.platform.workspace.utils import get_workspace_list START_TIME = datetime.now() @cache_page(60 * 60 * 24, key_prefix='wirecloud-features-%s' % get_version_hash()) @require_safe def feature_collection(request): features = get_active_features_info() response = HttpResponse(json.dumps(features, sort_keys=True), content_type='application/json; charset=UTF-8') return patch_cache_headers(response) @require_safe def version_entry(request): # git hash and release_date is only available on released versions # but we can retrieve it using get_git_info if not hasattr(wirecloud.platform, "__git_hash__"): wirecloud.platform.__git_hash__, wirecloud.platform.__release_date__, wirecloud.platform.__git_dirty__ = get_git_info(