def get(self, request): data = self.get_data(request) code = self.get_data(request, "code") error = self.get_data(request, "error") client = self.get_data(request, "client") # client must be properly deserialized to become a valid instance # but only if it has been serialized in the first place try: client = Client.deserialize(client) except: if not isinstance(client, Client): raise # this is an edge case that is caused by making a request with no data # it should only happen if this view is called manually, out of the # normal capture-authorize-redirect flow. if data is None or client is None: return self.error_response({ 'error': 'invalid_data', 'error_description': _('Data has not been captured') }) redirect_uri = data.get('redirect_uri', None) or client.redirect_uri.split(" ")[0] parsed = urlparse.urlparse(redirect_uri) query = QueryDict('', mutable=True) if 'state' in data: query['state'] = data['state'] if error is not None: query.update(error) elif code is None: query['error'] = 'access_denied' else: query['code'] = code parsed = parsed[:4] + (query.urlencode(), '') redirect_uri = urlparse.ParseResult(*parsed).geturl() self.clear_data(request) return HttpResponseRedirect(redirect_uri)
def get(self, request): data = self.get_data(request) code = self.get_data(request, "code") error = self.get_data(request, "error") client = self.get_data(request, "client") # client must be properly deserialized to become a valid instance # but only if it has been serialized in the first place try: client = Client.deserialize(client) except: if not isinstance(client, Client): raise # this is an edge case that is caused by making a request with no data # it should only happen if this view is called manually, out of the # normal capture-authorize-redirect flow. if data is None or client is None: return self.error_response({ 'error': 'invalid_data', 'error_description': _('Data has not been captured')}) redirect_uri = data.get('redirect_uri', None) or client.redirect_uri.split(" ")[0] parsed = urlparse.urlparse(redirect_uri) # maybe it should looks like so?? #query = QueryDict(parsed[4], mutable=True) query = QueryDict('', mutable=True) if 'state' in data: query['state'] = data['state'] if error is not None: query.update(error) elif code is None: query['error'] = 'access_denied' else: query['code'] = code parsed = parsed[:4] + (query.urlencode(), '') redirect_uri = urlparse.ParseResult(*parsed).geturl() self.clear_data(request) response = HttpResponse("", status=302) response['Location'] = redirect_uri return response
def get(self, request): data = self.get_data(request) code = self.get_data(request, "code") error = self.get_data(request, "error") client = self.get_data(request, "client") # client must be properly deserialized to become a valid instance client = Client.deserialize(client) # this is an edge case that is caused by making a request with no data # it should only happen if this view is called manually, out of the # normal capture-authorize-redirect flow. if data is None or client is None: return self.error_response({ 'error': 'invalid_data', 'error_description': _('Data has not been captured')}) redirect_uri = data.get('redirect_uri', None) or client.redirect_uri parsed = urlparse.urlparse(redirect_uri) query = QueryDict('', mutable=True) if 'state' in data: query['state'] = data['state'] if error is not None: query.update(error) elif code is None: query['error'] = 'access_denied' else: query['code'] = code parsed = parsed[:4] + (query.urlencode(), '') redirect_uri = urlparse.ParseResult(*parsed).geturl() self.clear_data(request) return HttpResponseRedirect(redirect_uri)