/// <summary> /// Persists the user credential on the database. /// </summary> /// <param name="request">The data service request.</param> /// <returns>The data service response.</returns> private NullResponse SaveUserCredentials(SaveUserCredentialsDataRequest request) { using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request.RequestContext)) { ParameterSet parameters = new ParameterSet(); parameters["@bi_recId"] = request.UserCredential.RecId; parameters["@nvc_StaffId"] = request.UserCredential.StaffId; parameters["@nvc_HashedCredential"] = request.UserCredential.HashedCredential; parameters["@nvc_Salt"] = request.UserCredential.Salt; parameters["@nvc_HashAlgorithm"] = request.UserCredential.HashAlgorithm; parameters["@nvc_GrantType"] = request.UserCredential.GrantType; parameters["@nvc_CredentialId"] = request.UserCredential.CredentialId; parameters["@nvc_AdditionalAuthenticationData"] = request.UserCredential.AdditionalAuthenticationData; databaseContext.ExecuteStoredProcedureNonQuery(SaveUserCredentialsSprocName, parameters); } return(new NullResponse()); }
/// <summary> /// Executes the workflow. /// </summary> /// <param name="request">The request.</param> /// <returns>The response.</returns> protected override NullResponse Process(EnrollUserCredentialRequest request) { ThrowIf.Null(request, "request"); if (string.IsNullOrWhiteSpace(request.GrantType)) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_MissingParameter, "grantType is missing."); } if (string.IsNullOrWhiteSpace(request.UserId)) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_MissingParameter, "userId is missing."); } if (request.ExtraParameters == null) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_MissingParameter, "extraParameters is missing."); } if (request.GrantType.Equals(PasswordGrantType, StringComparison.OrdinalIgnoreCase)) { throw new FeatureNotSupportedException(FeatureNotSupportedErrors.Microsoft_Dynamics_Commerce_Runtime_RequestParameterValueNotSupported, "grant type 'password' is not supported for enrollment."); } // get the request handler that handles this specific grant type IRequestHandler authenticationService = this.Context.Runtime.GetRequestHandler(typeof(GetUserEnrollmentDetailsServiceRequest), request.GrantType); if (authenticationService == null) { RetailLogger.Log.CrtServicesAuthenticationHandlerNotFound(request.GrantType, typeof(GetUserEnrollmentDetailsServiceRequest)); throw new DataValidationException( DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_AuthenticationGrantTypeNotSupported, string.Format("The grant type '{0}' is not supported.", request.GrantType)); } // Get enrollment data from authentication service GetUserEnrollmentDetailsServiceRequest getEnrollmentDetailsRequest = new GetUserEnrollmentDetailsServiceRequest(request.Credentials, request.ExtraParameters); GetUserEnrollmentDetailsServiceResponse enrollmentDetailsResponse = this.Context.Runtime.Execute <GetUserEnrollmentDetailsServiceResponse>( getEnrollmentDetailsRequest, this.Context, authenticationService); // Enroll user in headquarters EnrollUserCredentialsRealtimeRequest enrollUserRealtimeRequest = new EnrollUserCredentialsRealtimeRequest( request.UserId, request.GrantType, enrollmentDetailsResponse.CredentialId, request.Credentials, enrollmentDetailsResponse.AdditionalAuthenticationData); EnrollUserCredentialsRealtimeResponse enrollUserRealtimeResponse = this.Context.Runtime.Execute <EnrollUserCredentialsRealtimeResponse>(enrollUserRealtimeRequest, this.Context); // Persist data on local database SaveUserCredentialsDataRequest saveUserCredentialsDataRequest = new SaveUserCredentialsDataRequest(enrollUserRealtimeResponse.UserCredential); this.Context.Runtime.Execute <NullResponse>(saveUserCredentialsDataRequest, this.Context); // Create auth log AuthenticationHelper.LogAuthenticationRequest(request.RequestContext, request.UserId, AuthenticationStatus.Success, AuthenticationOperation.EnrollUserCredentials); return(new NullResponse()); }