Package omeroweb :: Package webpublic :: Module views
[hide private]
[frames] | no frames]

Source Code for Module omeroweb.webpublic.views

  1  # Copyright (C) 2011 University of Dundee & Open Microscopy Environment. 
  2  # All rights reserved. 
  3  # 
  4  # This program is free software: you can redistribute it and/or modify 
  5  # it under the terms of the GNU Affero General Public License as 
  6  # published by the Free Software Foundation, either version 3 of the 
  7  # License, or (at your option) any later version. 
  8  # 
  9  # This program is distributed in the hope that it will be useful, 
 10  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 11  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 12  # GNU Affero General Public License for more details. 
 13  # 
 14  # You should have received a copy of the GNU Affero General Public License 
 15  # along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 16  # 
 17   
 18  from django.http import HttpResponse, HttpResponseRedirect 
 19  from django.shortcuts import get_object_or_404, render_to_response 
 20  from django.core.urlresolvers import reverse 
 21  from django.utils.datastructures import MergeDict 
 22  from omeroweb.webclient.views import isUserConnected, login as webclient_login 
 23  from omeroweb.webgateway.views import getBlitzConnection, _session_logout 
 24  from omeroweb.webpublic.models import Link 
 25  from omeroweb.webpublic.baseconv import base62 
 26  import settings 
 27  import logging 
 28  import traceback 
 29  import omero 
 30   
 31  logger = logging.getLogger('webpublic') 
 32  useragent = "OMERO.webpublic" 
33 34 -class UrlValidationError(Exception):
35 - def __init__(self, error):
36 self.error = error
37
38 -class DummyHttpRequest(object):
39 - def __init__(self, REQUEST, session, method):
40 self.REQUEST = REQUEST 41 self.session = session 42 self.method = method
43
44 -def _validate_url(url, request, conn):
45 group = conn.getGroupFromContext() 46 members = conn.containedExperimenters(group.id) 47 webindex = request.build_absolute_uri(reverse('webindex')) 48 if not hasattr(settings, 'PUBLIC_USER') \ 49 or not hasattr(settings, 'PUBLIC_PASSWORD'): 50 raise UrlValidationError('Missing "omero.web.public.user" or ' \ 51 '"omero.web.public.password" configuration!') 52 if not url.startswith(webindex): 53 raise UrlValidationError('Not from this OMERO.web host!') 54 if not group.details.permissions.isGroupRead(): 55 raise UrlValidationError('Group "%s" is not collaborative!' % \ 56 group.name) 57 for member in members: 58 if settings.PUBLIC_USER == member.omeName: 59 return 60 raise UrlValidationError('Public user "%s" not a member of "%s"!' % \ 61 (settings.PUBLIC_USER, group.name))
62
63 @isUserConnected 64 -def index(request, **kwargs):
65 conn = kwargs['conn'] 66 return render_to_response('webpublic/index.html', {'client': conn})
67
68 @isUserConnected 69 -def publicise(request, **kwargs):
70 template = 'webpublic/publicise.html' 71 conn = kwargs['conn'] 72 url = request.POST.get('public_url') 73 if url is None or len(url) == 0: 74 return render_to_response( 75 template, {'url': '', 'error': 'No URL specified!'}) 76 webindex = request.build_absolute_uri(reverse('webindex')) 77 data = {'url': url} 78 try: 79 _validate_url(url, request, conn) 80 except UrlValidationError, e: 81 data['error'] = e.error 82 return render_to_response(template, data) 83 owner = conn.user.getId() 84 group = conn.getGroupFromContext().id 85 try: 86 link = Link.objects.get(url=url, owner=owner) 87 except Link.DoesNotExist: 88 link = Link(url=url, owner=owner, group=group) 89 link.save() 90 data['tinyurl'] = reverse('webpublic_tinyurl', args=[link.to_base62()]) 91 data['tinyurl'] = request.build_absolute_uri(data['tinyurl']) 92 return render_to_response(template, data)
93
94 @isUserConnected 95 -def de_publicise(request, id, **kwargs):
96 conn = kwargs['conn'] 97 owner = conn.user.getId() 98 # Sanity check for "permissions" by using owner during lookup 99 link = link = get_object_or_404(Link, id=id, owner=owner) 100 link.delete() 101 return HttpResponseRedirect(reverse('webpublic_user_listing'))
102
103 @isUserConnected 104 -def user_listing(request, **kwargs):
105 conn = kwargs['conn'] 106 owner = conn.user.getId() 107 links = Link.objects.filter(owner=owner) 108 data = {'client': conn, 'links': links} 109 return render_to_response('webpublic/user_listing.html', data)
110
111 -def tinyurl(request, base_62):
112 base_62 = base62.to_decimal(base_62) 113 link = get_object_or_404(Link, pk=base_62) 114 REQUEST = {'url': link.url, 115 'server': 1, 116 'username': settings.PUBLIC_USER, 117 'password': settings.PUBLIC_PASSWORD} 118 REQUEST = MergeDict(REQUEST, request.REQUEST) 119 dummy_request = DummyHttpRequest(REQUEST, request.session, request.method) 120 to_return = webclient_login(dummy_request) 121 conn = getBlitzConnection(dummy_request, useragent="OMERO.web") 122 conn.changeActiveGroup(link.group) 123 return to_return
124