]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/sitemap.py
fix breach in award points that allows user to award infinite points / extra fix
[osqa.git] / forum / sitemap.py
index 4478176b07143b17711fb6b38bd09519ab96abf1..26e9d18b443fba9230e6e10ab67e4de67c9341aa 100644 (file)
@@ -1,21 +1,28 @@
+import re
+
 from django.contrib.sitemaps import Sitemap
 from forum.models import Question
 from django.contrib.sitemaps import Sitemap
 from forum.models import Question
+from forum.settings import QUESTIONS_SITEMAP_LIMIT, QUESTIONS_SITEMAP_CHANGEFREQ
 from django.conf import settings
 from django.http import HttpResponse, Http404
 from django.template import loader
 from django.core import urlresolvers
 from django.conf import settings
 from django.http import HttpResponse, Http404
 from django.template import loader
 from django.core import urlresolvers
+from django.core.urlresolvers import get_script_prefix
 from django.utils.encoding import smart_str
 from django.core.paginator import EmptyPage, PageNotAnInteger
 
 def index(request, sitemaps):
     sites = []
 from django.utils.encoding import smart_str
 from django.core.paginator import EmptyPage, PageNotAnInteger
 
 def index(request, sitemaps):
     sites = []
-    for section, site in sitemaps.items():
-        if callable(site):
-            pages = site().paginator.num_pages
-        else:
-            pages = site.paginator.num_pages
-        sitemap_url = urlresolvers.reverse('sitemap_section_index', kwargs={'section': section})
-        sites.append('%s%s' % (settings.APP_URL, sitemap_url))
+    for section in sitemaps.keys():
+        sitemap_url = urlresolvers.reverse('sitemap_section_index', prefix='/', kwargs={'section': section})
+
+        # Replace double forward slashes with single ones
+        final_url = '%s%s' % (settings.APP_URL, sitemap_url)
+        final_url = re.sub("/+", "/", final_url)
+        final_url = final_url.replace('http:/', 'http://')
+        final_url = final_url.replace('https:/', 'https://')
+
+        sites.append(final_url)
 
     xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
     return HttpResponse(xml, mimetype='application/xml')
 
     xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
     return HttpResponse(xml, mimetype='application/xml')
@@ -31,8 +38,11 @@ def sitemap_section_index(request, section, sitemaps):
     locations = []
 
     for page in paginator.page_range:
     locations = []
 
     for page in paginator.page_range:
-        location = urlresolvers.reverse('sitemap_section_page', kwargs={ 'page' : page, 'section' : section })
+        location = urlresolvers.reverse('sitemap_section_page', prefix='/', kwargs={ 'page' : page, 'section' : section })
         location = '%s%s' % (settings.APP_URL, location)
         location = '%s%s' % (settings.APP_URL, location)
+        location = re.sub("/+", "/", location)
+        location = location.replace('http:/', 'http://')
+        location = location.replace('https:/', 'https://')
         locations.append(location)
 
     xml = loader.render_to_string('sitemap_section_index.xml', { 'locations' : locations, })
         locations.append(location)
 
     xml = loader.render_to_string('sitemap_section_index.xml', { 'locations' : locations, })
@@ -61,8 +71,8 @@ def sitemap(request, sitemaps, section=None, page=1):
     return HttpResponse(xml, mimetype='application/xml')
 
 class OsqaSitemap(Sitemap):
     return HttpResponse(xml, mimetype='application/xml')
 
 class OsqaSitemap(Sitemap):
-    limit = 2500
-    changefreq = 'daily'
+    limit = QUESTIONS_SITEMAP_LIMIT
+    changefreq = QUESTIONS_SITEMAP_CHANGEFREQ
     priority = 0.5
     def items(self):
         return Question.objects.filter_state(deleted=False).order_by('id')
     priority = 0.5
     def items(self):
         return Question.objects.filter_state(deleted=False).order_by('id')
@@ -85,7 +95,9 @@ class OsqaSitemap(Sitemap):
     def get_urls(self, page=1):
         urls = []
         for item in self.paginator.page(page).object_list:
     def get_urls(self, page=1):
         urls = []
         for item in self.paginator.page(page).object_list:
-            loc = "%s%s" % (settings.APP_URL, self.__get('location', item))
+            root_relative_url = self.__get('location', item)
+            relative_url = root_relative_url[len(get_script_prefix()):]
+            loc = "%s/%s" % (settings.APP_URL, relative_url)
             url_info = {
                 'location':   loc,
                 'lastmod':    self.__get('lastmod', item, None),
             url_info = {
                 'location':   loc,
                 'lastmod':    self.__get('lastmod', item, None),