1
0

feat(BRIDGE-424): FIDO2 GUI support.

This commit is contained in:
Atanas Janeshliev
2025-09-16 13:07:45 +02:00
parent e091e58be1
commit edf903fd21
42 changed files with 3567 additions and 3510 deletions

View File

@ -302,6 +302,32 @@ SPStreamEvent newLoginTfaRequestedEvent(QString const &username) {
}
//****************************************************************************************************************************************************
/// \param[in] username The username.
/// \return The event.
//****************************************************************************************************************************************************
SPStreamEvent newLoginFidoRequestedEvent(QString const &username) {
auto event = new ::grpc::LoginFidoRequestedEvent;
event->set_username(username.toStdString());
auto loginEvent = new grpc::LoginEvent;
loginEvent->set_allocated_fidorequested(event);
return wrapLoginEvent(loginEvent);
}
//****************************************************************************************************************************************************
/// \param[in] username The username.
/// \return The event.
//****************************************************************************************************************************************************
SPStreamEvent newLoginTfaOrFidoRequestedEvent(QString const &username) {
auto event = new ::grpc::LoginTfaOrFidoRequestedEvent;
event->set_username(username.toStdString());
auto loginEvent = new grpc::LoginEvent;
loginEvent->set_allocated_tfaorfidorequested(event);
return wrapLoginEvent(loginEvent);
}
//****************************************************************************************************************************************************
/// \return The event.
//****************************************************************************************************************************************************

View File

@ -48,7 +48,9 @@ SPStreamEvent newLoginTfaRequestedEvent(QString const &username); ///< Create a
SPStreamEvent newLoginTwoPasswordsRequestedEvent(QString const &username); ///< Create a new LoginTwoPasswordsRequestedEvent event.
SPStreamEvent newLoginFinishedEvent(QString const &userID, bool wasSignedOut); ///< Create a new LoginFinishedEvent event.
SPStreamEvent newLoginAlreadyLoggedInEvent(QString const &userID); ///< Create a new LoginAlreadyLoggedInEvent event.
SPStreamEvent newLoginHvRequestedEvent(); ///< Create a new LoginHvRequestedEvent
SPStreamEvent newLoginHvRequestedEvent(); ///< Create a new LoginHvRequestedEvent.
SPStreamEvent newLoginFidoRequestedEvent(QString const &username); ///< Create a new LoginFidoRequestedEvent.
SPStreamEvent newLoginTfaOrFidoRequestedEvent(QString const &username); ///< Create a new LoginTfaOrFidoRequestedEvent.
// Update related events
SPStreamEvent newUpdateErrorEvent(grpc::UpdateErrorType errorType); ///< Create a new UpdateErrorEvent event.

View File

@ -632,6 +632,28 @@ grpc::Status GRPCClient::login2FA(QString const &username, QString const &code)
return this->logGRPCCallStatus(stub_->Login2FA(this->clientContext().get(), request, &empty), __FUNCTION__);
}
//****************************************************************************************************************************************************
/// \param[in] username The username.
/// \param[in] code The Security key PIN.
/// \return the status for the gRPC call.
//****************************************************************************************************************************************************
grpc::Status GRPCClient::loginFido(const QString &username, const QString &pin) {
LoginRequest request;
request.set_username(username.toStdString());
request.set_password(pin.toStdString());
return this->logGRPCCallStatus(stub_->LoginFido(this->clientContext().get(), request, &empty), __FUNCTION__ );
}
//****************************************************************************************************************************************************
/// \param[in] username The username.
/// \return the status for the gRPC call.
//****************************************************************************************************************************************************
grpc::Status GRPCClient::abortFidoAssertion(const QString &username) {
LoginAbortRequest request;
request.set_username(username.toStdString());
return this->logGRPCCallStatus(stub_->FidoAssertionAbort(this->clientContext().get(), request, &empty), __FUNCTION__);
}
//****************************************************************************************************************************************************
/// \param[in] username The username.
@ -1256,6 +1278,15 @@ void GRPCClient::processLoginEvent(LoginEvent const &event) {
case HV_ERROR:
emit loginHvError(QString::fromStdString(error.message()));
break;
case FIDO_PIN_INVALID:
emit loginFidoPinInvalid(QString::fromStdString(error.message()));
break;
case FIDO_PIN_BLOCKED:
emit loginFidoPinBlocked(QString::fromStdString(error.message()));
break;
case FIDO_ERROR:
emit loginFidoError(QString::fromStdString(error.message()));
break;
default:
this->logError("Unknown login error event received.");
break;
@ -1266,6 +1297,14 @@ void GRPCClient::processLoginEvent(LoginEvent const &event) {
this->logTrace("Login event received: TfaRequested.");
emit login2FARequested(QString::fromStdString(event.tfarequested().username()));
break;
case LoginEvent::kFidoRequested:
this->logTrace("Login event received: FidoRequested.");
emit loginFidoRequested(QString::fromStdString(event.fidorequested().username()));
break;
case LoginEvent::kTfaOrFidoRequested:
this->logTrace("Login event received: TfaOrFidoRequested.");
emit login2FAOrFidoRequested(QString::fromStdString(event.tfaorfidorequested().username()));
break;
case LoginEvent::kTwoPasswordRequested:
this->logTrace("Login event received: TwoPasswordRequested.");
emit login2PasswordRequested(QString::fromStdString(event.twopasswordrequested().username()));
@ -1284,6 +1323,18 @@ void GRPCClient::processLoginEvent(LoginEvent const &event) {
this->logTrace("Login event Received: HvRequested");
emit loginHvRequested(QString::fromStdString(event.hvrequested().hvurl()));
break;
case LoginEvent::kLoginFidoTouchRequested:
this->logTrace("Login event received: FidoTouchRequested");
emit loginFidoTouchRequested(QString::fromStdString(event.loginfidotouchrequested().username()));
break;
case LoginEvent::kLoginFidoTouchCompleted:
this->logTrace("Login event received: FidoTouchCompleted");
emit loginFidoTouchCompleted(QString::fromStdString(event.loginfidotouchcompleted().username()));
break;
case LoginEvent::kLoginFidoPinRequired:
this->logTrace("Login event received: FidoPinRequired");
emit loginFidoPinRequired(QString::fromStdString(event.loginfidopinrequired().username()));
break;
default:
this->logError("Unknown Login event received.");
break;

View File

@ -175,9 +175,11 @@ signals:
public: // login related calls
grpc::Status login(QString const &username, QString const &password); ///< Performs the 'login' call.
grpc::Status login2FA(QString const &username, QString const &code); ///< Performs the 'login2FA' call.
grpc::Status loginFido(QString const &username, QString const &pin); ///< Performs the 'loginFido' call.
grpc::Status login2Passwords(QString const &username, QString const &password); ///< Performs the 'login2Passwords' call.
grpc::Status loginAbort(QString const &username); ///< Performs the 'loginAbort' call.
grpc::Status loginHv(QString const &username, QString const &password); ///< Performs the 'login' call with additional useHv flag
grpc::Status loginHv(QString const &username, QString const &password); ///< Performs the 'login' call with additional useHv flag.
grpc::Status abortFidoAssertion(const QString &username); ///< Performs the 'abortFidoAssertion' call.
signals:
void loginUsernamePasswordError(QString const &errMsg);
@ -186,6 +188,8 @@ signals:
void login2FARequested(QString const &username);
void login2FAError(QString const &errMsg);
void login2FAErrorAbort(QString const &errMsg);
void loginFidoRequested(QString const &username);
void login2FAOrFidoRequested(QString const &username);
void login2PasswordRequested(QString const &username);
void login2PasswordError(QString const &errMsg);
void login2PasswordErrorAbort(QString const &errMsg);
@ -193,6 +197,12 @@ signals:
void loginAlreadyLoggedIn(QString const &userID);
void loginHvRequested(QString const &hvUrl);
void loginHvError(QString const &errMsg);
void loginFidoTouchRequested(QString const &username);
void loginFidoTouchCompleted(QString const &username);
void loginFidoPinRequired(QString const &username);
void loginFidoPinInvalid(QString const &errMsg);
void loginFidoPinBlocked(QString const &errMsg);
void loginFidoError(QString const &errMsg);
public: // Update related calls
grpc::Status checkUpdate();