def get(self, *args, **kwargs): """ Lists all the tenants requested. Returns 404 if the requested tenant does not exists. Args: tenant_id: network name of a tenant Example URLs: GET /api/v1/pending GET /api/v1/pending/TenantName """ try: if len(args) > 1: raise ValueError("Invalid url") if len(args) == 0: user = self.get_argument("user", default=None) if user: pendings = RUNTIME.load_pending_tenants(user) else: pendings = RUNTIME.load_pending_tenants() self.write(json.dumps(pendings, cls=EmpowerEncoder)) else: tenant_id = UUID(args[0]) pending = RUNTIME.load_pending_tenant(tenant_id) self.write(json.dumps(pending, cls=EmpowerEncoder)) except ValueError as ex: self.send_error(400, message=ex) except KeyError as ex: self.send_error(404, message=ex)
def get(self, *args, **kwargs): """ Lists all the tenants requested. Returns 404 if the requested tenant does not exists. Args: tenant_id: network name of a tenant Example URLs: GET /api/v1/pending GET /api/v1/pending/TenantName """ try: if len(args) > 1: raise ValueError("Invalid url") if len(args) == 0: user = self.get_argument("user", default=None) if user: pendings = RUNTIME.load_pending_tenants(user) else: pendings = RUNTIME.load_pending_tenants() self.write_as_json(pendings) else: tenant_id = UUID(args[0]) pending = RUNTIME.load_pending_tenant(tenant_id) self.write_as_json(pending) except ValueError as ex: self.send_error(400, message=ex) except KeyError as ex: self.send_error(404, message=ex)
def prepare(self): """Prepare to handler reply.""" self.set_header('Content-Type', 'application/json') if not self.RIGHTS[self.request.method]: return auth_header = self.request.headers.get('Authorization') if auth_header is None or not auth_header.startswith('Basic '): self.set_header('WWW-Authenticate', 'Basic realm=Restricted') self.send_error(401) return auth_bytes = bytes(auth_header[6:], 'utf-8') auth_decoded = base64.b64decode(auth_bytes).decode() username, password = auth_decoded.split(':', 2) # account does not exists if not RUNTIME.check_permission(username, password): self.send_error(401) return self.account = RUNTIME.get_account(username) if self.account.role in self.RIGHTS[self.request.method]: if self.account.role == ROLE_ADMIN: return if self.request.uri.startswith("/api/v1/accounts"): pattern = re.compile("/api/v1/accounts/([a-zA-Z0-9:-]*)/?") match = pattern.match(self.request.uri) if match and match.group(1): if match.group(1) in RUNTIME.accounts: account = RUNTIME.accounts[match.group(1)] if self.account.username == account.username: return else: self.send_error(401) return return if self.request.uri.startswith("/api/v1/pending"): pattern = re.compile("/api/v1/pending/([a-zA-Z0-9-]*)/?") match = pattern.match(self.request.uri) if match and match.group(1): try: tenant_id = UUID(match.group(1)) except ValueError: self.send_error(400) return pending = RUNTIME.load_pending_tenant(tenant_id) if pending: if self.account.username == pending.owner: return self.send_error(401) return return if self.request.uri.startswith("/api/v1/tenants"): pattern = re.compile("/api/v1/tenants/([a-zA-Z0-9-]*)/?") match = pattern.match(self.request.uri) if match and match.group(1): tenant_id = UUID(match.group(1)) if tenant_id in RUNTIME.tenants: tenant = RUNTIME.tenants[tenant_id] if self.account.username == tenant.owner: return self.send_error(401) return return self.send_error(401) return