Ejemplo n.º 1
0
            public void Authenticate(RestClient client, RestRequest request)
            {
                if (authFlow != AuthFlow.Obtained)
                {
                    var         restclient  = new RestClient(GetHost(client.BaseUrl));
                    RestRequest authRequest = null;
                    switch (authFlow)
                    {
                    case AuthFlow.ObtainAccessTokenPending:
                        authRequest = GetAuthRequest("client_credentials")
                                      .AddParameter("client_id", ClientId)
                                      .AddParameter("client_secret", ClientSecret);
                        break;

                    case AuthFlow.RefreshAccessTokenPending:
                        authRequest = GetAuthRequest("refresh_token")
                                      .AddParameter("refresh_token", authData?.RefreshToken);
                        break;

                    default:
                        throw new Exception($"Wrong OAuth2 flow");
                    }
                    var authResponse = restclient.Execute(authRequest);

                    authData = AuthData.Parse(authResponse.Content);
                    authFlow = AuthFlow.Obtained;
                }

                if (authData.HasError)
                {
                    throw new Exception($"Authentication error: {authData.Error}", new Exception(authData.ErrorDescription));
                }
                request.AddHeader("Authorization", AuthorizationHeaderValue);
            }