def authenticate(request): redirectURL = request.REQUEST.get('redirect') sessionID = request.REQUEST.get('session') verification = sha.new(settings.SECRET_KEY + str(redirectURL) + str(sessionID)).hexdigest() context = { 'redirect': redirectURL, 'session': sessionID, 'verification': verification } if request.method == 'POST': if request.POST.get('submit') == 'No': return util.redirect('/') if request.POST.get('verification') == verification: engine = import_module(settings.SESSION_ENGINE) session = engine.SessionStore(sessionID) session['apiUser'] = request.user.id session.save() context['session'] = session.session_key if redirectURL: return util.redirect(redirectURL, {'session': session.session_key}) else: context['success'] = True else: context['error'] = _("Invalid verification code.") return render_to_response('api/authenticate.html', context, context_instance=RequestContext(request))
def submit_channel(request): """ Called when the user is submitting a channel. If the SESSION_KEY cookie isn't set, then we redirect back to the first step. XXX: check for clients that don't support cookies If the submisstion used the GET method, we create a form that allows the submitter to describe the feed in more detail (languages, categories, tags, etc.). If the submission used the POST method, we check to see if the submitted form is valid; if it is we create the channel and redirect to the post-submission page. Otherwise, redisplay the form with the errors highlighted. """ session_dict = request.session[SESSION_KEY] url_required = not request.user.has_perm('channels.add_site') if 'subscribe' in session_dict: return util.redirect('/submit/') if request.method != 'POST': form = SubmitChannelForm(url_required=url_required) form.set_defaults(session_dict) session_dict['detected_thumbnail'] = form.set_image_from_feed request.session.modified = True else: form = SubmitChannelForm(request.POST, request.FILES, url_required=url_required) if session_dict['owner-is-fan']: form.fields['publisher'].required = False if form.user_uploaded_file(): session_dict['detected_thumbnail'] = False request.session.modified = True if form.is_valid(): feed_url = session_dict['url'] channel = form.save_channel(request.user, feed_url) session_dict['subscribe'] = channel.get_subscription_url() request.session.modified = True if request.FILES.get('thumbnail_file'): request.FILES['thumbnail_file'].close() return util.redirect('submit/after') else: form.save_submitted_thumbnail() context = form.get_template_data() if session_dict.get('detected_thumbnail'): context['thumbnail_description'] = _("Current image (from the feed)") else: context['thumbnail_description'] = _("Current image (uploaded)") response = render_to_response('submit/submit-channel.html', context, context_instance=RequestContext(request)) if request.FILES.get('thumbnail_file'): request.FILES['thumbnail_file'].close() return response
def submit_channel(request): """ Called when the user is submitting a channel. If the SESSION_KEY cookie isn't set, then we redirect back to the first step. XXX: check for clients that don't support cookies If the submisstion used the GET method, we create a form that allows the submitter to describe the feed in more detail (languages, categories, tags, etc.). If the submission used the POST method, we check to see if the submitted form is valid; if it is we create the channel and redirect to the post-submission page. Otherwise, redisplay the form with the errors highlighted. """ session_dict = request.session[SESSION_KEY] url_required = not request.user.has_perm("channels.add_site") if "subscribe" in session_dict: return util.redirect("/submit/") if request.method != "POST": form = SubmitChannelForm(url_required=url_required) form.set_defaults(session_dict) session_dict["detected_thumbnail"] = form.set_image_from_feed request.session.modified = True else: form = SubmitChannelForm(request.POST, request.FILES, url_required=url_required) if session_dict["owner-is-fan"]: form.fields["publisher"].required = False if form.user_uploaded_file(): session_dict["detected_thumbnail"] = False request.session.modified = True if form.is_valid(): feed_url = session_dict["url"] channel = form.save_channel(request.user, feed_url) session_dict["subscribe"] = channel.get_subscription_url() request.session.modified = True if request.FILES.get("thumbnail_file"): request.FILES["thumbnail_file"].close() return util.redirect("submit/after") else: form.save_submitted_thumbnail() context = form.get_template_data() if session_dict.get("detected_thumbnail"): context["thumbnail_description"] = _("Current image (from the feed)") else: context["thumbnail_description"] = _("Current image (uploaded)") response = render_to_response("submit/submit-channel.html", context, context_instance=RequestContext(request)) if request.FILES.get("thumbnail_file"): request.FILES["thumbnail_file"].close() return response
def submit_feed(request): destroy_submit_url_session(request) url_required = not request.user.has_perm("channels.add_site") if request.method != "POST": form = FeedURLForm(url_required=url_required) form.fields["url"].initial = request.GET.get("url", "") form.fields["name"].initial = request.GET.get("name", "") else: submit_type = request.POST.get("type", "") form = FeedURLForm(request.POST.copy(), url_required=url_required) if form.is_valid(): if form.cleaned_data["url"]: request.session[SESSION_KEY] = form.get_feed_data() else: request.session[SESSION_KEY] = form.cleaned_data if "Fan" in submit_type: request.session[SESSION_KEY]["owner-is-fan"] = True else: request.session[SESSION_KEY]["owner-is-fan"] = False return util.redirect("submit/step2") else: if "url" in form.data: try: channel = Channel.objects.get(url=form.data["url"]) except Channel.DoesNotExist: pass else: request.session[SESSION_KEY] = {"url": channel.url} return render_to_response( "submit/submit-feed-exists.html", {"channel": channel}, context_instance=RequestContext(request) ) return render_to_response("submit/submit-feed-url.html", {"form": form}, context_instance=RequestContext(request))
def post(request, id): post = get_object_or_404(ModeratorPost, pk=id) if request.method == 'POST': if request.POST['action'] == 'delete': post.delete() return util.redirect_to_referrer(request) return util.redirect('notes/moderator-board')
def register_view(request): next = request.GET.get('next') if next is None: next = request.POST.get('next') if next is None: next = request.META.get('HTTP_REFERER') if next is None: next = '' register_form = user_forms.RegisterForm(request.POST) if register_form.is_valid(): #try: user = register_form.make_user() #except User.: # # check again, it's probably a duplicate user # register_form.full_clean() #else: login(request, user) request.session['notifications'] = [(_('Thanks for registering!'), _("We've sent a confirmation " "e-mail to the address you " "provided."))] return util.redirect(next) return render_to_response('registration/login.html', { 'next': next, 'login_form': AuthenticationForm(), 'register_form': register_form, }, context_instance=RequestContext(request))
def register_view(request): next = request.GET.get('next') if next is None: next = request.POST.get('next') if next is None: next = request.META.get('HTTP_REFERER') if next is None: next = '' register_form = user_forms.RegisterForm(request.POST) if register_form.is_valid(): #try: user = register_form.make_user() #except User.: # # check again, it's probably a duplicate user # register_form.full_clean() #else: login(request, user) request.session['notifications'] = [(_('Thanks for registering!'), _("We've sent a confirmation " "e-mail to the address you " "provided."))] return util.redirect(next) return render_to_response('registration/login.html', { 'next' : next, 'login_form': AuthenticationForm(), 'register_form': register_form, }, context_instance=RequestContext(request))
def email_owners(request): if request.method != 'POST': form = forms.EmailChannelOwnersForm() else: form = forms.EmailChannelOwnersForm(request.POST) if form.is_valid(): form.send_email(request.user) return util.redirect('moderate') return util.render_to_response(request, 'email-channel-owners.html', { 'form': form})
def email_owners(request): if request.method != 'POST': form = forms.EmailChannelOwnersForm() else: form = forms.EmailChannelOwnersForm(request.POST) if form.is_valid(): form.send_email(request.user) return util.redirect('moderate') return util.render_to_response(request, 'email-channel-owners.html', {'form': form})
def for_user(request, user_name_or_id): try: user = User.objects.get(username=user_name_or_id) except User.DoesNotExist: try: user = get_object_or_404(User, pk=user_name_or_id) except ValueError: raise Http404 if not user.is_active: raise Http404 expected_path = '/user/%s' % user.username if request.path != expected_path: return util.redirect(expected_path) if request.user.is_superuser or request.user.id == user.id: try: cobrand = Cobranding.objects.get(user=user.username) except Cobranding.DoesNotExist: cobrand = None else: cobrand = None page = request.GET.get('page', 1) feed_paginator = Paginator(user.channels.filter(url__isnull=False), 10) try: feed_page = feed_paginator.page(page) except InvalidPage: feed_page = None site_paginator = Paginator(user.channels.filter(url__isnull=True), 10) try: site_page = site_paginator.page(page) except InvalidPage: site_page = None # find the biggest paginator and use that page for calculating the links if not feed_paginator: biggest = site_page elif not site_paginator: biggest = feed_page elif feed_paginator.count > site_paginator.count: biggest = feed_page else: biggest = site_page return render_to_response('user_profile/for-user.html', { 'for_user': user, 'title': _("Shows for %s") % user.username, 'cobrand': cobrand, 'biggest': biggest, 'feed_page': feed_page, 'site_page': site_page, }, context_instance=RequestContext(request))
def claim(request): if request.method != "POST": return util.redirect("submit") url = request.session[SESSION_KEY]["url"] channel = Channel.objects.get(url=url) ChannelNote.objects.create( channel=channel, user=request.user, title="", body=("This user (%s) has asked to claim this channel." % (request.user.username)), ) return render_to_response( "submit/submit-feed-claim.html", {"channel": channel}, context_instance=RequestContext(request) )
def add_note(request): try: channel_id = int(request.POST['channel-id']) except (ValueError, KeyError): raise Http404 channel = get_object_or_404(Channel, pk=channel_id) note = ChannelNote.create_note_from_request(request) if not request.user.has_perm('notes.add_channelnote') and \ channel.owner != request.user: return redirect_to_login(request.path) channel.notes.add(note) if request.user != channel.owner: note.send_email() return util.redirect('channels/%d' % channel.id)
def claim(request): if request.method != 'POST': return util.redirect('submit') url = request.session[SESSION_KEY]['url'] channel = Channel.objects.get(url=url) ChannelNote.objects.create(channel=channel, user=request.user, title='', body=( 'This user (%s) has asked to claim this channel.' % ( request.user.username))) return render_to_response('submit/submit-feed-claim.html', {'channel': channel}, context_instance=RequestContext(request))
def after_submit(request): subscribe = request.session[SESSION_KEY].get("subscribe") if not subscribe: return util.redirect("submit") def img(url): return "<img src='%s' alt='Miro Video Player' border='0' " "class='one-click-image' />" % url def link(inside): return "<a href='%s' title='Miro: Internet TV'>%s</a>" % (subscribe, inside) textLink = "%s" % link("Your 1-Click Subscribe URL") button_prefix = "http://subscribe.getmiro.com/img/buttons/" buttons = ["one-click-subscribe-88X34.png", "one-click-subscribe-109X34.png"] buttonHTML = [link(img(button_prefix + url)) for url in buttons] context = {"buttons": buttonHTML, "subscribe": subscribe, "textlink": textLink} return render_to_response("submit/after-submit.html", context, context_instance=RequestContext(request))
def edit_user_form(request, user): if user.has_perm('channels.change_channel'): FormClass = user_forms.EditModeratorForm elif user.channels.count(): FormClass = user_forms.EditChannelOwnerForm else: FormClass = user_forms.EditUserForm if request.method == 'POST': form = FormClass(user, request.POST) if form.is_valid(): form.update_user(request) return util.redirect(request.path) else: form = FormClass(user) return render_to_response('user_profile/edit-user.html', { 'for_user':user, 'form': form}, context_instance=RequestContext(request))
def share_feed(request): try: feed_url = request.GET['feed_url'].encode('utf8') except KeyError: return HttpResponse("you must supply a feed_url") try: channel, items = get_channels_and_items(feed_url) except FeedFetchingError: return HttpResponse("This feed appears to be dead.") if isinstance(channel, Channel): return util.redirect(channel.get_absolute_url(), {'share': 'true'}) share_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/feed/?feed_url=%s&share=false' % urllib.quote(feed_url)) share_links = None share_button_url = None if request.GET.get('share') == 'false': share_button_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/feed/?feed_url=%s' % urllib.quote(feed_url)) else: share_links = util.get_share_links(share_url, channel.name) if items: item_paginator = Paginator(items[:10], 10) item_page = item_paginator.page(1) else: item_page = None return render_to_response('channels/show-channel.html', { 'channel': channel, 'item_page': item_page, 'feed_url': feed_url, 'share_url': share_url, 'share_button_url': share_button_url, 'share_type': 'feed', 'google_analytics_ua': None, 'share_links': share_links }, context_instance=RequestContext(request))
def share_feed(request): try: feed_url = request.GET['feed_url'].encode('utf8') except KeyError: return HttpResponse("you must supply a feed_url") try: channel, items = get_channels_and_items(feed_url) except FeedFetchingError: return HttpResponse("This feed appears to be dead.") if isinstance(channel, Channel): return util.redirect(channel.get_absolute_url(), {'share': 'true'}) share_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/feed/?feed_url=%s&share=false' % urllib.quote(feed_url)) share_links = None share_button_url = None if request.GET.get('share') == 'false': share_button_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/feed/?feed_url=%s' % urllib.quote(feed_url)) else: share_links = util.get_share_links(share_url, channel.name) if items: item_paginator = Paginator(items[:10], 10) item_page = item_paginator.page(1) else: item_page = None return render_to_response('channels/show-channel.html', {'channel': channel, 'item_page': item_page, 'feed_url': feed_url, 'share_url': share_url, 'share_button_url': share_button_url, 'share_type': 'feed', 'google_analytics_ua': None, 'share_links': share_links }, context_instance=RequestContext(request))
def edit_user_form(request, user): if user.has_perm('channels.change_channel'): FormClass = user_forms.EditModeratorForm elif user.channels.count(): FormClass = user_forms.EditChannelOwnerForm else: FormClass = user_forms.EditUserForm if request.method == 'POST': form = FormClass(user, request.POST) if form.is_valid(): form.update_user(request) return util.redirect(request.path) else: form = FormClass(user) return render_to_response('user_profile/edit-user.html', { 'for_user': user, 'form': form }, context_instance=RequestContext(request))
def after_submit(request): subscribe = request.session[SESSION_KEY].get('subscribe') if not subscribe: return util.redirect('submit') def img(url): return ("<img src='%s' alt='Miro Video Player' border='0' " "class='one-click-image' />" % url) def link(inside): return "<a href='%s' title='Miro: Internet TV'>%s</a>" % (subscribe, inside) textLink = '%s' % link("Your 1-Click Subscribe URL") button_prefix = 'http://subscribe.getmiro.com/img/buttons/' buttons = [ 'one-click-subscribe-88X34.png', 'one-click-subscribe-109X34.png'] buttonHTML = [link(img(button_prefix + url)) for url in buttons] context = { 'buttons': buttonHTML, 'subscribe': subscribe, 'textlink': textLink } return render_to_response('submit/after-submit.html', context, context_instance=RequestContext(request))
def submit_feed(request): destroy_submit_url_session(request) url_required = not request.user.has_perm('channels.add_site') if request.method != 'POST': form = FeedURLForm(url_required=url_required) form.fields['url'].initial = request.GET.get('url', '') form.fields['name'].initial = request.GET.get('name', '') else: submit_type = request.POST.get('type', '') form = FeedURLForm(request.POST.copy(), url_required=url_required) if form.is_valid(): if form.cleaned_data['url']: request.session[SESSION_KEY] = form.get_feed_data() else: request.session[SESSION_KEY] = form.cleaned_data if 'Fan' in submit_type: request.session[SESSION_KEY]['owner-is-fan'] = True else: request.session[SESSION_KEY]['owner-is-fan'] = False return util.redirect("submit/step2") else: if 'url' in form.data: try: channel = Channel.objects.get(url=form.data['url']) except Channel.DoesNotExist: pass else: request.session[SESSION_KEY] = {'url': channel.url} return render_to_response( 'submit/submit-feed-exists.html', {'channel': channel}, context_instance=RequestContext(request)) return render_to_response('submit/submit-feed-url.html', {'form': form}, context_instance=RequestContext(request))
def add_moderator_post(request): post = ModeratorPost.create_note_from_request(request) send_checked = bool(request.POST.get('send-email')) post.send_email(send_checked) post.save() return util.redirect('notes/moderator-board')
def show(request, id, featured_form=None): c = get_object_or_404(Channel, pk=id) try: c.rating except GeneratedRatings.DoesNotExist: c.rating = GeneratedRatings.objects.create(channel=c) # redirect old URLs to canonical ones if request.path != c.get_url(): return util.redirect(c.get_absolute_url(), request.GET) item_paginator = Paginator(c.items.all(), 10) try: item_page = item_paginator.page(request.GET.get('page', 1)) except InvalidPage: raise Http404 for i in item_page.object_list: i.channel = c is_miro = bool(util.get_miro_version(request.META.get('HTTP_USER_AGENT'))) share_links = share_url = None if request.GET.get('share') == 'true': share_url = urlparse.urljoin( settings.BASE_URL_FULL, '/feeds/%s' % id) share_links = util.get_share_links(share_url, c.name) country = country_code(request) context = { 'channel': c, 'item_page': item_page, 'is_miro': is_miro, 'show_edit_button': c.can_edit(request.user), 'show_extra_info': c.can_edit(request.user), 'link_to_channel': True, 'BASE_URL': settings.BASE_URL, 'feed_url': c.url, 'share_url': share_url, 'share_type': 'feed', 'share_links': share_links, 'country': country, 'audio': c.state == c.AUDIO} if share_url: context['google_analytics_ua'] = None if country and c.geoip and country not in c.geoip.split(','): # restricted channel request.add_notification(None, _('This show may not be available to you, ' 'as it is restricted to certain countries.')) if request.user.has_perm('featured.change_featuredqueue'): try: featured_queue = c.featured_queue except FeaturedQueue.DoesNotExist: pass else: if featured_queue.state in ( FeaturedQueue.IN_QUEUE, FeaturedQueue.CURRENT): c.featured = True if c.featured_emails.count(): last_featured_email = c.featured_emails.all()[0] else: last_featured_email = None if featured_form is None: featured_form = FeaturedEmailForm(request, c) context['featured_email_form'] = featured_form context['last_featured_email'] = last_featured_email return render_to_response('channels/show-channel.html', context, context_instance=RequestContext(request))
def share_item(request): # check to see if we have that item in our database... # If so # use that item # else # let's create a "fake" item to preview # render that item preview try: file_url = request.GET['file_url'].encode('utf8') except KeyError: return HttpResponse("you must supply a file_url") feed_url = request.GET.get('feed_url') webpage_url = request.GET.get('webpage_url') item_name = request.GET.get('item_name') channel = None item = None next = None previous = None if webpage_url: webpage_url = webpage_url.encode('utf8') if feed_url: feed_url = feed_url.encode('utf8') try: channel, channel_items = get_channels_and_items(feed_url) except FeedFetchingError: channel = None feed_url = None if channel is None: channel_items = [] previous, item, next = get_item(file_url, channel, channel_items, item_name) if isinstance(item, Item): return util.redirect(item.get_absolute_url(), {'share': 'true'}) # get the sharing info get_params = {'file_url': file_url, 'share': 'false'} if feed_url: get_params['feed_url'] = feed_url if webpage_url: get_params['webpage_url'] = webpage_url if item_name: get_params['item_name'] = feed_url share_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/item/?%s' % urllib.urlencode(get_params)) share_links = None share_button_url = None if request.GET.get('share') == 'false': get_params.pop('share') share_button_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/item/?%s' % urllib.urlencode(get_params)) else: share_links = util.get_share_links(share_url, item.name) # render the page return render_to_response('channels/playback.html', { 'item': item, 'channel': channel, 'audio': False, 'previous': previous, 'next': next, 'feed_url': feed_url, 'webpage_url': webpage_url, 'item_name': item_name, 'file_url': file_url, 'share_url': share_url, 'share_button_url': share_button_url, 'share_type': 'item', 'google_analytics_ua': None, 'share_links': share_links }, context_instance=RequestContext(request))
def toggle_frontpage(request): if request.method == 'POST': category = Category.objects.get(pk=request.POST['id']) category.on_frontpage = not category.on_frontpage category.save() return util.redirect('genres/moderate')
def latest(request, id): items = Item.objects.filter(channel=id).order_by('-date') if not items: raise Http404 else: return util.redirect(items[0].url)
def share_item(request): # check to see if we have that item in our database... # If so # use that item # else # let's create a "fake" item to preview # render that item preview try: file_url = request.GET['file_url'].encode('utf8') except KeyError: return HttpResponse("you must supply a file_url") feed_url = request.GET.get('feed_url') webpage_url = request.GET.get('webpage_url') item_name = request.GET.get('item_name') channel = None item = None next = None previous = None if webpage_url: webpage_url = webpage_url.encode('utf8') if feed_url: feed_url = feed_url.encode('utf8') try: channel, channel_items = get_channels_and_items(feed_url) except FeedFetchingError: channel = None feed_url = None if channel is None: channel_items = [] previous, item, next = get_item(file_url, channel, channel_items, item_name) if isinstance(item, Item): return util.redirect(item.get_absolute_url(), {'share': 'true'}) # get the sharing info get_params = {'file_url': file_url, 'share': 'false'} if feed_url: get_params['feed_url'] = feed_url if webpage_url: get_params['webpage_url'] = webpage_url if item_name: get_params['item_name'] = feed_url share_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/item/?%s' % urllib.urlencode(get_params)) share_links = None share_button_url = None if request.GET.get('share') == 'false': get_params.pop('share') share_button_url = urlparse.urljoin( settings.BASE_URL_FULL, '/share/item/?%s' % urllib.urlencode(get_params)) else: share_links = util.get_share_links(share_url, item.name) # render the page return render_to_response( 'channels/playback.html', {'item': item, 'channel': channel, 'audio': False, 'previous': previous, 'next': next, 'feed_url': feed_url, 'webpage_url': webpage_url, 'item_name': item_name, 'file_url': file_url, 'share_url': share_url, 'share_button_url': share_button_url, 'share_type': 'item', 'google_analytics_ua': None, 'share_links': share_links}, context_instance=RequestContext(request))
def check(request, *args, **kw): if SESSION_KEY not in request.session: return util.redirect("submit") return function(request, *args, **kw)
def check(request, *args, **kw): if SESSION_KEY not in request.session: return util.redirect('submit') return function(request, *args, **kw)
def show(request, id, featured_form=None): c = get_object_or_404(Channel, pk=id) try: c.rating except GeneratedRatings.DoesNotExist: c.rating = GeneratedRatings.objects.create(channel=c) # redirect old URLs to canonical ones if request.path != c.get_url(): return util.redirect(c.get_absolute_url(), request.GET) item_paginator = Paginator(c.items.all(), 10) try: item_page = item_paginator.page(request.GET.get('page', 1)) except InvalidPage: raise Http404 for i in item_page.object_list: i.channel = c is_miro = bool(util.get_miro_version(request.META.get('HTTP_USER_AGENT'))) share_links = share_url = None if request.GET.get('share') == 'true': share_url = urlparse.urljoin(settings.BASE_URL_FULL, '/feeds/%s' % id) share_links = util.get_share_links(share_url, c.name) country = country_code(request) context = { 'channel': c, 'item_page': item_page, 'is_miro': is_miro, 'show_edit_button': c.can_edit(request.user), 'show_extra_info': c.can_edit(request.user), 'link_to_channel': True, 'BASE_URL': settings.BASE_URL, 'feed_url': c.url, 'share_url': share_url, 'share_type': 'feed', 'share_links': share_links, 'country': country, 'audio': c.state == c.AUDIO } if share_url: context['google_analytics_ua'] = None if country and c.geoip and country not in c.geoip.split(','): # restricted channel request.add_notification( None, _('This show may not be available to you, ' 'as it is restricted to certain countries.')) if request.user.has_perm('featured.change_featuredqueue'): try: featured_queue = c.featured_queue except FeaturedQueue.DoesNotExist: pass else: if featured_queue.state in (FeaturedQueue.IN_QUEUE, FeaturedQueue.CURRENT): c.featured = True if c.featured_emails.count(): last_featured_email = c.featured_emails.all()[0] else: last_featured_email = None if featured_form is None: featured_form = FeaturedEmailForm(request, c) context['featured_email_form'] = featured_form context['last_featured_email'] = last_featured_email return render_to_response('channels/show-channel.html', context, context_instance=RequestContext(request))