123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- // Copyright 2020 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 "components/account_manager_core/account_manager_util.h"
- #include "components/account_manager_core/account.h"
- #include "components/account_manager_core/account_addition_options.h"
- #include "components/account_manager_core/account_addition_result.h"
- #include "google_apis/gaia/google_service_auth_error.h"
- #include "third_party/abseil-cpp/absl/types/optional.h"
- namespace account_manager {
- namespace cm = crosapi::mojom;
- namespace {
- GoogleServiceAuthError::InvalidGaiaCredentialsReason
- FromMojoInvalidGaiaCredentialsReason(
- crosapi::mojom::GoogleServiceAuthError::InvalidGaiaCredentialsReason
- mojo_reason) {
- switch (mojo_reason) {
- case cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::kUnknown:
- return GoogleServiceAuthError::InvalidGaiaCredentialsReason::UNKNOWN;
- case cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- kCredentialsRejectedByServer:
- return GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- CREDENTIALS_REJECTED_BY_SERVER;
- case cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- kCredentialsRejectedByClient:
- return GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- CREDENTIALS_REJECTED_BY_CLIENT;
- case cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- kCredentialsMissing:
- return GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- CREDENTIALS_MISSING;
- default:
- LOG(WARNING) << "Unknown "
- "crosapi::mojom::GoogleServiceAuthError::"
- "InvalidGaiaCredentialsReason: "
- << mojo_reason;
- return GoogleServiceAuthError::InvalidGaiaCredentialsReason::UNKNOWN;
- }
- }
- crosapi::mojom::GoogleServiceAuthError::InvalidGaiaCredentialsReason
- ToMojoInvalidGaiaCredentialsReason(
- GoogleServiceAuthError::InvalidGaiaCredentialsReason reason) {
- switch (reason) {
- case GoogleServiceAuthError::InvalidGaiaCredentialsReason::UNKNOWN:
- return cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::kUnknown;
- case GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- CREDENTIALS_REJECTED_BY_SERVER:
- return cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- kCredentialsRejectedByServer;
- case GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- CREDENTIALS_REJECTED_BY_CLIENT:
- return cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- kCredentialsRejectedByClient;
- case GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- CREDENTIALS_MISSING:
- return cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::
- kCredentialsMissing;
- case GoogleServiceAuthError::InvalidGaiaCredentialsReason::NUM_REASONS:
- NOTREACHED();
- return cm::GoogleServiceAuthError::InvalidGaiaCredentialsReason::kUnknown;
- }
- }
- crosapi::mojom::GoogleServiceAuthError::State ToMojoGoogleServiceAuthErrorState(
- GoogleServiceAuthError::State state) {
- switch (state) {
- case GoogleServiceAuthError::State::NONE:
- return cm::GoogleServiceAuthError::State::kNone;
- case GoogleServiceAuthError::State::INVALID_GAIA_CREDENTIALS:
- return cm::GoogleServiceAuthError::State::kInvalidGaiaCredentials;
- case GoogleServiceAuthError::State::USER_NOT_SIGNED_UP:
- return cm::GoogleServiceAuthError::State::kUserNotSignedUp;
- case GoogleServiceAuthError::State::CONNECTION_FAILED:
- return cm::GoogleServiceAuthError::State::kConnectionFailed;
- case GoogleServiceAuthError::State::SERVICE_UNAVAILABLE:
- return cm::GoogleServiceAuthError::State::kServiceUnavailable;
- case GoogleServiceAuthError::State::REQUEST_CANCELED:
- return cm::GoogleServiceAuthError::State::kRequestCanceled;
- case GoogleServiceAuthError::State::UNEXPECTED_SERVICE_RESPONSE:
- return cm::GoogleServiceAuthError::State::kUnexpectedServiceResponse;
- case GoogleServiceAuthError::State::SERVICE_ERROR:
- return cm::GoogleServiceAuthError::State::kServiceError;
- case GoogleServiceAuthError::State::SCOPE_LIMITED_UNRECOVERABLE_ERROR:
- return cm::GoogleServiceAuthError::State::kScopeLimitedUnrecoverableError;
- case GoogleServiceAuthError::State::NUM_STATES:
- NOTREACHED();
- return cm::GoogleServiceAuthError::State::kNone;
- }
- }
- absl::optional<account_manager::AccountAdditionResult::Status>
- FromMojoAccountAdditionStatus(
- crosapi::mojom::AccountAdditionResult::Status mojo_status) {
- switch (mojo_status) {
- case cm::AccountAdditionResult::Status::kSuccess:
- return account_manager::AccountAdditionResult::Status::kSuccess;
- case cm::AccountAdditionResult::Status::kAlreadyInProgress:
- return account_manager::AccountAdditionResult::Status::kAlreadyInProgress;
- case cm::AccountAdditionResult::Status::kCancelledByUser:
- return account_manager::AccountAdditionResult::Status::kCancelledByUser;
- case cm::AccountAdditionResult::Status::kNetworkError:
- return account_manager::AccountAdditionResult::Status::kNetworkError;
- case cm::AccountAdditionResult::Status::kUnexpectedResponse:
- return account_manager::AccountAdditionResult::Status::
- kUnexpectedResponse;
- case cm::AccountAdditionResult::Status::kBlockedByPolicy:
- return account_manager::AccountAdditionResult::Status::kBlockedByPolicy;
- default:
- LOG(WARNING) << "Unknown crosapi::mojom::AccountAdditionResult::Status: "
- << mojo_status;
- return absl::nullopt;
- }
- }
- crosapi::mojom::AccountAdditionResult::Status ToMojoAccountAdditionStatus(
- account_manager::AccountAdditionResult::Status status) {
- switch (status) {
- case account_manager::AccountAdditionResult::Status::kSuccess:
- return cm::AccountAdditionResult::Status::kSuccess;
- case account_manager::AccountAdditionResult::Status::kAlreadyInProgress:
- return cm::AccountAdditionResult::Status::kAlreadyInProgress;
- case account_manager::AccountAdditionResult::Status::kCancelledByUser:
- return cm::AccountAdditionResult::Status::kCancelledByUser;
- case account_manager::AccountAdditionResult::Status::kNetworkError:
- return cm::AccountAdditionResult::Status::kNetworkError;
- case account_manager::AccountAdditionResult::Status::kUnexpectedResponse:
- return cm::AccountAdditionResult::Status::kUnexpectedResponse;
- case account_manager::AccountAdditionResult::Status::kBlockedByPolicy:
- return cm::AccountAdditionResult::Status::kBlockedByPolicy;
- }
- }
- } // namespace
- absl::optional<account_manager::Account> FromMojoAccount(
- const crosapi::mojom::AccountPtr& mojom_account) {
- const absl::optional<account_manager::AccountKey> account_key =
- FromMojoAccountKey(mojom_account->key);
- if (!account_key.has_value())
- return absl::nullopt;
- account_manager::Account account{account_key.value(),
- mojom_account->raw_email};
- return account;
- }
- crosapi::mojom::AccountPtr ToMojoAccount(
- const account_manager::Account& account) {
- crosapi::mojom::AccountPtr mojom_account = crosapi::mojom::Account::New();
- mojom_account->key = ToMojoAccountKey(account.key);
- mojom_account->raw_email = account.raw_email;
- return mojom_account;
- }
- absl::optional<account_manager::AccountKey> FromMojoAccountKey(
- const crosapi::mojom::AccountKeyPtr& mojom_account_key) {
- const absl::optional<account_manager::AccountType> account_type =
- FromMojoAccountType(mojom_account_key->account_type);
- if (!account_type.has_value())
- return absl::nullopt;
- if (mojom_account_key->id.empty())
- return absl::nullopt;
- return account_manager::AccountKey(mojom_account_key->id,
- account_type.value());
- }
- crosapi::mojom::AccountKeyPtr ToMojoAccountKey(
- const account_manager::AccountKey& account_key) {
- crosapi::mojom::AccountKeyPtr mojom_account_key =
- crosapi::mojom::AccountKey::New();
- mojom_account_key->id = account_key.id();
- mojom_account_key->account_type =
- ToMojoAccountType(account_key.account_type());
- return mojom_account_key;
- }
- absl::optional<account_manager::AccountType> FromMojoAccountType(
- const crosapi::mojom::AccountType& account_type) {
- switch (account_type) {
- case crosapi::mojom::AccountType::kGaia:
- static_assert(static_cast<int>(crosapi::mojom::AccountType::kGaia) ==
- static_cast<int>(account_manager::AccountType::kGaia),
- "Underlying enum values must match");
- return account_manager::AccountType::kGaia;
- case crosapi::mojom::AccountType::kActiveDirectory:
- static_assert(
- static_cast<int>(crosapi::mojom::AccountType::kActiveDirectory) ==
- static_cast<int>(account_manager::AccountType::kActiveDirectory),
- "Underlying enum values must match");
- return account_manager::AccountType::kActiveDirectory;
- default:
- // Don't consider this as as error to preserve forwards compatibility with
- // lacros.
- LOG(WARNING) << "Unknown account type: " << account_type;
- return absl::nullopt;
- }
- }
- crosapi::mojom::AccountType ToMojoAccountType(
- const account_manager::AccountType& account_type) {
- switch (account_type) {
- case account_manager::AccountType::kGaia:
- return crosapi::mojom::AccountType::kGaia;
- case account_manager::AccountType::kActiveDirectory:
- return crosapi::mojom::AccountType::kActiveDirectory;
- }
- }
- absl::optional<GoogleServiceAuthError> FromMojoGoogleServiceAuthError(
- const crosapi::mojom::GoogleServiceAuthErrorPtr& mojo_error) {
- switch (mojo_error->state) {
- case cm::GoogleServiceAuthError::State::kNone:
- return GoogleServiceAuthError::AuthErrorNone();
- case cm::GoogleServiceAuthError::State::kInvalidGaiaCredentials:
- return GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
- FromMojoInvalidGaiaCredentialsReason(
- mojo_error->invalid_gaia_credentials_reason));
- case cm::GoogleServiceAuthError::State::kConnectionFailed:
- return GoogleServiceAuthError::FromConnectionError(
- mojo_error->network_error);
- case cm::GoogleServiceAuthError::State::kServiceError:
- return GoogleServiceAuthError::FromServiceError(
- mojo_error->error_message);
- case cm::GoogleServiceAuthError::State::kUnexpectedServiceResponse:
- return GoogleServiceAuthError::FromUnexpectedServiceResponse(
- mojo_error->error_message);
- case cm::GoogleServiceAuthError::State::kUserNotSignedUp:
- return GoogleServiceAuthError(
- GoogleServiceAuthError::State::USER_NOT_SIGNED_UP);
- case cm::GoogleServiceAuthError::State::kServiceUnavailable:
- return GoogleServiceAuthError(
- GoogleServiceAuthError::State::SERVICE_UNAVAILABLE);
- case cm::GoogleServiceAuthError::State::kRequestCanceled:
- return GoogleServiceAuthError(
- GoogleServiceAuthError::State::REQUEST_CANCELED);
- case cm::GoogleServiceAuthError::State::kScopeLimitedUnrecoverableError:
- return GoogleServiceAuthError(
- GoogleServiceAuthError::State::SCOPE_LIMITED_UNRECOVERABLE_ERROR);
- default:
- LOG(WARNING) << "Unknown crosapi::mojom::GoogleServiceAuthError::State: "
- << mojo_error->state;
- return absl::nullopt;
- }
- }
- crosapi::mojom::GoogleServiceAuthErrorPtr ToMojoGoogleServiceAuthError(
- GoogleServiceAuthError error) {
- crosapi::mojom::GoogleServiceAuthErrorPtr mojo_result =
- crosapi::mojom::GoogleServiceAuthError::New();
- mojo_result->error_message = error.error_message();
- if (error.state() == GoogleServiceAuthError::State::CONNECTION_FAILED) {
- mojo_result->network_error = error.network_error();
- }
- if (error.state() ==
- GoogleServiceAuthError::State::INVALID_GAIA_CREDENTIALS) {
- mojo_result->invalid_gaia_credentials_reason =
- ToMojoInvalidGaiaCredentialsReason(
- error.GetInvalidGaiaCredentialsReason());
- }
- mojo_result->state = ToMojoGoogleServiceAuthErrorState(error.state());
- return mojo_result;
- }
- absl::optional<account_manager::AccountAdditionResult>
- FromMojoAccountAdditionResult(
- const crosapi::mojom::AccountAdditionResultPtr& mojo_result) {
- absl::optional<account_manager::AccountAdditionResult::Status> status =
- FromMojoAccountAdditionStatus(mojo_result->status);
- if (!status.has_value())
- return absl::nullopt;
- switch (status.value()) {
- case account_manager::AccountAdditionResult::Status::kSuccess: {
- absl::optional<account_manager::Account> account =
- FromMojoAccount(mojo_result->account);
- if (!account.has_value())
- return absl::nullopt;
- return account_manager::AccountAdditionResult::FromAccount(
- account.value());
- }
- case account_manager::AccountAdditionResult::Status::kNetworkError: {
- absl::optional<GoogleServiceAuthError> net_error =
- FromMojoGoogleServiceAuthError(mojo_result->error);
- if (!net_error.has_value())
- return absl::nullopt;
- return account_manager::AccountAdditionResult::FromError(
- net_error.value());
- }
- case account_manager::AccountAdditionResult::Status::kAlreadyInProgress:
- case account_manager::AccountAdditionResult::Status::kCancelledByUser:
- case account_manager::AccountAdditionResult::Status::kUnexpectedResponse:
- return account_manager::AccountAdditionResult::FromStatus(status.value());
- case account_manager::AccountAdditionResult::Status::kBlockedByPolicy:
- return account_manager::AccountAdditionResult::FromStatus(status.value());
- }
- }
- crosapi::mojom::AccountAdditionResultPtr ToMojoAccountAdditionResult(
- account_manager::AccountAdditionResult result) {
- crosapi::mojom::AccountAdditionResultPtr mojo_result =
- crosapi::mojom::AccountAdditionResult::New();
- mojo_result->status = ToMojoAccountAdditionStatus(result.status());
- if (result.account().has_value()) {
- mojo_result->account =
- account_manager::ToMojoAccount(result.account().value());
- }
- if (result.error().state() != GoogleServiceAuthError::NONE) {
- mojo_result->error = ToMojoGoogleServiceAuthError(result.error());
- }
- return mojo_result;
- }
- absl::optional<account_manager::AccountAdditionOptions>
- FromMojoAccountAdditionOptions(
- const crosapi::mojom::AccountAdditionOptionsPtr& mojo_options) {
- if (!mojo_options)
- return absl::nullopt;
- account_manager::AccountAdditionOptions result;
- result.is_available_in_arc = mojo_options->is_available_in_arc;
- result.show_arc_availability_picker =
- mojo_options->show_arc_availability_picker;
- return result;
- }
- } // namespace account_manager
|