+ def get_valid_transaction(self, provider, **kwargs):
+ try:
+ t = Transaction(provider)
+ # Try with kwargs first
+ tid = t.find_tid(kwargs)
+ if not tid:
+ # If no TID yet See if we have it in a referer or in the
+ # environment in the REDIRECT_URL
+ url = None
+ if 'referer' in cherrypy.request.headers:
+ url = cherrypy.request.headers['referer']
+ r = urlparse(unquote(url))
+ if r.query:
+ tid = t.find_tid(parse_qs(r.query))
+ if not tid and 'REQUEST_URI' in cherrypy.request.wsgi_environ:
+ url = cherrypy.request.wsgi_environ['REQUEST_URI']
+ r = urlparse(unquote(url))
+ if r.query:
+ tid = t.find_tid(parse_qs(r.query))
+ if not tid:
+ t.create_tid()
+ return t
+ except ValueError:
+ msg = 'Transaction expired, or cookies not available'
+ raise cherrypy.HTTPError(401, msg)
+