async def login(self): params = {} params['auth-tag'] = self.usertag if self.password: params['credentials'] = self.password else: macaroons = _macaroons_for_domain(self.bakery_client.cookies, self.endpoint) params['macaroons'] = [[bakery.macaroon_to_dict(m) for m in ms] for ms in macaroons] try: return await self.rpc({ "type": "Admin", "request": "Login", "version": 3, "params": params, }) except errors.JujuAPIError as e: if e.error_code != 'redirection required': raise log.info('Controller requested redirect') # Fetch additional redirection information now so that # we can safely close the connection after login # fails. redirect_info = (await self.rpc({ "type": "Admin", "request": "RedirectInfo", "version": 3, }))['response'] raise errors.JujuRedirectException(redirect_info) from e
async def login(self): params = {} params['auth-tag'] = self.usertag if self.password: params['credentials'] = self.password else: macaroons = _macaroons_for_domain(self.bakery_client.cookies, self.endpoint) params['macaroons'] = [[bakery.macaroon_to_dict(m) for m in ms] for ms in macaroons] try: return await self.rpc({ "type": "Admin", "request": "Login", "version": 3, "params": params, }) except errors.JujuAPIError as e: if e.error_code != 'redirection required': raise log.info('Controller requested redirect') # Check if the redirect error provides a payload with embedded # redirection info (juju 2.6+ controller). In this case, return a # redirect exception which the library should not automatically # follow but rather bubble up to the user. This matches the # behaviour of juju cli whereas for JAAS-like redirects we will # need to make an extra RPC call to get the redirect info. if e.error_info is not None: raise errors.JujuRedirectException(e.error_info, False) from e # Fetch additional redirection information now so that # we can safely close the connection after login # fails. redirect_info = (await self.rpc({ "type": "Admin", "request": "RedirectInfo", "version": 3, }))['response'] raise errors.JujuRedirectException(redirect_info, True) from e