def __call__(self, options): # Try and obtain credentials interactively if they're not given, or # read them from stdin if they're specified as "-". credentials = obtain_credentials(options.url, options.credentials) # Check for bogus credentials. Do this early so that the user is not # surprised when next invoking the MAAS CLI. if credentials is not None: try: valid_apikey = check_valid_apikey( options.url, credentials, options.insecure) except UnexpectedResponse as e: raise SystemExit("%s" % e) else: if not valid_apikey: raise SystemExit("The MAAS server rejected your API key.") # Get description of remote API. description = fetch_api_description(options.url, options.insecure) # Save the config. profile_name = options.profile_name with ProfileConfig.open() as config: config[profile_name] = { "credentials": credentials, "description": description, "name": profile_name, "url": options.url, } profile = config[profile_name] self.print_whats_next(profile)
def test_check_valid_apikey_catches_invalid_key(self): options = make_options() content = factory.make_name('content') mock_request = self.patch(httplib2.Http, 'request') response = httplib2.Response({}) response['status'] = http.client.UNAUTHORIZED mock_request.return_value = response, json.dumps(content) self.assertFalse( auth.check_valid_apikey( options.url, convert_string_to_tuple(options.credentials), options.insecure))
def test_check_valid_apikey_passes_valid_key(self): options = make_options() content = factory.make_name("content") mock_request = self.patch(httplib2.Http, "request") response = httplib2.Response({}) response["status"] = http.client.OK mock_request.return_value = response, json.dumps(content) self.assertTrue( auth.check_valid_apikey( options.url, convert_string_to_tuple(options.credentials), options.insecure, ))