/// <summary> /// Creates a specific exception derived from <see cref="AuthorizationRequiredException"/> from a response. /// </summary> /// <param name="request">The request.</param> /// <param name="response">The response.</param> /// <returns>The exception.</returns> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public static AuthorizationRequiredException CreateFromResponse(IWebApiRequest request, IWebApiResponse <ErrorObject> response) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (response == null) { throw new ArgumentNullException(nameof(response)); } switch (response.Content.Message.ToLowerInvariant()) { case "invalid key": case "invalid access token": return(new InvalidAccessTokenException(request, response)); case var message when message.StartsWith("requires scope", StringComparison.InvariantCultureIgnoreCase) || message.StartsWith("requires at least one scope from", StringComparison.InvariantCultureIgnoreCase): return(new MissingScopesException(request, response)); case "membership required": return(new MembershipRequiredException(request, response)); case "access restricted to guild leaders": return(new RestrictedToGuildLeadersException(request, response)); case "endpoint requires authentication": default: return(new AuthorizationRequiredException(request, response, AuthorizationError.RequiresAuthorization)); } }
/// <inheritdoc /> public Task <IHttpResponseStream> RequestStreamAsync(IWebApiRequest request, CancellationToken cancellationToken = default) { if (request == null) { throw new ArgumentNullException(nameof(request)); } return(ExecAsync()); async Task <IHttpResponseStream> ExecAsync() { using var cancellationTimeout = new CancellationTokenSource(this.Timeout); using var linkedCancellation = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, cancellationTimeout.Token); using var message = new HttpRequestMessage(HttpMethod.Get, request.Options.Url); message.Headers.AddRange(request.Options.RequestHeaders); Task <HttpResponseMessage>?task = null; SysHttpClient?httpClient = null; try { httpClient = this.getSysHttpClient(); if (httpClient == null) { throw new InvalidOperationException("HttpClient is null"); } task = httpClient.SendAsync(message, linkedCancellation.Token); var responseMessage = await task.ConfigureAwait(false); await responseMessage.Content.LoadIntoBufferAsync().ConfigureAwait(false); var stream = await responseMessage.Content.ReadAsStreamAsync().ConfigureAwait(false); var requestHeaders = request.Options.RequestHeaders.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); var responseHeaders = responseMessage.Headers.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.First()); responseHeaders.AddRange(responseMessage.Content.Headers.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.First())); return(new HttpResponseStream(stream, responseMessage.StatusCode, requestHeaders, responseHeaders)); } catch (Exception ex) { if (task == null) { throw new RequestException(request, "Failed to create task", ex); } else if (task.IsCanceled) { throw new RequestCanceledException(request); } throw new RequestException(request, $"Request error: {task?.Exception?.Message}", ex); } finally { if (this.shouldDisposeHttpClient) { httpClient?.Dispose(); } } } }
public Function1( IAuthClient auth, IWebApiRequest apiReq ) { _auth = auth; _apiReq = apiReq; }
/// <inheritdoc /> public async Task <IWebApiResponse> RequestAsync(IWebApiRequest request, CancellationToken cancellationToken = default) { using var responseStream = await this.RequestStreamAsync(request, cancellationToken).ConfigureAwait(false); using var streamReader = new StreamReader(responseStream.ContentStream); string responseText = await streamReader.ReadToEndAsync().ConfigureAwait(false); return(new WebApiResponse(responseText, responseStream.StatusCode, responseStream.CacheState, responseStream.ResponseHeaders)); }
public IEnumerator Send(IWebApiRequest apiRequest) { var request = CreateWebRequest(apiRequest); yield return(request.Send()); apiRequest.OnSendComplete( request.GetResponseHeaders(), request.downloadHandler.data, GetError(request)); request.Dispose(); }
public override void OnBeforeRequestSend(IWebApiRequest request) { #if UNITY_EDITOR Game.Logger.LogWithBlue("[WebAPI] Request: " + request.Uri, request.Body); #endif request.Headers["Content-Type"] = "application/x-msgpack"; if (IsAuthenticated) { request.Headers["X-Access-Token"] = accessToken; } }
public override void OnRequestError(IWebApiRequest request, WebApiError <Error> error) { #if UNITY_EDITOR if (error.Error != null) { Game.Logger.LogError("[WebAPI] Error: " + request.Uri, error.Error.Code + ": " + error.Error.Name, error.Error); } else { Game.Logger.LogError("[WebAPI] Error: " + request.Uri, error.RawErrorMessage); } #endif }
public override void OnRequestSuccess(IWebApiRequest request, IWebApiResponse response) { #if UNITY_EDITOR Game.Logger.LogWithGreen("[WebAPI] Response: " + request.Uri, response.Body); #endif string accessToken; if (response.Headers.TryGetValue("X-Set-Access-Token", out accessToken)) { this.accessToken = accessToken; #if UNITY_EDITOR Game.Logger.LogWithPurple("[WebAPI] AccessToken: " + accessToken); #endif } }
UnityWebRequest CreateWebRequest(IWebApiRequest apiRequest) { UnityWebRequest request; switch (apiRequest.Method) { case HttpMethod.Get: case HttpMethod.Delete: { var uri = apiRequest.Uri + apiRequest.Body.ToQueryString(); var method = apiRequest.Method.ToString().ToUpper(); request = new UnityWebRequest(uri, method); break; } case HttpMethod.Post: case HttpMethod.Put: { var uri = apiRequest.Uri.ToString(); var method = apiRequest.Method.ToString().ToUpper(); request = new UnityWebRequest(uri, method); request.uploadHandler = new UploadHandlerRaw(apiRequest.BodyBytes); break; } default: { throw new NotImplementedException(apiRequest.Method + " method is not implemented yet"); } } foreach (var kvp in apiRequest.Headers) { request.SetRequestHeader(kvp.Key, kvp.Value); } request.downloadHandler = new DownloadHandlerBuffer(); return(request); }
/// <summary> /// Creates a specific exception derived from <see cref="BadRequestException"/> from a response. /// </summary> /// <param name="request">The request.</param> /// <param name="response">The response.</param> /// <returns>The exception.</returns> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public static BadRequestException CreateFromResponse(IWebApiRequest request, IWebApiResponse <ErrorObject> response) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (response == null) { throw new ArgumentNullException(nameof(response)); } switch (response.Content.Message.ToLowerInvariant()) { case var message when message.StartsWith("id list too long; this endpoint is limited to", StringComparison.InvariantCultureIgnoreCase): return(new ListTooLongException(request, response)); case var message when message.StartsWith("page out of range. Use page values", StringComparison.InvariantCultureIgnoreCase): return(new PageOutOfRangeException(request, response)); default: return(new BadRequestException(request, response, BadRequestError.GenericBadRequest)); } }
/// <summary> /// Constructs a new <see cref="MiddlewareContext"/>. /// </summary> /// <param name="connection">The connection.</param> /// <param name="request">The web API request.</param> public MiddlewareContext(IConnection connection, IWebApiRequest request) { this.Connection = connection; this.Request = request; }
/// <summary> /// Creates a new <see cref="ListTooLongException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public ListTooLongException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, BadRequestError.ListTooLong) { }
/// <summary> /// Creates a new <see cref="ServiceUnavailableException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <see langword="null"/>.</exception> public ServiceUnavailableException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, response?.Content.Message ?? string.Empty) { }
public CaptureScreen(int?lifetime, IWebApiRequest webApi) { webApiRequest = webApi; InitializeComponent(); counter = lifetime == null ? defaultLife : lifetime.Value; }
/// <summary> /// Creates a new <see cref="MembershipRequiredException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public MembershipRequiredException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.MembershipRequired) { }
public abstract void OnRequestSuccess(IWebApiRequest request, IWebApiResponse response);
/// <summary> /// Creates a new <see cref="MissingScopesException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public MissingScopesException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.MissingScopes) { }
/// <summary> /// Creates a new <see cref="RequestCanceledException" />. /// </summary> /// <param name="request">The original request.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> is <c>null</c>.</exception> public RequestCanceledException(IWebApiRequest request) : base(request, "Request was canceled") { }
/// <summary> /// Creates a new <see cref="InvalidAccessTokenException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public InvalidAccessTokenException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.InvalidKey) { }
public virtual TResponse Delete <TResponse>(IWebApiRequest <TResponse> data = null, MediaTypeFormatterEnum?mediaTypeFormatter = null) { return(this.Delete <TResponse>(data.ResourceUrl, data, mediaTypeFormatter)); }
/// <summary> /// Creates a new <see cref="AuthorizationRequiredException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <param name="error">The error.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/>, <paramref name="response"/> or <paramref name="error"/> is <c>null</c>.</exception> public AuthorizationRequiredException(IWebApiRequest request, IWebApiResponse <ErrorObject> response, AuthorizationError error) : base(request, response, response?.Content.Message ?? string.Empty) { this.AuthorizationError = error; }
/// <summary> /// Creates a new <see cref="TooManyRequestsException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public TooManyRequestsException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, response?.Content.Message ?? string.Empty) { }
/// <summary> /// Creates a new <see cref="UnexpectedStatusException" />. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <param name="message">The message.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="message"/> is <c>null</c>.</exception> public UnexpectedStatusException(IWebApiRequest request, IWebApiResponse <string>?response, string message) : base(request, response, message) { }
/// <summary> /// Creates a new <see cref="UnexpectedStatusException" />. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public UnexpectedStatusException(IWebApiRequest request, IWebApiResponse <string> response) : this(request, response, $"Unexpected HTTP status code: {(int?)response?.StatusCode ?? 0}") { }
public virtual async Task <ApiResult <TResponse, TError> > DeleteAsync <TResponse, TError>(IWebApiRequest <TResponse, TError> data = null, MediaTypeFormatterEnum?mediaTypeFormatter = null) => await this.DeleteAsync <TResponse, TError>(data.ResourceUrl, data, mediaTypeFormatter);
public virtual async Task <ApiResult <TResponse> > UpdateAsync <TResponse>(IWebApiRequest <TResponse> data = null, MediaTypeFormatterEnum?mediaTypeFormatter = null) => await this.UpdateAsync <TResponse, NullResult>(data.ResourceUrl, data, mediaTypeFormatter);
public abstract void OnBeforeRequestSend(IWebApiRequest request);
public abstract void OnRequestError(IWebApiRequest request, WebApiError <ErrorT> error);
/// <summary> /// Creates a new <see cref="PageOutOfRangeException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <c>null</c>.</exception> public PageOutOfRangeException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, BadRequestError.PageOutOfRange) { }
/// <summary> /// Creates a new <see cref="RestrictedToGuildLeadersException"/>. /// </summary> /// <param name="request">The original request.</param> /// <param name="response">The response.</param> /// <exception cref="ArgumentNullException"><paramref name="request"/> or <paramref name="response"/> is <see langword="null"/>.</exception> public RestrictedToGuildLeadersException(IWebApiRequest request, IWebApiResponse <ErrorObject> response) : base(request, response, AuthorizationError.AccessRestrictedToGuildLeaders) { }