Example #1
0
 def check_votes(self, min_ratio=0.6):
     '''
     Check if this entity received sufficient positive votes.
     '''
     root_servers = Server.all()
     ratio = votes.filter(is_positive=True).count() / float(root_servers.count())
     if ratio >= min_ratio:
         self.is_active = True
         self.save()
         Queue.broadcast('request_entity', entity=self)
Example #2
0
    def process_request(self, request):
        request.server = Server.self()
        request.is_secured = False

        # Read potential headers
        content_encryption = request.META.get('HTTP_CONTENT_ENCRYPTION', None)
        server_fqdn = request.META.get('HTTP_SERVER_FQDN', None)

        # Got them
        if content_encryption and server_fqdn:

            print 'content_encryption', content_encryption
            print 'server_fqdn', server_fqdn

            # Lookup server
            try:
                request.client = Server.objects.get(fqdn=server_fqdn, is_active=True)
            except Server.DoesNotExist:
                return HttpResponseForbidden('Server not found.')

            # Chunked RSA-encrypted POST request
            if content_encryption.lower() == 'rsa-chunked':
                if request.method == 'POST':
                    chunks = request.POST.get('chunks', '')
                    # Decrypt POST-data
                    if chunks and chunks.isdigit():
                        chunks = int(chunks)
                        own_key = request.server._private_key
                        his_key = request.client._public_key

                        try:
                            post_decrypted = []
                            for chunk in xrange(0, chunks):
                                own = request.POST.get('his%d' % (chunk,)).decode('base64')
                                his = request.POST.get('own%d' % (chunk,)).decode('base64')
                                post_decrypted.append(request.server.decrypt(request.client, 
                                    his, own, his_key, own_key))
                        except RSAError, e:
                            return HttpResponseBadRequest('Content decryption failed: %r.' % (e, ))
                        except Exception: # for base64 decode
                            return HttpResponseBadRequest('Content decoding failed.')
                        
                        request.POST = QueryDict(''.join(post_decrypted),
                            request._encoding)
                        request.is_secured = True
                        del post_decrypted            

                    else:
                        return HttpResponseBadRequest('Content decoding failed.')
Example #3
0
def list_roots(request):
    return JsonResponse(roots=Server.get_roots())
Example #4
0
def pubkey(request):
    return HttpResponse(Server.self().key_public,
        content_type='text/plain')