def get_user_from_service(self, token): parts = token.split() if not parts or len(parts) != 2: return None try: token_type = "service" if parts[0] == "Service" else "user" response = requests.post( "{}api/v1.0/verify-token/".format( os.environ.get('TROOD_AUTH_SERVICE_URL')), data={ "type": token_type, "token": parts[1] }, headers={"Authorization": get_service_token()}, ) response.raise_for_status() response_decoded = response.json() return TroodUser(response_decoded['data']) except HTTPError: raise exceptions.AuthenticationFailed()
def __init__(self, **kwargs): super().__init__(**kwargs) self.mail_service_url = settings.MAIL_SERVICE_URL self.headers = { "Content-Type": "application/json", "Authorization": get_service_token() }
def _open(self, name, mode): detail_file_url = '/'.join((self.host, f'api/v1.0/files/{name}/')) response = requests.get(detail_file_url, headers={ 'Authorization': get_service_token() }) if response.status_code == status.HTTP_200_OK: file_data = response.json() response = requests.get('/'.join((self.host, file_data['file_url'])), stream=True) if response.status_code == status.HTTP_200_OK: return TroodFile(response.raw, file_data) raise FileNotFoundError("File with id:{} does not exists".format(name))
def _save(self, name, content): try: file = self.open(name) return file.meta['id'] except FileNotFoundError: url = '/'.join((self.host, 'api/v1.0/files/')) headers = { 'Authorization': get_service_token() } response = requests.post(url, files={'file': (name, content)}, data={'name': name}, headers=headers) response.raise_for_status() if response.status_code == status.HTTP_201_CREATED: return response.json()['id']
def __call__(self, request): rules = {} if settings.TROOD_ABAC['RULES_SOURCE'] == 'FILE': with open(settings.TROOD_ABAC['RULES_PATH']) as fp: rules = json.load(fp) elif settings.TROOD_ABAC['RULES_SOURCE'] == 'URL': response = requests.get( settings.TROOD_ABAC['RULES_PATH'], params={"domain": settings.SERVICE_DOMAIN}, headers={"Authorization": get_service_token()}, ) response.raise_for_status() rules = response.json().get('data') engine = TroodABACEngine(rules) setattr(request, "abac", engine) response = self.get_response(request) return response