Пример #1
0
        private void AuthQueueResponseCallback(AsyncHttpResponse response, ClientAuthenticationQueue queue)
        {
            var queueState = (AuthQueueState)response.State;
            var peer = queueState.Peer;
            var authRequest = queueState.AuthenticateRequest;
            var sendParameters = queueState.SendParameters;

            if (log.IsDebugEnabled)
            {
                log.DebugFormat("Authenticate client finished: conId={0}, result={1}", peer.ConnectionId, response.Status);
            }

            switch (response.Status)
            {
                case HttpRequestQueueResultCode.Success:
                    {
                        if (response.ResponseData == null)
                        {
                            log.ErrorFormat("Custom authentication: failed. ResponseData is empty. AppId={0}/{1}",
                                authRequest.ApplicationId, authRequest.ApplicationId);

                            return;
                        }

                        // deserialize
                        var responseString = Encoding.UTF8.GetString(response.ResponseData).Trim(new char[] { '\uFEFF', '\u200B' });
                        CustomAuthenticationResult customAuthResult;
                        try
                        {
                            customAuthResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CustomAuthenticationResult>(responseString);
                            //TBD: handle backward compatibility incustomAuthResult class
                            if (customAuthResult.AuthCookie == null)
                            {
                                customAuthResult.AuthCookie = customAuthResult.Secure;
                            }
                        }
                        catch (Exception ex)
                        {
                            log.WarnFormat("Custom authentication: failed to deserialize response. AppId={0}/{1}, Response={2}, Uri={3}",
                                authRequest.ApplicationId, authRequest.ApplicationVersion, responseString, queue.Uri);

                            peer.OnCustomAuthenticationError(
                                ErrorCode.CustomAuthenticationFailed, "Custom authentication deserialization failed: " + ex.Message, authRequest, sendParameters, queueState.State);
                            this.IncrementFailedCustomAuth();
                            return;
                        }

                        this.IncrementResultCounters(customAuthResult, (CustomAuthResultCounters.Instance)queue.CustomData);
                        peer.OnCustomAuthenticationResult(customAuthResult, authRequest, sendParameters, queueState.State);
                        return;
                    }

                case HttpRequestQueueResultCode.Offline:
                case HttpRequestQueueResultCode.QueueFull:
                case HttpRequestQueueResultCode.QueueTimeout:
                case HttpRequestQueueResultCode.RequestTimeout:
                case HttpRequestQueueResultCode.Error:
                    {
                        if (response.RejectIfUnavailable)
                        {
                            peer.OnCustomAuthenticationError(
                                ErrorCode.CustomAuthenticationFailed, "Custom authentication service error: " + response.Status, authRequest, sendParameters, queueState.State);
                            this.IncrementFailedCustomAuth();
                        }
                        else
                        {
                            var result = new CustomAuthenticationResult { ResultCode = CustomAuthenticationResultCode.Ok };
                            peer.OnCustomAuthenticationResult(result, authRequest, sendParameters, queueState.State);
                        }
                        return;
                    }
            }
        }
Пример #2
0
        protected void AddNewAuthProvider(string url, string nameValuePairAsQueryString, bool rejectIfUnavailable,
            ClientAuthenticationType authenticationType, string instanceName)
        {
            var authService = new ClientAuthenticationQueue(
                url,
                nameValuePairAsQueryString,
                rejectIfUnavailable,
                Settings.Default.HttpRequestTimeoutMS)
                              {
                                  MaxQueuedRequests = Settings.Default.MaxQueuedRequests,
                                  MaxConcurrentRequests = Settings.Default.MaxConcurrentRequests,
                                  ReconnectInterval = TimeSpan.FromSeconds(Settings.Default.ReconnectIntervalS),
                                  QueueTimeout = TimeSpan.FromSeconds(Settings.Default.QueueTimeoutS),
                                  MaxErrorRequests = Settings.Default.MaxErrorRequests,
                                  MaxTimedOutRequests = Settings.Default.MaxTimedOutRequests,
                                  MaxBackoffTimeInMiliseconds = Settings.Default.MaxBackoffTimeInMiliseconds,
                                  CustomData = CustomAuthResultCounters.GetInstance(instanceName)
                              };

            var counters = this.httpQueueCountersFactory != null ? this.httpQueueCountersFactory.Create(instanceName) : null;
            authService.SetHttpRequestQueueCounters(counters);
            this.authenticationServices.Add(authenticationType, authService);
            if (log.IsDebugEnabled)
            {
                log.DebugFormat("Auth Provider added. provider:{0}", url);
            }
        }