# Middleware import hmac, sha, base64, os from django.shortcuts import render_to_response from django.template import RequestContext from django.http import HttpResponseRedirect, HttpResponse from django.utils.translation import ugettext as _ class ProtectAntiRobotsMiddleware(object): def process_request(self, request): if request.get_full_path().startswith('/protectantirobots/'): if request.get_full_path() == '/protectantirobots/img/': s = base64.b64decode(request.session['protectantirobots_key']) size = (100,30) img = Image.new("RGB", size, "white") draw = ImageDraw.Draw(img) font = ImageFont.truetype(os.path.dirname(__file__)+"/FreeSansBold.ttf", 24) draw.text((2,2), s, fill="red", font=font) draw.line((0, 0) + img.size, fill=128) draw.line((0, img.size[1], img.size[0], 0), fill=128) del draw ret = HttpResponse(mimetype='image/gif') img.save(ret, "GIF") return ret elif 'k' in request.GET: if request.POST: n = request.POST['n'] sec = base64.b64decode(request.session['protectantirobots_key']) if n == sec: request.session['protectantirobots_sec'] = sec return HttpResponseRedirect(request.session['protectantirobots_referer']) return render_to_response( 'protectantirobots.html', {'msg': _('Invalid number!')}, context_instance=RequestContext(request), ) else: request.session['protectantirobots_key'] = request.REQUEST['k'] request.session['protectantirobots_referer'] = request.META.get('HTTP_REFERER', '') return render_to_response( 'protectantirobots.html', locals(), context_instance=RequestContext(request), ) # Template tag import base64 from datetime import datetime, timedelta from django.template import Library, Node from django.utils.translation import ugettext as _ class ProtectAntiRobotsNode(Node): nodelist = '' def __init__(self, nodelist): super(ProtectAntiRobotsNode, self).__init__() self.nodelist = nodelist def __repr__(self): return "" def render(self, context): request = context['request'] if 'protectantirobots_sec' in request.session and \ 'protectantirobots_key' in request.session: if request.session['protectantirobots_sec'] == base64.b64decode(request.session['protectantirobots_key']): output = self.nodelist.render(context) return output sec = base64.b64encode(datetime.now().strftime("%H%m%S")) return '%s' %(self.get_url(sec), _('Let us know if you are human')) def get_url(self, sec): return "/protectantirobots/?k=" + sec def do_protectantirobots(parser, token): nodelist = parser.parse(('endprotectantirobots',)) parser.delete_first_token() return ProtectAntiRobotsNode(nodelist) do_protectantirobots= register.tag('protectantirobots', do_protectantirobots) # Template (protectantirobots.html file) - you can change layout and other things What number is this?
{% if msg %} {{ msg }} {% endif %}