blob: fab9a550cda953c2d0e4240677a3d5b551b20ad7 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/services/device_sync/cryptauth_device_sync_result.h"
namespace chromeos {
namespace device_sync {
CryptAuthDeviceSyncResult::CryptAuthDeviceSyncResult(
ResultCode result_code,
bool did_device_registry_change,
const base::Optional<cryptauthv2::ClientDirective>& client_directive)
: result_code_(result_code),
did_device_registry_change_(did_device_registry_change),
client_directive_(client_directive) {}
CryptAuthDeviceSyncResult::CryptAuthDeviceSyncResult(
const CryptAuthDeviceSyncResult& other) = default;
CryptAuthDeviceSyncResult::~CryptAuthDeviceSyncResult() = default;
bool CryptAuthDeviceSyncResult::IsSuccess() const {
return result_code_ == ResultCode::kSuccess;
}
bool CryptAuthDeviceSyncResult::operator==(
const CryptAuthDeviceSyncResult& other) const {
return result_code_ == other.result_code_ &&
client_directive_.has_value() == other.client_directive_.has_value() &&
(!client_directive_ ||
client_directive_->SerializeAsString() ==
other.client_directive_->SerializeAsString());
}
bool CryptAuthDeviceSyncResult::operator!=(
const CryptAuthDeviceSyncResult& other) const {
return !(*this == other);
}
std::ostream& operator<<(
std::ostream& stream,
const CryptAuthDeviceSyncResult::ResultCode result_code) {
using ResultCode = CryptAuthDeviceSyncResult::ResultCode;
switch (result_code) {
case ResultCode::kSuccess:
stream << "[Success]";
break;
case ResultCode::kFinishedWithNonFatalErrors:
stream << "[Finished with non-fatal errors]";
break;
case ResultCode::kErrorMissingUserKeyPair:
stream << "[Error: No user key pair in registry]";
break;
case ResultCode::kErrorEncryptingDeviceMetadata:
stream << "[Error: Could not encrypt local device metadata]";
break;
case ResultCode::kErrorEstablishingGroupPublicKey:
stream << "[Error: Could not establish group public key]";
break;
case ResultCode::kErrorNoMetadataInResponse:
stream << "[Error: No encrypted metadata in SyncMetadata response]";
break;
case ResultCode::kErrorAllResponseMetadataInvalid:
stream << "[Error: All DeviceMetadataPackets in SyncMetadata "
<< "response are invalid]";
break;
case ResultCode::kErrorNoLocalDeviceMetadataInResponse:
stream << "[Error: No local device metadata in SyncMetadata response]";
break;
case ResultCode::kErrorMissingFeatureStatuses:
stream << "[Error: Feature statuses not received for device(s)]";
break;
case ResultCode::kErrorMissingLocalDeviceSyncBetterTogetherKey:
stream << "[Error: No DeviceSync:BetterTogether key in registry]";
break;
case ResultCode::kErrorDecryptingGroupPrivateKey:
stream << "[Error: Could not decrypt group private key]";
break;
case ResultCode::kErrorInconsistentGroupPrivateKeys:
stream << "[Error: Group private key from SyncMetadata response "
<< "unexpectedly disagrees with the one in local storage]";
break;
case ResultCode::kErrorDecryptingMetadata:
stream << "[Error: Could not decrypt device metadata]";
break;
case ResultCode::kErrorParsingMetadata:
stream << "[Error: Could not parse device metadata]";
break;
case ResultCode::kErrorInconsistentLocalDeviceMetadata:
stream << "[Error: Local device metadata disagrees with that in "
<< "SyncMetadata response]";
break;
case ResultCode::kErrorEncryptingGroupPrivateKey:
stream << "[Error: Could not encrypt group private key]";
break;
case ResultCode::kErrorSyncMetadataApiCallOffline:
stream << "[SyncMetadata API call failed: Offline]";
break;
case ResultCode::kErrorSyncMetadataApiCallEndpointNotFound:
stream << "[SyncMetadata API call failed: Endpoint not found]";
break;
case ResultCode::kErrorSyncMetadataApiCallAuthenticationError:
stream << "[SyncMetadata API call failed: Authentication error]";
break;
case ResultCode::kErrorSyncMetadataApiCallBadRequest:
stream << "[SyncMetadata API call failed: Bad request]";
break;
case ResultCode::kErrorSyncMetadataApiCallResponseMalformed:
stream << "[SyncMetadata API call failed: Response malformed]";
break;
case ResultCode::kErrorSyncMetadataApiCallInternalServerError:
stream << "[SyncMetadata API call failed: Internal server error]";
break;
case ResultCode::kErrorSyncMetadataApiCallUnknownError:
stream << "[SyncMetadata API call failed: Unknown error]";
break;
case ResultCode::kErrorBatchGetFeatureStatusesApiCallOffline:
stream << "[BatchGetFeatureStatuses API call failed: Offline]";
break;
case ResultCode::kErrorBatchGetFeatureStatusesApiCallEndpointNotFound:
stream << "[BatchGetFeatureStatuses API call failed: Endpoint not found]";
break;
case ResultCode::kErrorBatchGetFeatureStatusesApiCallAuthenticationError:
stream << "[BatchGetFeatureStatuses API call failed: Authentication "
<< "error]";
break;
case ResultCode::kErrorBatchGetFeatureStatusesApiCallBadRequest:
stream << "[BatchGetFeatureStatuses API call failed: Bad request]";
break;
case ResultCode::kErrorBatchGetFeatureStatusesApiCallResponseMalformed:
stream << "[BatchGetFeatureStatuses API call failed: Response malformed]";
break;
case ResultCode::kErrorBatchGetFeatureStatusesApiCallInternalServerError:
stream << "[BatchGetFeatureStatuses API call failed: Internal server "
<< "error]";
break;
case ResultCode::kErrorBatchGetFeatureStatusesApiCallUnknownError:
stream << "[BatchGetFeatureStatuses API call failed: Unknown error]";
break;
case ResultCode::kErrorShareGroupPrivateKeyApiCallOffline:
stream << "[ShareGroupPrivateKey API call failed: Offline]";
break;
case ResultCode::kErrorShareGroupPrivateKeyApiCallEndpointNotFound:
stream << "[ShareGroupPrivateKey API call failed: Endpoint not found]";
break;
case ResultCode::kErrorShareGroupPrivateKeyApiCallAuthenticationError:
stream << "[ShareGroupPrivateKey API call failed: Authentication error]";
break;
case ResultCode::kErrorShareGroupPrivateKeyApiCallBadRequest:
stream << "[ShareGroupPrivateKey API call failed: Bad request]";
break;
case ResultCode::kErrorShareGroupPrivateKeyApiCallResponseMalformed:
stream << "[ShareGroupPrivateKey API call failed: Response malformed]";
break;
case ResultCode::kErrorShareGroupPrivateKeyApiCallInternalServerError:
stream << "[ShareGroupPrivateKey API call failed: Internal server error]";
break;
case ResultCode::kErrorShareGroupPrivateKeyApiCallUnknownError:
stream << "[ShareGroupPrivateKey API call failed: Unknown error]";
break;
case ResultCode::kErrorTimeoutWaitingForGroupKeyCreation:
stream << "[Error: Timeout waiting for group key creation]";
break;
case ResultCode::kErrorTimeoutWaitingForLocalDeviceMetadataEncryption:
stream << "[Error: Timeout waiting for local device metadata encryption]";
break;
case ResultCode::kErrorTimeoutWaitingForFirstSyncMetadataResponse:
stream << "[Error: Timeout waiting for first SyncMetadata response]";
break;
case ResultCode::kErrorTimeoutWaitingForSecondSyncMetadataResponse:
stream << "[Error: Timeout waiting for second SyncMetadata response]";
break;
case ResultCode::kErrorTimeoutWaitingForGroupPrivateKeyDecryption:
stream << "[Error: Timeout waiting for group private key decryption]";
break;
case ResultCode::kErrorTimeoutWaitingForDeviceMetadataDecryption:
stream << "[Error: Timeout waiting for remote device metadata "
<< "decryption]";
break;
case ResultCode::kErrorTimeoutWaitingForBatchGetFeatureStatusesResponse:
stream << "[Error: Timeout waiting for BatchGetFeatureStatuses response]";
break;
case ResultCode::kErrorTimeoutWaitingForGroupPrivateKeyEncryption:
stream << "[Error: Timeout waiting for group private key encryption]";
break;
case ResultCode::kErrorTimeoutWaitingForShareGroupPrivateKeyResponse:
stream << "[Error: Timeout waiting for ShareGroupPrivateKey response]";
break;
}
return stream;
}
} // namespace device_sync
} // namespace chromeos