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,