def test_check_auth_valid_update_mntner_submits_new_object_with_all_dummy_hash_values( self, prepare_mocks): mock_dq, mock_dh = prepare_mocks mock_dh.execute_query = lambda query: [{'object_text': SAMPLE_MNTNER}] reference_validator = ReferenceValidator(mock_dh) auth_validator = AuthValidator(mock_dh) # Submit the mntner with dummy password values as would be returned by queries, # but a password attribute that is valid for the current DB object. data = SAMPLE_MNTNER.replace('LEuuhsBJNFV0Q', PASSWORD_HASH_DUMMY_VALUE) data = data.replace('$1$fgW84Y9r$kKEn9MUq8PChNKpQhO6BM.', PASSWORD_HASH_DUMMY_VALUE) result_mntner = parse_change_requests( data + 'password: crypt-password', mock_dh, auth_validator, reference_validator)[0] auth_validator.pre_approve([result_mntner]) assert result_mntner._check_auth() assert not result_mntner.error_messages assert result_mntner.info_messages == [ 'As you submitted dummy hash values, all password hashes on this object ' 'were replaced with a new MD5-PW hash of the password you provided for ' 'authentication.' ] auth_pgp, auth_hash = splitline_unicodesafe( result_mntner.rpsl_obj_new.parsed_data['auth']) assert auth_pgp == 'PGPKey-80F238C6' assert auth_hash.startswith('MD5-PW ') assert md5_crypt.verify('crypt-password', auth_hash[7:]) assert auth_hash in result_mntner.rpsl_obj_new.render_rpsl_text() assert flatten_mock_calls(mock_dq) == [ ['sources', (['TEST'], ), {}], ['object_classes', (['mntner'], ), {}], ['rpsl_pk', ('TEST-MNT', ), {}], ['sources', (['TEST'], ), {}], ['object_classes', (['mntner'], ), {}], ['rpsl_pks', ({'OTHER1-MNT', 'OTHER2-MNT', 'TEST-MNT'}, ), {}], ['sources', (['TEST'], ), {}], ['object_classes', (['mntner'], ), {}], ['rpsl_pks', ({'OTHER1-MNT', 'OTHER2-MNT'}, ), {}], ]
def verify_password_hash(self, password): # Return result of verifying password, true or false. return md5_crypt.verify(password, self.password)