public:
DECLARE_EXCEPTION_TYPE(WA::Exception, Base)
DECLARE_EXCEPTION_TYPE(Base, InvalidAction)
- DECLARE_EXCEPTION_TYPE(Base, InvalidUserdata)
- DECLARE_EXCEPTION_TYPE(Base, InvalidQRContents)
DECLARE_EXCEPTION_TYPE(Base, InActive)
};
class ClientException {
LogError("WA::ServiceException::InvalidAction: " << e.DumpToString());
std::cerr << "WA::ServiceException::InvalidAction: " << e.DumpToString() << std::endl;
return WAUTHN_ERROR_INVALID_STATE;
- } catch (const ServiceException::InvalidUserdata &e) {
- LogError("WA::ServiceException::InvalidUserdata: " << e.DumpToString());
- std::cerr << "WA::ServiceException::InvalidUserdata: " << e.DumpToString() << std::endl;
- return WAUTHN_ERROR_INVALID_PARAMETER;
- } catch (const ServiceException::InvalidQRContents &e) {
- LogError("WA::ServiceException::InvalidQRContents: " << e.DumpToString());
- std::cerr << "WA::ServiceException::InvalidQRContents: " << e.DumpToString() << std::endl;
- return WAUTHN_ERROR_INVALID_PARAMETER;
} catch (const ServiceException::InActive &e) {
LogError("WA::ServiceException::InActive: " << e.DumpToString());
std::cerr << "WA::ServiceException::InActive: " << e.DumpToString() << std::endl;
public:
static void QRCallback(const char *qr_contents, void *user_data)
{
- user_data_s *userData;
- int ret = try_catch([&]() -> int {
- if (user_data == nullptr)
- ThrowMsg(ServiceException::InvalidUserdata, "Invalid user_data");
- userData = static_cast<user_data_s *>(user_data);
- if (userData->service == nullptr || userData->connectionID.sock == 0)
- ThrowMsg(ServiceException::InvalidUserdata, "Invalid user_data");
- if (qr_contents == nullptr)
- ThrowMsg(ServiceException::InvalidQRContents, "Invalid qr_contents");
- LogDebug("qr_contents: " << qr_contents);
- return WAUTHN_ERROR_NONE;
- });
- MessageBuffer buffer(userData->service->GetSocketmanager()->newMessage());
- if (ret != WAUTHN_ERROR_NONE)
- Serialization::Serialize(buffer, WAUTHN_ERROR_INVALID_STATE);
+ user_data_s *userData = GetUserData(user_data);
+ if (userData != nullptr && qr_contents != nullptr)
+ {
+ MessageBuffer buffer(userData->service->GetSocketmanager()->newMessage());
+ Serialization::Serialize(buffer, WAUTHN_ERROR_NONE, std::string(qr_contents));
+ userData->service->GetSocketmanager()->Write(userData->connectionID, std::move(buffer));
+ }
else
- Serialization::Serialize(buffer, ret, std::string(qr_contents));
-
- userData->service->GetSocketmanager()->Write(userData->connectionID, std::move(buffer));
+ LogError("Cannot write qr_contents to client");
}
protected:
- static user_data_s *GetUserData(wauthn_error_e result, void *user_data)
+ static user_data_s *GetUserData(void *user_data)
{
- LogDebug("result: " << wauthn_error_to_string(result));
if (user_data == nullptr)
{
LogError("The user_data is null");