def single_linky(request, linky_guid): """ Given a Perma ID, serve it up. Vesting also takes place here. """ if request.method == 'POST' and request.user.is_authenticated(): Link.objects.filter(guid=linky_guid).update(vested = True, vested_by_editor = request.user, vested_timestamp = datetime.now()) return HttpResponseRedirect(reverse('single_linky', args=[linky_guid])) else: canonical_guid = Link.get_canonical_guid(linky_guid) if canonical_guid != linky_guid: return HttpResponsePermanentRedirect(reverse('single_linky', args=[canonical_guid])) link = get_object_or_404(Link, guid=linky_guid) # Increment the view count if we're not the referrer parsed_url = urlparse(request.META.get('HTTP_REFERER', '')) current_site = Site.objects.get_current() if not current_site.domain in parsed_url.netloc: link.view_count += 1 link.save() asset = Asset.objects.get(link=link) text_capture = None # User requested archive type serve_type = 'live' if 'type' in request.REQUEST: requested_type = request.REQUEST['type'] if requested_type == 'image': serve_type = 'image' elif requested_type == 'pdf': serve_type = 'pdf' elif requested_type == 'source': serve_type = 'source' elif requested_type == 'text': serve_type = 'text' if asset.text_capture and asset.text_capture != 'pending': path_elements = [settings.GENERATED_ASSETS_STORAGE, asset.base_storage_path, asset.text_capture] file_path = os.path.sep.join(path_elements) with open(file_path, 'r') as f: text_capture = f.read() # If we are going to serve up the live version of the site, let's make sure it's iframe-able display_iframe = False if serve_type == 'live': try: response = urllib2.urlopen(link.submitted_url) if 'X-Frame-Options' in response.headers: # TODO actually check if X-Frame-Options specifically allows requests from us display_iframe = False else: display_iframe = True except urllib2.URLError: # Something is broken with the site, so we might as well display it in an iFrame so the user knows display_iframe = True asset= Asset.objects.get(link__guid=link.guid) created_datestamp = link.creation_timestamp pretty_date = created_datestamp.strftime("%B %d, %Y %I:%M GMT") context = RequestContext(request, {'linky': link, 'asset': asset, 'pretty_date': pretty_date, 'user': request.user, 'next': request.get_full_path(), 'display_iframe': display_iframe, 'serve_type': serve_type, 'text_capture': text_capture}) #context.update(csrf(request)) return render_to_response('single-link.html', context)