Esempio n. 1
0
class ApiHandlerMixin(object):

    handler_cls = None
    path = "/"

    def setUp(self):
        super(ApiHandlerMixin, self).setUp()
        # Create a WSGI application.
        app = webapp2.WSGIApplication([(self.path, self.handler_cls)])
        # Wrap the app with WebTest’s TestApp.
        self.testapp = webtest.TestApp(app)
        self._default_access = AppAccess(secret="meine weihnacht").put()

    def _sign(self, method, url, params, key=None, secret=None):
        if not key:
            key = self._default_access.urlsafe()
        if not secret:
            secret = self._default_access.get().secret.encode("utf-8")
        params["_key"] = key
        encoded = urllib.urlencode(params)
        query = "&".join((method.upper(), url, encoded))
        encoded += "&_signature=" + urllib.quote(binascii.b2a_base64(
                hmac.new(secret, query, hashlib.sha256).digest()))
        return encoded

    def ResetKindMap(self):
        # we run on live models
        pass

    def get(self, key=None, secret=None, status=None,
                expect_errors=False, **params):
        signed_url = self._sign("GET", "http://localhost" + self.path,
                    params, key, secret)
        return self.testapp.get(self.path, status=status,
                    expect_errors=expect_errors, params=signed_url)

    def post(self, key=None, secret=None, status=None,
                expect_errors=False, **params):
        signed_url = self._sign("POST", "http://localhost" + self.path,
                    params, key, secret)
        return self.testapp.post(self.path, status=status,
                    expect_errors=expect_errors, params=signed_url)