def page_not_found(request, **args): from django.template import RequestContext, loader page = { 'robots': 'noindex', 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'theme': common.get_theme(request), } t = loader.get_template('404.html') return HttpResponseNotFound(t.render(RequestContext(request, {'page': page})))
def page_not_found(request, **args): from django.template import RequestContext, loader page = { 'robots': 'noindex', 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'theme': common.get_theme(request), } t = loader.get_template('404.html') return HttpResponseNotFound( t.render(RequestContext(request, {'page': page})))
def openid(request, **args): authed = request.user.is_authenticated() and request.user.is_staff if not authed: return HttpResponseForbidden() page = { 'robots': 'noindex', 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'themes': settings.THEMES, 'themes_more': True if len(settings.THEMES) > 1 else False, 'theme': common.get_theme(request), 'title': _('OpenID - Settings'), 'menu': 'openid', } openid_url = request.POST.get('openid_identifier', None) if openid_url: rs = gls_openid.start(request, openid_url) if 'res' in rs: return rs['res'] elif 'msg' in rs: page['msg'] = rs['msg'] elif request.GET.get('openid.mode', None): rs = gls_openid.finish(request) if 'identity_url' in rs: try: db = OpenId(user=request.user, identity=rs['identity_url']) db.save() return HttpResponseRedirect( urlresolvers.reverse('glifestream.usettings.views.openid')) except IntegrityError: pass elif 'msg' in rs: page['msg'] = rs['msg'] elif request.POST.get('delete', None): try: OpenId(user=request.user, id=int(request.POST.get('delete'))).delete() except: pass ids = OpenId.objects.filter(user=request.user).order_by('identity') return render_to_response('oid.html', {'page': page, 'authed': authed, 'is_secure': request.is_secure(), 'user': request.user, 'openids': ids})
def pshb(request, **args): authed = request.user.is_authenticated() and request.user.is_staff if not authed: return HttpResponseForbidden() page = { 'robots': 'noindex', 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'themes': settings.THEMES, 'themes_more': True if len(settings.THEMES) > 1 else False, 'theme': common.get_theme(request), 'title': _('PubSubHubbub - Settings'), 'menu': 'pshb', } excluded_apis = ('selfposts', 'fb', 'friendfeed', 'twitter', 'vimeo') if request.POST.get('subscribe', False): service = Service.objects.get(id=request.POST['subscribe']) r = gls_pshb.subscribe(service) if r['rc'] == 1: page['msg'] = r['error'] elif r['rc'] == 2: page['msg'] = _('Hub not found.') elif r['rc'] == 202: page['msg'] = _('Hub %s: Accepted for verification.') % r['hub'] elif r['rc'] == 204: page['msg'] = _('Hub %s: Subscription verified.') % r['hub'] elif request.POST.get('unsubscribe', False): r = gls_pshb.unsubscribe(request.POST['unsubscribe']) if r['rc'] == 1: page['msg'] = _('No subscription found.') elif r['rc'] == 202: page['msg'] = _('Hub %s: Accepted for verification.') % r['hub'] elif r['rc'] == 204: page['msg'] = _('Hub %s: Unsubscribed.') % r['hub'] else: page['msg'] = 'Hub %s: %s.' % (r['hub'], r['rc']) subs = gls_pshb.list(raw=True) services = Service.objects.exclude (api__in=excluded_apis) \ .exclude(id__in=subs.values('service__id')).order_by('name') return render_to_response('pshb.html', {'page': page, 'authed': authed, 'is_secure': request.is_secure(), 'user': request.user, 'services': services, 'subs': subs})
def tools(request, **args): authed = request.user.is_authenticated() and request.user.is_staff page = { 'robots': 'noindex', 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'themes': settings.THEMES, 'themes_more': True if len(settings.THEMES) > 1 else False, 'theme': common.get_theme(request), 'title': _('Tools'), 'menu': 'tools', } return render_to_response('tools.html', {'page': page, 'authed': authed, 'is_secure': request.is_secure(), 'user': request.user})
def lists(request, **args): authed = request.user.is_authenticated() and request.user.is_staff if not authed: return HttpResponseForbidden() page = { 'robots': 'noindex', 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'themes': settings.THEMES, 'themes_more': True if len(settings.THEMES) > 1 else False, 'theme': common.get_theme(request), 'title': _('Lists - Settings'), 'menu': 'lists', } curlist = '' lists = List.objects.filter(user=request.user).order_by('name') if 'list' in args: try: list = List.objects.get(user=request.user, slug=args['list']) curlist = args['list'] except List.DoesNotExist: list = List(user=request.user) else: list = List(user=request.user) if request.method == 'POST': if request.POST.get('delete', False): list.delete() return HttpResponseRedirect( urlresolvers.reverse('glifestream.usettings.views.lists')) else: form = ListForm(request.POST, instance=list) if form.is_valid(): form.save() return HttpResponseRedirect( urlresolvers.reverse('glifestream.usettings.views.lists', args=[list.slug])) else: form = ListForm(instance=list) return render_to_response('lists.html', {'page': page, 'authed': authed, 'is_secure': request.is_secure(), 'user': request.user, 'lists': lists, 'curlist': curlist, 'form': form})
def login(request, template_name='login.html', redirect_field_name=REDIRECT_FIELD_NAME): redirect_to = request.REQUEST.get(redirect_field_name, urlresolvers.reverse('index')) if request.method == 'POST': form = AuthenticationRememberMeForm(data=request.POST, ) if form.is_valid(): if not redirect_to or '//' in redirect_to or ' ' in redirect_to: redirect_to = settings.BASE_URL + '/' if not form.cleaned_data['remember_me']: request.session.set_expiry(0) from django.contrib.auth import login login(request, form.get_user()) if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponseRedirect(redirect_to) else: form = AuthenticationRememberMeForm(request, ) request.session.set_test_cookie() if Site._meta.installed: current_site = Site.objects.get_current() else: current_site = RequestSite(request) page = { 'robots': 'noindex,nofollow', 'favicon': settings.FAVICON, 'theme': common.get_theme(request), } return render_to_response(template_name, { 'page': page, 'form': form, 'site': current_site, 'site_name': current_site.name, 'is_secure': request.is_secure(), redirect_field_name: redirect_to }, context_instance=RequestContext(request))
def login(request, template_name='login.html', redirect_field_name=REDIRECT_FIELD_NAME): redirect_to = request.REQUEST.get(redirect_field_name, urlresolvers.reverse('index')) if request.method == 'POST': form = AuthenticationRememberMeForm(data=request.POST,) if form.is_valid(): if not redirect_to or '//' in redirect_to or ' ' in redirect_to: redirect_to = settings.BASE_URL + '/' if not form.cleaned_data['remember_me']: request.session.set_expiry(0) from django.contrib.auth import login login(request, form.get_user()) if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponseRedirect(redirect_to) else: form = AuthenticationRememberMeForm(request,) request.session.set_test_cookie() if Site._meta.installed: current_site = Site.objects.get_current() else: current_site = RequestSite(request) page = { 'robots': 'noindex,nofollow', 'favicon': settings.FAVICON, 'theme': common.get_theme(request), } return render_to_response(template_name, {'page': page, 'form': form, 'site': current_site, 'site_name': current_site.name, 'is_secure': request.is_secure(), redirect_field_name: redirect_to}, context_instance=RequestContext(request))
def services(request, **args): authed = request.user.is_authenticated() and request.user.is_staff if not authed: return HttpResponseForbidden() page = { 'robots': 'noindex', 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'themes': settings.THEMES, 'fb_app_id': settings.FACEBOOK_APP_ID, 'themes_more': True if len(settings.THEMES) > 1 else False, 'theme': common.get_theme(request), 'title': _('Services - Settings'), 'menu': 'services', } services = Service.objects.all().order_by('api', 'name') return render_to_response( 'services.html', {'page': page, 'authed': authed, 'is_secure': request.is_secure(), 'user': request.user, 'services_supported': API_LIST, 'services': services})
def index(request, **args): site_url = '%s://%s' % (request.is_secure() and 'https' or 'http', request.get_host()) page = { 'ctx': args.get('ctx', ''), 'backtime': True, 'robots': 'index', 'public': False, 'site_url': site_url, 'base_url': settings.BASE_URL, 'login_url': settings.LOGIN_URL, 'favicon': settings.FAVICON, 'author_name': settings.FEED_AUTHOR_NAME, 'author_uri': getattr(settings, 'FEED_AUTHOR_URI', False), 'taguri': settings.FEED_TAGURI, 'icon': settings.FEED_ICON, 'maps_engine': settings.MAPS_ENGINE, 'fb_app_id': settings.FACEBOOK_APP_ID, 'pshb_hubs': settings.PSHB_HUBS, } authed = request.user.is_authenticated() and request.user.is_staff friend = request.user.is_authenticated() and not request.user.is_staff urlparams = [] entries_on_page = settings.ENTRIES_ON_PAGE entries_orderby = 'date_published' # Entries filter. fs = {'active': True, 'service__home': True} # Filter by dates. year = int(args.get('year', 0)) month = int(args.get('month', 0)) day = int(args.get('day', 0)) if year: fs[entries_orderby + '__year'] = year if month: fs[entries_orderby + '__month'] = month if day: fs[entries_orderby + '__day'] = day if year and month and day: dt = datetime.date(year, month, day).strftime('%Y/%m/%d') elif year and month: dt = datetime.date(year, month, 1) prev, next = pn_month_start(dt) page['month_nav'] = True page['month_prev'] = prev.strftime('%Y/%m') page['month_next'] = next.strftime('%Y/%m') dt = dt.strftime('%Y/%m') elif year: dt = datetime.date(year, 1, 1).strftime('%Y') if year: page['backtime'] = False page['title'] = dt page['subtitle'] = _('You are currently browsing the archive for %s' ) % ('<b>' + dt + '</b>') page['robots'] = 'noindex' if page['backtime']: entries = Entry.objects.order_by('-' + entries_orderby) else: entries = Entry.objects.order_by(entries_orderby) if not authed: fs['draft'] = False if not authed or page['ctx'] == 'public': fs['service__public'] = True page['public'] = True # Filter for favorites. if page['ctx'] == 'favorites': if not authed: return HttpResponseRedirect(settings.BASE_URL + '/') favs = Favorite.objects.filter(user__id=request.user.id) page['favorites'] = True page['title'] = _('Favorites') page['subtitle'] = _( 'You are currently browsing your favorite entries') fs['id__in'] = favs.values('entry') # Filter lists. elif 'list' in args: try: services = List.objects.get(user__id=request.user.id, slug=args['list']).services del fs['service__home'] fs['service__id__in'] = services.values('id') page['ctx'] = 'list/' + args['list'] page['title'] = args['list'] page['subtitle'] = _( 'You are currently browsing entries from %s list only.') % ( '<b>' + args['list'] + '</b>') except List.DoesNotExist: if authed: raise Http404 # Filter for exactly one given entry. elif 'entry' in args: fs['id__exact'] = int(args['entry']) page['exactentry'] = True if authed and 'service__public' in fs: del fs['service__public'] if not authed: page['ctx'] = '' # Filter by class type. cls = request.GET.get('class', 'all') if cls != 'all': fs['service__cls'] = cls urlparams.append('class=' + cls) page['robots'] = 'noindex' if 'subtitle' in page: page['subtitle'] += ' <b>(%s)</b>' % escape(cls.capitalize()) else: page['subtitle'] = _('You are currently browsing %s entries only.' ) % ('<b>' + escape(cls) + '</b>') # Filter by author name. author = request.GET.get('author', 'all') if author != 'all': fs['author_name'] = author urlparams.append('author=' + author) page['robots'] = 'noindex' # Filter by service type. srvapi = request.GET.get('service', 'all') if srvapi != 'all': fs['service__api'] = srvapi urlparams.append('service=' + srvapi) page['robots'] = 'noindex' srvapi_name = dict(API_LIST).get(srvapi, srvapi.capitalize()) if 'subtitle' in page: page['subtitle'] += ' <b>(%s)</b>' % escape(srvapi_name) else: page['subtitle'] = _( 'You are currently browsing entries from %s service only.') % ( '<b>' + escape(srvapi_name) + '</b>') # Filter entries after specified timestamp 'start'. after = False start = request.GET.get('start', False) if start: qs = fs.copy() try: dt = datetime.datetime.fromtimestamp(float(start)) except ValueError: raise Http404 if page['backtime']: fs[entries_orderby + '__lte'] = dt qs[entries_orderby + '__gt'] = fs[entries_orderby + '__lte'] q = Entry.objects.order_by(entries_orderby) else: fs[entries_orderby + '__gte'] = dt qs[entries_orderby + '__lt'] = fs[entries_orderby + '__gte'] q = Entry.objects.order_by('-' + entries_orderby) q = q.filter(**qs)[0:entries_on_page].values(entries_orderby) if len(q): after = q[len(q) - 1][entries_orderby] after = int(time.mktime(after.timetuple())) page['title'] = '%s' % str(dt)[0:-3] page['robots'] = 'noindex' # Search/Query entries. search_enable = getattr(settings, 'SEARCH_ENABLE', False) search_engine = getattr(settings, 'SEARCH_ENGINE', 'sphinx') search_query = request.GET.get('s', '') if search_query != '' and search_enable: page['search'] = search_query page['title'] = 'Search Results for %s' % escape(search_query) page['subtitle'] = _( 'Your search for %s returned the following results.') % ( '<b>' + escape(search_query) + '</b>') urlparams.append('s=' + search_query) sfs = {} if not authed and not friend: sfs['friends_only'] = False page_number = int(request.GET.get('page', 1)) offset = (page_number - 1) * entries_on_page try: if search_engine == 'sphinx': select = "SELECT * FROM %s WHERE MATCH('%s')" if page['public']: select += ' AND public=1' if 'friends_only' in sfs and sfs['friends_only'] == False: select += ' AND friends_only=0' select += ' LIMIT 1000' cursor = connections['sphinx'].cursor() cursor.execute(select % (settings.SPHINX_INDEX_NAME, search_query)) res = __dictfetchall(cursor) uids = [ent['id'] for ent in res] entries = entries.filter(id__in=uids).select_related() else: # db search if page['public']: sfs['service__public'] = True sfs['content__icontains'] = search_query entries = entries.filter(**sfs).select_related() limit = offset + entries_on_page if offset >= entries_on_page: page['prevpage'] = page_number - 1 if limit < entries.count(): page['nextpage'] = page_number + 1 entries = entries[offset:limit] except: entries = [] start = False # If not search, then normal query. else: entries = entries.filter(**fs)[0:entries_on_page + 1].select_related() num = len(entries) if 'exactentry' in page and num: page['title'] = truncatewords(entries[0].title, 7) # Time-based pagination. if num > entries_on_page: start = entries[num - 1].__getattribute__(entries_orderby) start = int(time.mktime(start.timetuple())) else: start = False entries = entries[0:entries_on_page] if num: crymax = entries[0].date_published.year crymin = entries[len(entries) - 1].date_published.year if crymin != crymax: page['copyright_years'] = '%s-%s' % (crymin, crymax) else: page['copyright_years'] = crymin # Build URL params for links. if len(urlparams): urlparams = '?' + reduce( lambda x, y: six.text_type(x) + '&' + six.text_type(y), urlparams, '')[1:] + '&' else: urlparams = '?' if len(entries): page['updated'] = entries[0].date_published else: page['updated'] = datetime.datetime.utcnow() page['urlparams'] = urlparams page['start'] = start page['after'] = after if hasattr(settings, 'STREAM_TITLE'): page_title = settings.STREAM_TITLE else: page_title = None if hasattr(settings, 'STREAM_DESCRIPTION'): page['description'] = settings.STREAM_DESCRIPTION # Set page theme. page['themes'] = settings.THEMES page['themes_more'] = True if len(settings.THEMES) > 1 else False page['theme'] = common.get_theme(request) # Setup links. page['need_fbc'] = False for entry in entries: entry.only_for_friends = entry.friends_only if authed or friend: entry.friends_only = False elif entry.friends_only: page['need_fbc'] = True if not entry.friends_only: entry.gls_link = '%s/%s' % (urlresolvers.reverse( 'entry', args=[entry.id ]), gls_slugify(truncatewords(entry.title, 7))) else: entry.gls_link = '%s/' % (urlresolvers.reverse('entry', args=[entry.id])) if 'title' in page: del page['title'] entry.gls_absolute_link = '%s%s' % (page['site_url'], entry.gls_link) # Check single-entry URL if 'exactentry' in page: if len(entries): gls_link = entries[0].gls_link if gls_link != request.path: return HttpResponsePermanentRedirect(gls_link) page['canonical_link'] = urllib.parse.urljoin( settings.BASE_URL, gls_link) else: raise Http404 if 'title' in page and page['title'] != '': if page_title: page['title'] += getattr(settings, 'STREAM_TITLE_SUFFIX', ' | ' + page_title) elif page_title: page['title'] = page_title # Pickup right output format and finish. format = request.GET.get('format', 'html') if format == 'atom': return render_to_response('stream.atom', { 'entries': entries, 'page': page }, content_type='application/atom+xml') elif format == 'json': cb = request.GET.get('callback', False) return render_to_response('stream.json', { 'entries': entries, 'page': page, 'callback': cb }, content_type='application/json') elif format == 'html-pure' and request.is_ajax(): # Check which entry is already favorite. if authed and page['ctx'] != 'favorites': ents = [entry.id for entry in entries] favs = Favorite.objects.filter(user__id=request.user.id, entry__id__in=ents) favs = [f.entry_id for f in favs] for entry in entries: if entry.id in favs: entry.fav = True if entry.service.api in ('twitter', 'identica'): entry.sms = True d = { 'next': page['start'], 'stream': strip_spaces_between_tags( render_to_string( 'stream-pure.html', { 'entries': entries, 'page': page, 'authed': authed, 'friend': friend })), } if 'nextpage' in page: d['next'] = page['nextpage'] return HttpResponse(json.dumps(d), content_type='application/json') elif format != 'html': raise Http404 else: # Check which entry is already favorite. if authed and page['ctx'] != 'favorites': ents = [entry.id for entry in entries] favs = Favorite.objects.filter(user__id=request.user.id, entry__id__in=ents) favs = [f.entry_id for f in favs] for entry in entries: if entry.id in favs: entry.fav = True if entry.service.api in ('twitter', 'identica'): entry.sms = True # Get lists. lists = List.objects.filter(user__id=request.user.id).order_by('name') # Get archives. if 'entry' in args: qs = {} else: qs = fs.copy() if year: del qs[entries_orderby + '__year'] if month: del qs[entries_orderby + '__month'] if day: del qs[entries_orderby + '__day'] archs = Entry.objects.filter(**qs).dates('date_published', 'month', order='DESC') page['months12'] = [datetime.date(2010, x, 1) for x in range(1, 13)] # List available classes. fs = {} if not authed or page['ctx'] == 'public': fs['public'] = True _classes = Service.objects.filter (**fs).order_by ('id')\ .values('api', 'cls') classes = {} for item in _classes: if item['cls'] not in classes: classes[item['cls']] = item classes = list(classes.values()) accept_lang = request.META.get('HTTP_ACCEPT_LANGUAGE', '').split(',') for i, lang in enumerate(accept_lang): accept_lang[i] = lang.split(';')[0] page['lang'] = accept_lang[0] request.user.fb_username = request.session.get('fb_username', '') request.user.fb_profile_url = request.session.get('fb_profile_url', '') res = render_to_response( 'stream.html', { 'classes': classes, 'entries': entries, 'lists': lists, 'archives': archs, 'page': page, 'authed': authed, 'friend': friend, 'has_search': search_enable, 'is_secure': request.is_secure(), 'user': request.user }) res['X-XRDS-Location'] = request.build_absolute_uri( urlresolvers.reverse('glifestream.gauth.views.xrds')) return res
def oauth(request, **args): authed = request.user.is_authenticated() and request.user.is_staff if not authed: return HttpResponseForbidden() page = { 'base_url': settings.BASE_URL, 'favicon': settings.FAVICON, 'theme': common.get_theme(request), 'title': _('OAuth - Settings'), } apis_help = { 'twitter': 'http://dev.twitter.com/pages/auth', 'friendfeed': 'http://friendfeed.com/api/documentation#authentication', } v = {} id = args['id'] callback_url = request.build_absolute_uri( urlresolvers.reverse('glifestream.usettings.views.oauth', args=[id])) service = Service.objects.get(id=id) c = gls_oauth.OAuth1Client(service=service, identifier=request.POST.get('identifier'), secret=request.POST.get('secret'), callback_url=callback_url) if c.db.phase == 0 and (not c.request_token_url or not c.authorize_url or not c.access_token_url): v['request_token_url'] = request.POST.get('request_token_url', '') v['authorize_url'] = request.POST.get('authorize_url', '') v['access_token_url'] = request.POST.get('access_token_url', '') page['need_custom_urls'] = True if 'reset' in request.POST: c.reset() c.save() elif request.method == 'POST': if c.db.phase == 0: if not c.request_token_url: c.set_urls(v['request_token_url'], v['authorize_url'], v['access_token_url']) try: c.get_request_token() except Exception as e: page['msg'] = e c.save() if c.db.phase == 1: return HttpResponseRedirect(c.get_authorize_url()) if request.method == 'GET': if c.db.phase == 1: if request.GET.get('oauth_token', '') == c.db.token: c.consumer.parse_authorization_response( request.get_full_path()) c.verifier = request.GET.get('oauth_verifier', None) c.db.phase = 2 if c.db.phase == 2: try: c.get_access_token() c.save() return HttpResponseRedirect(urlresolvers.reverse( 'glifestream.usettings.views.oauth', args=[id])) except Exception as e: page['msg'] = e api_help = apis_help.get(service.api, 'http://oauth.net/documentation/getting-started/') return render_to_response('oauth.html', {'page': page, 'is_secure': request.is_secure(), 'title': six.text_type(service), 'api_help': api_help, 'callback_url': callback_url, 'phase': c.db.phase, 'v': v, })
def openid(request, template_name='openid.html', redirect_field_name=REDIRECT_FIELD_NAME): msg = None redirect_to = urlresolvers.reverse('index') if not redirect_to or '//' in redirect_to or ' ' in redirect_to: redirect_to = settings.BASE_URL + '/' if not gls_openid.openid: return HttpResponseRedirect(redirect_to) if request.method == 'POST': form = OpenIdForm(data=request.POST,) if form.is_valid(): if not form.cleaned_data['remember_me']: request.session.set_expiry(0) rs = gls_openid.start(request, form.cleaned_data['openid_identifier']) if 'res' in rs: return rs['res'] elif 'msg' in rs: msg = rs['msg'] else: msg = _('Invalid OpenID identifier') elif request.method == 'GET': if request.GET.get('openid.mode', None): rs = gls_openid.finish(request) if 'msg' in rs: msg = rs['msg'] elif 'identity_url' in rs: try: db = OpenId.objects.get(identity=rs['identity_url']) if db: user = db.user user.backend = 'django.contrib.auth.backends.ModelBackend' if user.is_active: from django.contrib.auth import login login(request, user) if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponseRedirect(redirect_to) except OpenId.DoesNotExist: pass msg = _('OpenID account match error') form = OpenIdForm(request,) request.session.set_test_cookie() if Site._meta.installed: current_site = Site.objects.get_current() else: current_site = RequestSite(request) page = { 'robots': 'noindex,nofollow', 'favicon': settings.FAVICON, 'theme': common.get_theme(request), 'msg': msg, } return render_to_response(template_name, {'page': page, 'form': form, 'site': current_site, 'site_name': current_site.name, 'is_secure': request.is_secure(), redirect_field_name: redirect_to}, context_instance=RequestContext(request))
def openid(request, template_name='openid.html', redirect_field_name=REDIRECT_FIELD_NAME): msg = None redirect_to = urlresolvers.reverse('index') if not redirect_to or '//' in redirect_to or ' ' in redirect_to: redirect_to = settings.BASE_URL + '/' if not gls_openid.openid: return HttpResponseRedirect(redirect_to) if request.method == 'POST': form = OpenIdForm(data=request.POST, ) if form.is_valid(): if not form.cleaned_data['remember_me']: request.session.set_expiry(0) rs = gls_openid.start(request, form.cleaned_data['openid_identifier']) if 'res' in rs: return rs['res'] elif 'msg' in rs: msg = rs['msg'] else: msg = _('Invalid OpenID identifier') elif request.method == 'GET': if request.GET.get('openid.mode', None): rs = gls_openid.finish(request) if 'msg' in rs: msg = rs['msg'] elif 'identity_url' in rs: try: db = OpenId.objects.get(identity=rs['identity_url']) if db: user = db.user user.backend = 'django.contrib.auth.backends.ModelBackend' if user.is_active: from django.contrib.auth import login login(request, user) if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponseRedirect(redirect_to) except OpenId.DoesNotExist: pass msg = _('OpenID account match error') form = OpenIdForm(request, ) request.session.set_test_cookie() if Site._meta.installed: current_site = Site.objects.get_current() else: current_site = RequestSite(request) page = { 'robots': 'noindex,nofollow', 'favicon': settings.FAVICON, 'theme': common.get_theme(request), 'msg': msg, } return render_to_response(template_name, { 'page': page, 'form': form, 'site': current_site, 'site_name': current_site.name, 'is_secure': request.is_secure(), redirect_field_name: redirect_to }, context_instance=RequestContext(request))
def index(request, **args): site_url = '%s://%s' % (request.is_secure() and 'https' or 'http', request.get_host()) page = { 'ctx': args.get('ctx', ''), 'backtime': True, 'robots': 'index', 'public': False, 'site_url': site_url, 'base_url': settings.BASE_URL, 'login_url': settings.LOGIN_URL, 'favicon': settings.FAVICON, 'author_name': settings.FEED_AUTHOR_NAME, 'author_uri': getattr(settings, 'FEED_AUTHOR_URI', False), 'taguri': settings.FEED_TAGURI, 'icon': settings.FEED_ICON, 'maps_engine': settings.MAPS_ENGINE, 'fb_app_id': settings.FACEBOOK_APP_ID, 'pshb_hubs': settings.PSHB_HUBS, } authed = request.user.is_authenticated() and request.user.is_staff friend = request.user.is_authenticated() and not request.user.is_staff urlparams = [] entries_on_page = settings.ENTRIES_ON_PAGE entries_orderby = 'date_published' # Entries filter. fs = {'active': True, 'service__home': True} # Filter by dates. year = int(args.get('year', 0)) month = int(args.get('month', 0)) day = int(args.get('day', 0)) if year: fs[entries_orderby + '__year'] = year if month: fs[entries_orderby + '__month'] = month if day: fs[entries_orderby + '__day'] = day if year and month and day: dt = datetime.date(year, month, day).strftime('%Y/%m/%d') elif year and month: dt = datetime.date(year, month, 1) prev, next = pn_month_start(dt) page['month_nav'] = True page['month_prev'] = prev.strftime('%Y/%m') page['month_next'] = next.strftime('%Y/%m') dt = dt.strftime('%Y/%m') elif year: dt = datetime.date(year, 1, 1).strftime('%Y') if year: page['backtime'] = False page['title'] = dt page['subtitle'] = _( 'You are currently browsing the archive for %s') % ('<b>' + dt + '</b>') page['robots'] = 'noindex' if page['backtime']: entries = Entry.objects.order_by('-' + entries_orderby) else: entries = Entry.objects.order_by(entries_orderby) if not authed: fs['draft'] = False if not authed or page['ctx'] == 'public': fs['service__public'] = True page['public'] = True # Filter for favorites. if page['ctx'] == 'favorites': if not authed: return HttpResponseRedirect(settings.BASE_URL + '/') favs = Favorite.objects.filter(user__id=request.user.id) page['favorites'] = True page['title'] = _('Favorites') page['subtitle'] = _( 'You are currently browsing your favorite entries') fs['id__in'] = favs.values('entry') # Filter lists. elif 'list' in args: try: services = List.objects.get(user__id=request.user.id, slug=args['list']).services del fs['service__home'] fs['service__id__in'] = services.values('id') page['ctx'] = 'list/' + args['list'] page['title'] = args['list'] page['subtitle'] = _('You are currently browsing entries from %s list only.') % ( '<b>' + args['list'] + '</b>') except List.DoesNotExist: if authed: raise Http404 # Filter for exactly one given entry. elif 'entry' in args: fs['id__exact'] = int(args['entry']) page['exactentry'] = True if authed and 'service__public' in fs: del fs['service__public'] if not authed: page['ctx'] = '' # Filter by class type. cls = request.GET.get('class', 'all') if cls != 'all': fs['service__cls'] = cls urlparams.append('class=' + cls) page['robots'] = 'noindex' if 'subtitle' in page: page['subtitle'] += ' <b>(%s)</b>' % escape(cls.capitalize()) else: page['subtitle'] = _('You are currently browsing %s entries only.') % ( '<b>' + escape(cls) + '</b>') # Filter by author name. author = request.GET.get('author', 'all') if author != 'all': fs['author_name'] = author urlparams.append('author=' + author) page['robots'] = 'noindex' # Filter by service type. srvapi = request.GET.get('service', 'all') if srvapi != 'all': fs['service__api'] = srvapi urlparams.append('service=' + srvapi) page['robots'] = 'noindex' srvapi_name = dict(API_LIST).get(srvapi, srvapi.capitalize()) if 'subtitle' in page: page['subtitle'] += ' <b>(%s)</b>' % escape(srvapi_name) else: page['subtitle'] = _('You are currently browsing entries from %s service only.') % ( '<b>' + escape(srvapi_name) + '</b>') # Filter entries after specified timestamp 'start'. after = False start = request.GET.get('start', False) if start: qs = fs.copy() try: dt = datetime.datetime.fromtimestamp(float(start)) except ValueError: raise Http404 if page['backtime']: fs[entries_orderby + '__lte'] = dt qs[entries_orderby + '__gt'] = fs[entries_orderby + '__lte'] q = Entry.objects.order_by(entries_orderby) else: fs[entries_orderby + '__gte'] = dt qs[entries_orderby + '__lt'] = fs[entries_orderby + '__gte'] q = Entry.objects.order_by('-' + entries_orderby) q = q.filter(**qs)[0:entries_on_page].values(entries_orderby) if len(q): after = q[len(q) - 1][entries_orderby] after = int(time.mktime(after.timetuple())) page['title'] = '%s' % str(dt)[0:-3] page['robots'] = 'noindex' # Search/Query entries. search_enable = getattr(settings, 'SEARCH_ENABLE', False) search_engine = getattr(settings, 'SEARCH_ENGINE', 'sphinx') search_query = request.GET.get('s', '') if search_query != '' and search_enable: page['search'] = search_query page['title'] = 'Search Results for %s' % escape(search_query) page['subtitle'] = _('Your search for %s returned the following results.') % ( '<b>' + escape(search_query) + '</b>') urlparams.append('s=' + search_query) sfs = {} if not authed and not friend: sfs['friends_only'] = False page_number = int(request.GET.get('page', 1)) offset = (page_number - 1) * entries_on_page try: if search_engine == 'sphinx': select = "SELECT * FROM %s WHERE MATCH('%s')" if page['public']: select += ' AND public=1' if 'friends_only' in sfs and sfs['friends_only'] == False: select += ' AND friends_only=0' select += ' LIMIT 1000' cursor = connections['sphinx'].cursor() cursor.execute(select % (settings.SPHINX_INDEX_NAME, search_query)) res = __dictfetchall(cursor) uids = [ent['id'] for ent in res] entries = entries.filter(id__in=uids).select_related() else: # db search if page['public']: sfs['service__public'] = True sfs['content__icontains'] = search_query entries = entries.filter(**sfs).select_related() limit = offset + entries_on_page if offset >= entries_on_page: page['prevpage'] = page_number - 1 if limit < entries.count(): page['nextpage'] = page_number + 1 entries = entries[offset:limit] except: entries = [] start = False # If not search, then normal query. else: entries = entries.filter(**fs)[0:entries_on_page + 1].select_related() num = len(entries) if 'exactentry' in page and num: page['title'] = truncatewords(entries[0].title, 7) # Time-based pagination. if num > entries_on_page: start = entries[num - 1].__getattribute__(entries_orderby) start = int(time.mktime(start.timetuple())) else: start = False entries = entries[0:entries_on_page] if num: crymax = entries[0].date_published.year crymin = entries[len(entries) - 1].date_published.year if crymin != crymax: page['copyright_years'] = '%s-%s' % (crymin, crymax) else: page['copyright_years'] = crymin # Build URL params for links. if len(urlparams): urlparams = '?' + reduce(lambda x, y: six.text_type(x) + '&' + six.text_type(y), urlparams, '')[1:] + '&' else: urlparams = '?' if len(entries): page['updated'] = entries[0].date_published else: page['updated'] = datetime.datetime.utcnow() page['urlparams'] = urlparams page['start'] = start page['after'] = after if hasattr(settings, 'STREAM_TITLE'): page_title = settings.STREAM_TITLE else: page_title = None if hasattr(settings, 'STREAM_DESCRIPTION'): page['description'] = settings.STREAM_DESCRIPTION # Set page theme. page['themes'] = settings.THEMES page['themes_more'] = True if len(settings.THEMES) > 1 else False page['theme'] = common.get_theme(request) # Setup links. page['need_fbc'] = False for entry in entries: entry.only_for_friends = entry.friends_only if authed or friend: entry.friends_only = False elif entry.friends_only: page['need_fbc'] = True if not entry.friends_only: entry.gls_link = '%s/%s' % (urlresolvers.reverse('entry', args=[entry.id]), gls_slugify(truncatewords(entry.title, 7))) else: entry.gls_link = '%s/' % ( urlresolvers.reverse('entry', args=[entry.id])) if 'title' in page: del page['title'] entry.gls_absolute_link = '%s%s' % (page['site_url'], entry.gls_link) # Check single-entry URL if 'exactentry' in page: if len(entries): gls_link = entries[0].gls_link if gls_link != request.path: return HttpResponsePermanentRedirect(gls_link) page['canonical_link'] = urllib.parse.urljoin( settings.BASE_URL, gls_link) else: raise Http404 if 'title' in page and page['title'] != '': if page_title: page['title'] += getattr(settings, 'STREAM_TITLE_SUFFIX', ' | ' + page_title) elif page_title: page['title'] = page_title # Pickup right output format and finish. format = request.GET.get('format', 'html') if format == 'atom': return render_to_response('stream.atom', {'entries': entries, 'page': page}, content_type='application/atom+xml') elif format == 'json': cb = request.GET.get('callback', False) return render_to_response('stream.json', {'entries': entries, 'page': page, 'callback': cb}, content_type='application/json') elif format == 'html-pure' and request.is_ajax(): # Check which entry is already favorite. if authed and page['ctx'] != 'favorites': ents = [entry.id for entry in entries] favs = Favorite.objects.filter(user__id=request.user.id, entry__id__in=ents) favs = [f.entry_id for f in favs] for entry in entries: if entry.id in favs: entry.fav = True if entry.service.api in ('twitter', 'identica'): entry.sms = True d = { 'next': page['start'], 'stream': strip_spaces_between_tags( render_to_string('stream-pure.html', {'entries': entries, 'page': page, 'authed': authed, 'friend': friend})), } if 'nextpage' in page: d['next'] = page['nextpage'] return HttpResponse(json.dumps(d), content_type='application/json') elif format != 'html': raise Http404 else: # Check which entry is already favorite. if authed and page['ctx'] != 'favorites': ents = [entry.id for entry in entries] favs = Favorite.objects.filter(user__id=request.user.id, entry__id__in=ents) favs = [f.entry_id for f in favs] for entry in entries: if entry.id in favs: entry.fav = True if entry.service.api in ('twitter', 'identica'): entry.sms = True # Get lists. lists = List.objects.filter( user__id=request.user.id).order_by('name') # Get archives. if 'entry' in args: qs = {} else: qs = fs.copy() if year: del qs[entries_orderby + '__year'] if month: del qs[entries_orderby + '__month'] if day: del qs[entries_orderby + '__day'] archs = Entry.objects.filter(**qs).dates('date_published', 'month', order='DESC') page['months12'] = [datetime.date(2010, x, 1) for x in range(1, 13)] # List available classes. fs = {} if not authed or page['ctx'] == 'public': fs['public'] = True _classes = Service.objects.filter (**fs).order_by ('id')\ .values('api', 'cls') classes = {} for item in _classes: if item['cls'] not in classes: classes[item['cls']] = item classes = list(classes.values()) accept_lang = request.META.get('HTTP_ACCEPT_LANGUAGE', '').split(',') for i, lang in enumerate(accept_lang): accept_lang[i] = lang.split(';')[0] page['lang'] = accept_lang[0] request.user.fb_username = request.session.get('fb_username', '') request.user.fb_profile_url = request.session.get( 'fb_profile_url', '') res = render_to_response('stream.html', {'classes': classes, 'entries': entries, 'lists': lists, 'archives': archs, 'page': page, 'authed': authed, 'friend': friend, 'has_search': search_enable, 'is_secure': request.is_secure(), 'user': request.user}) res['X-XRDS-Location'] = request.build_absolute_uri( urlresolvers.reverse('glifestream.gauth.views.xrds')) return res