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,
