示例#1
0
            /// <summary>
            /// Creates or Updates the retail device.
            /// </summary>
            /// <param name="request">The data service request.</param>
            /// <returns>The data service response.</returns>
            private NullResponse CreateOrUpdateDevice(CreateOrUpdateDeviceDataRequest request)
            {
                ThrowIf.Null(request.Device, "request.Device");

                using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request.RequestContext))
                {
                    ParameterSet parameters = new ParameterSet();
                    parameters["@dt_ActivatedDateTime"]           = request.Device.ActivatedDateTime;
                    parameters["@i_ActivationStatus"]             = request.Device.ActivationStatus;
                    parameters["@nvc_DeactivateComments"]         = request.Device.DeactivateComments;
                    parameters["@dt_DeactivatedDateTime"]         = request.Device.DeactivatedDateTime;
                    parameters["@nvc_Description"]                = request.Device.Description;
                    parameters["@nvc_DeviceId"]                   = request.Device.DeviceNumber;
                    parameters["@nvc_Terminal"]                   = request.Device.TerminalId;
                    parameters["@bi_TypeRecordId"]                = request.Device.DeviceTypeRecordId;
                    parameters["@nvc_DeviceTokenData"]            = request.Device.TokenData;
                    parameters["@nvc_DeviceTokenSalt"]            = request.Device.TokenSalt;
                    parameters["@nvc_DeviceTokenAlgorithm"]       = request.Device.TokenAlgorithm;
                    parameters["@dt_DeviceTokenIssueTime"]        = request.Device.TokenIssueTime;
                    parameters["@i_UseInMemoryDeviceDataStorage"] = request.Device.UseInMemoryDeviceDataStorage;
                    parameters["@bi_RecordId"] = request.Device.RecordId;

                    databaseContext.ExecuteStoredProcedureNonQuery(CreateUpdateDeviceSprocName, parameters);
                }

                DeviceL2CacheDataStoreAccessor levelL2CacheDataAccessor = this.GetDeviceL2CacheDataStoreAccessor(request.RequestContext);

                levelL2CacheDataAccessor.ClearCacheDeviceById(request.Device.DeviceNumber);

                return(new NullResponse());
            }
示例#2
0
            /// <summary>
            /// Deactivates the device.
            /// </summary>
            /// <param name="request">The device deactivation request.</param>
            /// <returns>The device deactivation response.</returns>
            private static DeactivateDeviceServiceResponse DeactivateDevice(DeactivateDeviceServiceRequest request)
            {
                Device device = ConstructDeviceFromToken(request.DeviceToken);
                DeactivateDeviceRealtimeRequest  realtimeRequest  = new DeactivateDeviceRealtimeRequest(request.DeviceNumber, request.TerminalId, request.StaffId, device.TokenData);
                DeactivateDeviceRealtimeResponse realtimeResponse = request.RequestContext.Execute <DeactivateDeviceRealtimeResponse>(realtimeRequest);

                // Updating the activated device in the channel db.
                if (realtimeResponse.DeactivationResult.Device != null)
                {
                    CreateOrUpdateDeviceDataRequest createOrUpdateDeviceDataRequest = new CreateOrUpdateDeviceDataRequest(realtimeResponse.DeactivationResult.Device);
                    request.RequestContext.Execute <NullResponse>(createOrUpdateDeviceDataRequest);
                }

                return(new DeactivateDeviceServiceResponse(realtimeResponse.DeactivationResult));
            }
示例#3
0
            /// <summary>
            /// Activates the device and updates the activated device in the channel database.
            /// </summary>
            /// <param name="request">The device activation request.</param>
            /// <returns>The device activation response.</returns>
            private static ActivateDeviceServiceResponse ActivateDevice(ActivateDeviceServiceRequest request)
            {
                ActivateDeviceRealtimeRequest  realtimeRequest  = new ActivateDeviceRealtimeRequest(request.DeviceNumber, request.TerminalId, request.StaffId, request.DeviceId, request.ForceActivation, request.DeviceType);
                ActivateDeviceRealtimeResponse realtimeResponse = request.RequestContext.Execute <ActivateDeviceRealtimeResponse>(realtimeRequest);

                if (realtimeResponse.DeviceActivationResult.Device != null)
                {
                    realtimeResponse.DeviceActivationResult.Device.Token = GenerateDeviceToken(realtimeResponse.DeviceActivationResult.Device);
                }

                // Creating or updating the activated device in the channel db.
                CreateOrUpdateDeviceDataRequest createOrUpdateDeviceDataRequest = new CreateOrUpdateDeviceDataRequest(realtimeResponse.DeviceActivationResult.Device);

                request.RequestContext.Execute <NullResponse>(createOrUpdateDeviceDataRequest);
                return(new ActivateDeviceServiceResponse(realtimeResponse.DeviceActivationResult));
            }
示例#4
0
            /// <summary>
            /// Authenticates the device.
            /// </summary>
            /// <param name="request">The device authentication request.</param>
            /// <returns>The response.</returns>
            private static AuthenticateDeviceServiceResponse AuthenticateDevice(AuthenticateDeviceServiceRequest request)
            {
                Device device = new Device();

                if (string.IsNullOrWhiteSpace(request.Token))
                {
                    throw new ArgumentException("request.Token is not set", "request");
                }

                device = ConstructDeviceFromToken(request.Token);

                try
                {
                    // Try to validate the device token using the channel database
                    device = ValidateDeviceTokenLocally(device.DeviceNumber, device.TokenData, request.Token, request.RequestContext);
                }
                catch (DeviceAuthenticationException deviceAuthenticationException)
                {
                    RetailLogger.Log.CrtServicesDeviceManagementServiceDeviceAuthenticationInChannelDbFailure(device.ToString(), deviceAuthenticationException);

                    try
                    {
                        // If local authentication failed then try to contact AX for activation and refresh local data.
                        AuthenticateDeviceRealtimeRequest realtimeRequest = new AuthenticateDeviceRealtimeRequest(device);
                        device = request.RequestContext.Execute <AuthenticateDeviceRealtimeResponse>(realtimeRequest).Device;
                    }
                    catch (HeadquarterTransactionServiceException ex)
                    {
                        RetailLogger.Log.CrtServicesDeviceManagementServiceDeviceAuthenticationInAxFailure(device.ToString(), ex);
                        throw new DeviceAuthenticationException(SecurityErrors.Microsoft_Dynamics_Commerce_Runtime_HeadquarterTransactionServiceMethodCallFailure, ex, ex.Message)
                              {
                                  LocalizedMessage = ex.LocalizedMessage
                              };
                    }

                    // Creating or updating the authenticated device in the channel db.
                    CreateOrUpdateDeviceDataRequest createOrUpdateDeviceDataRequest = new CreateOrUpdateDeviceDataRequest(device);
                    request.RequestContext.Execute <NullResponse>(createOrUpdateDeviceDataRequest);
                }

                return(new AuthenticateDeviceServiceResponse(device));
            }