Exchange encrypted JSON, not Python data.

This commit is contained in:
Nick Daly 2012-06-11 21:26:17 -05:00
parent 9bff19c827
commit f2b2af9f3b

View File

@ -22,8 +22,6 @@ We don't:
- Use a reasonable data-store. - Use a reasonable data-store.
- Have a decent control (rate-limiting) mechanism. - Have a decent control (rate-limiting) mechanism.
:FIXME: Remove sets and just do "key in" operations - it's annoying to remember
to convert to and from sets with every operation. Or just build a wrapper.
:TODO: add doctests :TODO: add doctests
:FIXME: allow multiple listeners and senders per protocol (with different :FIXME: allow multiple listeners and senders per protocol (with different
proxies) proxies)
@ -57,6 +55,7 @@ import cfg
from collections import defaultdict as DefaultDict from collections import defaultdict as DefaultDict
import gnupg import gnupg
import inspect import inspect
import json
import logging import logging
import re import re
import shelve import shelve
@ -299,8 +298,7 @@ class Santiago(object):
self.requests[host].add(service) self.requests[host].add(service)
request = self.gpg.encrypt( request = self.gpg.encrypt(
# TODO json this. json.dumps({ "host": host, "client": client,
str({ "host": host, "client": client,
"service": service, "locations": list(locations or ""), "service": service, "locations": list(locations or ""),
"reply_to": list(reply_to), "reply_to": list(reply_to),
"request_version": 1, "request_version": 1,
@ -379,7 +377,6 @@ class Santiago(object):
understand. understand.
""" """
# TODO json -> python
request = self.gpg.decrypt(request) request = self.gpg.decrypt(request)
# skip badly signed messages or ones for other folks. # skip badly signed messages or ones for other folks.
@ -390,7 +387,7 @@ class Santiago(object):
# copy out only required keys from request, throwing away cruft # copy out only required keys from request, throwing away cruft
request_body = dict() request_body = dict()
source = ast.literal_eval(str(request)) source = json.loads((str(request)))
try: try:
for key in Santiago.ALL_KEYS: for key in Santiago.ALL_KEYS:
request_body[key] = source[key] request_body[key] = source[key]
@ -404,7 +401,8 @@ class Santiago(object):
return return
# versions must overlap. # versions must overlap.
if not (Santiago.SUPPORTED_PROTOCOLS & request_body["reply_versions"]): if not (Santiago.SUPPORTED_PROTOCOLS &
set(request_body["reply_versions"])):
return return
if not (Santiago.SUPPORTED_PROTOCOLS & if not (Santiago.SUPPORTED_PROTOCOLS &
set([request_body["request_version"]])): set([request_body["request_version"]])):