wauthn_error_e result,
void *user_data)
{
- user_data_s *userData = _ResponseCBHead(result, user_data);
- MessageBuffer buffer(userData->service->GetSocketmanager()->newMessage());
- int ret = try_catch([&]() -> int {
+ user_data_s *userData = GetUserData(result, user_data);
+ if (userData != nullptr)
+ {
+ MessageBuffer buffer(userData->service->GetSocketmanager()->newMessage());
Serialization::Serialize(buffer, result, pubkey_cred);
- return WAUTHN_ERROR_NONE;
- });
- _ResponseCBTail(ret, userData, std::move(buffer));
+ userData->service->GetSocketmanager()->Write(userData->connectionID, std::move(buffer));
+ }
+ else
+ {
+ LogError("Cannot write response to client");
+ }
}
private:
wauthn_error_e result,
void *user_data)
{
- user_data_s *userData = _ResponseCBHead(result, user_data);
- MessageBuffer buffer(userData->service->GetSocketmanager()->newMessage());
- int ret = try_catch([&]() -> int {
+ user_data_s *userData = GetUserData(result, user_data);
+ if (userData != nullptr)
+ {
+ MessageBuffer buffer(userData->service->GetSocketmanager()->newMessage());
Serialization::Serialize(buffer, result, pubkey_cred);
- return WAUTHN_ERROR_NONE;
- });
- _ResponseCBTail(ret, userData, std::move(buffer));
+ userData->service->GetSocketmanager()->Write(userData->connectionID, std::move(buffer));
+ }
+ else
+ {
+ LogError("Cannot write response to client");
+ }
}
private:
std::string m_API = "wah_make_credential";
}
protected:
- static user_data_s *_ResponseCBHead(wauthn_error_e result, void *user_data)
+ static user_data_s *GetUserData(wauthn_error_e result, void *user_data)
{
LogDebug("result: " << wauthn_error_to_string(result));
if (user_data == nullptr)
- ThrowMsg(ServiceException::InvalidUserdata, "Invalid user_data");
+ {
+ LogError("The user_data is null");
+ return nullptr;
+ }
user_data_s *userData = static_cast<user_data_s *>(user_data);
if (userData->service == nullptr || userData->connectionID.sock == 0)
- ThrowMsg(ServiceException::InvalidUserdata, "Invalid user_data");
- return userData;
- }
-
- static void _ResponseCBTail(int ret, user_data_s *userData, MessageBuffer &&buffer)
- {
- if (ret != WAUTHN_ERROR_NONE)
{
- buffer.InitForStreaming();
- switch (ret){
- case WAUTHN_ERROR_INVALID_PARAMETER:
- LogError("Invalid pubkey_cred");
- Serialization::Serialize(buffer, WAUTHN_ERROR_INVALID_STATE);
- break;
- default:
- LogError("Unknown error");
- Serialization::Serialize(buffer, WAUTHN_ERROR_UNKNOWN);
- }
+ LogError("Any member of user_data is invalid");
+ return nullptr;
}
- userData->service->GetSocketmanager()->Write(userData->connectionID, std::move(buffer));
+ return userData;
}
};
+
} // namespace WebAuthn