Add AuthType enum with string mapping BUG=25768507 Change-Id: I3d1b928407b3fa8e285b1c8bc1385e031f6abfba Reviewed-on: https://weave-review.googlesource.com/2048 Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/privet/privet_handler.cc b/src/privet/privet_handler.cc index 0af431b..b55053d 100644 --- a/src/privet/privet_handler.cc +++ b/src/privet/privet_handler.cc
@@ -79,9 +79,6 @@ const char kPairingFingerprintKey[] = "certFingerprint"; const char kPairingSignatureKey[] = "certSignature"; -const char kAuthTypeAnonymousValue[] = "anonymous"; -const char kAuthTypePairingValue[] = "pairing"; - const char kAuthModeKey[] = "mode"; const char kAuthCodeKey[] = "authCode"; const char kAuthRequestedScopeKey[] = "requestedScope"; @@ -266,8 +263,8 @@ auth->Set(kPairingKey, pairing_types.release()); std::unique_ptr<base::ListValue> auth_types(new base::ListValue()); - auth_types->AppendString(kAuthTypeAnonymousValue); - auth_types->AppendString(kAuthTypePairingValue); + auth_types->AppendString(EnumToString(AuthType::kAnonymous)); + auth_types->AppendString(EnumToString(AuthType::kPairing)); // TODO(vitalybuka): Implement cloud auth. // if (cloud.GetConnectionState().IsStatusEqual(ConnectionState::kOnline)) { @@ -513,7 +510,7 @@ return ReturnError(*error, callback); } UserInfo user_info; - if (token != kAuthTypeAnonymousValue) { + if (token != EnumToString(AuthType::kAnonymous)) { if (!security_->ParseAccessToken(token, &user_info, &error)) return ReturnError(*error, callback); } @@ -678,27 +675,37 @@ ErrorPtr error; std::string auth_code_type; - input.GetString(kAuthModeKey, &auth_code_type); + AuthType auth_type{}; + if (!input.GetString(kAuthModeKey, &auth_code_type) || + !StringToEnum(auth_code_type, &auth_type)) { + Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, + errors::kInvalidAuthMode, kInvalidParamValueFormat, + kAuthModeKey, auth_code_type.c_str()); + return ReturnError(*error, callback); + } std::string auth_code; input.GetString(kAuthCodeKey, &auth_code); AuthScope max_auth_scope = AuthScope::kNone; - if (auth_code_type == kAuthTypeAnonymousValue) { - max_auth_scope = GetAnonymousMaxScope(*cloud_, wifi_); - } else if (auth_code_type == kAuthTypePairingValue) { - if (!security_->IsValidPairingCode(auth_code)) { + switch (auth_type) { + case AuthType::kAnonymous: + max_auth_scope = GetAnonymousMaxScope(*cloud_, wifi_); + break; + case AuthType::kPairing: + if (!security_->IsValidPairingCode(auth_code)) { + Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, + errors::kInvalidAuthCode, kInvalidParamValueFormat, + kAuthCodeKey, auth_code.c_str()); + return ReturnError(*error, callback); + } + max_auth_scope = AuthScope::kOwner; + break; + default: Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthCode, kInvalidParamValueFormat, - kAuthCodeKey, auth_code.c_str()); + errors::kInvalidAuthMode, kInvalidParamValueFormat, + kAuthModeKey, auth_code_type.c_str()); return ReturnError(*error, callback); - } - max_auth_scope = AuthScope::kOwner; - } else { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthMode, kInvalidParamValueFormat, - kAuthModeKey, auth_code_type.c_str()); - return ReturnError(*error, callback); } std::string requested_scope;
diff --git a/src/privet/privet_types.cc b/src/privet/privet_types.cc index 7c85937..dd291b3 100644 --- a/src/privet/privet_types.cc +++ b/src/privet/privet_types.cc
@@ -14,6 +14,7 @@ namespace { +using privet::AuthType; using privet::ConnectionState; using privet::CryptoType; using privet::SetupState; @@ -25,6 +26,12 @@ {PairingType::kEmbeddedCode, "embeddedCode"}, }; +const EnumToStringMap<AuthType>::Map kAuthTypeMap[] = { + {AuthType::kAnonymous, "anonymous"}, + {AuthType::kPairing, "pairing"}, + {AuthType::kLocal, "local"}, +}; + const EnumToStringMap<ConnectionState::Status>::Map kConnectionStateMap[] = { {ConnectionState::kDisabled, "disabled"}, {ConnectionState::kUnconfigured, "unconfigured"}, @@ -71,6 +78,10 @@ : EnumToStringMap(kPairingTypeMap) {} template <> +LIBWEAVE_EXPORT EnumToStringMap<AuthType>::EnumToStringMap() + : EnumToStringMap(kAuthTypeMap) {} + +template <> LIBWEAVE_EXPORT EnumToStringMap<ConnectionState::Status>::EnumToStringMap() : EnumToStringMap(kConnectionStateMap) {}
diff --git a/src/privet/privet_types.h b/src/privet/privet_types.h index bc8e400..536fb89 100644 --- a/src/privet/privet_types.h +++ b/src/privet/privet_types.h
@@ -19,6 +19,12 @@ kSpake_p224, }; +enum class AuthType { + kAnonymous, + kPairing, + kLocal, +}; + enum class WifiType { kWifi24, kWifi50,