summary refs log tree commit diff
path: root/MxApiExtensions/Controllers/GenericProxyController.cs
diff options
context:
space:
mode:
authorTheArcaneBrony <myrainbowdash949@gmail.com>2023-11-05 17:59:38 +0100
committerTheArcaneBrony <myrainbowdash949@gmail.com>2023-11-05 17:59:38 +0100
commit2abb132234546e61bb0aff3897dc49e72ea84f5d (patch)
treec885c03d35e7a0a6b8fc21bd0b259216c61c877c /MxApiExtensions/Controllers/GenericProxyController.cs
parentUpdate (diff)
downloadMxApiExtensions-2abb132234546e61bb0aff3897dc49e72ea84f5d.tar.xz
Working sync proxy
Diffstat (limited to 'MxApiExtensions/Controllers/GenericProxyController.cs')
-rw-r--r--MxApiExtensions/Controllers/GenericProxyController.cs188
1 files changed, 0 insertions, 188 deletions
diff --git a/MxApiExtensions/Controllers/GenericProxyController.cs b/MxApiExtensions/Controllers/GenericProxyController.cs
deleted file mode 100644

index c004fcb..0000000 --- a/MxApiExtensions/Controllers/GenericProxyController.cs +++ /dev/null
@@ -1,188 +0,0 @@ -using System.Net.Http.Headers; -using Microsoft.AspNetCore.Mvc; -using MxApiExtensions.Classes.LibMatrix; -using MxApiExtensions.Services; - -namespace MxApiExtensions.Controllers; - -[ApiController] -[Route("/{*_}")] -public class GenericController : ControllerBase { - private readonly ILogger<GenericController> _logger; - private readonly MxApiExtensionsConfiguration _config; - private readonly AuthenticationService _authenticationService; - private readonly AuthenticatedHomeserverProviderService _authenticatedHomeserverProviderService; - private static Dictionary<string, string> _tokenMap = new(); - - public GenericController(ILogger<GenericController> logger, MxApiExtensionsConfiguration config, AuthenticationService authenticationService, - AuthenticatedHomeserverProviderService authenticatedHomeserverProviderService) { - _logger = logger; - _config = config; - _authenticationService = authenticationService; - _authenticatedHomeserverProviderService = authenticatedHomeserverProviderService; - } - - [HttpGet] - public async Task Proxy([FromQuery] string? access_token, string? _) { - try { - access_token ??= _authenticationService.GetToken(fail: false); - var mxid = await _authenticationService.GetMxidFromToken(fail: false); - var hs = await _authenticatedHomeserverProviderService.GetHomeserver(); - - _logger.LogInformation("Proxying request for {}: {}{}", mxid, Request.Path, Request.QueryString); - - //remove access_token from query string - Request.QueryString = new QueryString( - Request.QueryString.Value?.Replace("&access_token", "access_token") - .Replace($"access_token={access_token}", "") - ); - - var resp = await hs.ClientHttpClient.GetAsync($"{Request.Path}{Request.QueryString}"); - - if (resp.Content is null) { - throw new MxApiMatrixException { - ErrorCode = "M_UNKNOWN", - Error = "No content in response" - }; - } - - Response.StatusCode = (int)resp.StatusCode; - Response.ContentType = resp.Content.Headers.ContentType?.ToString() ?? "application/json"; - await Response.StartAsync(); - await using var stream = await resp.Content.ReadAsStreamAsync(); - await stream.CopyToAsync(Response.Body); - await Response.Body.FlushAsync(); - await Response.CompleteAsync(); - } - catch (MxApiMatrixException e) { - _logger.LogError(e, "Matrix error"); - Response.StatusCode = StatusCodes.Status500InternalServerError; - Response.ContentType = "application/json"; - - await Response.WriteAsync(e.GetAsJson()); - await Response.CompleteAsync(); - } - catch (Exception e) { - _logger.LogError(e, "Unhandled error"); - Response.StatusCode = StatusCodes.Status500InternalServerError; - Response.ContentType = "text/plain"; - - await Response.WriteAsync(e.ToString()); - await Response.CompleteAsync(); - } - } - - [HttpPost] - public async Task ProxyPost([FromQuery] string? access_token, string _) { - try { - access_token ??= _authenticationService.GetToken(fail: false); - var mxid = await _authenticationService.GetMxidFromToken(fail: false); - var hs = await _authenticatedHomeserverProviderService.GetHomeserver(); - - _logger.LogInformation("Proxying request for {}: {}{}", mxid, Request.Path, Request.QueryString); - - using var hc = new HttpClient(); - hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", access_token); - hc.Timeout = TimeSpan.FromMinutes(10); - //remove access_token from query string - Request.QueryString = new QueryString( - Request.QueryString.Value - .Replace("&access_token", "access_token") - .Replace($"access_token={access_token}", "") - ); - - var resp = await hs.ClientHttpClient.SendAsync(new HttpRequestMessage(HttpMethod.Post, $"{Request.Path}{Request.QueryString}") { - Method = HttpMethod.Post, - Content = new StreamContent(Request.Body) - }); - - if (resp.Content is null) { - throw new MxApiMatrixException { - ErrorCode = "M_UNKNOWN", - Error = "No content in response" - }; - } - - Response.StatusCode = (int)resp.StatusCode; - Response.ContentType = resp.Content.Headers.ContentType?.ToString() ?? "application/json"; - await Response.StartAsync(); - await using var stream = await resp.Content.ReadAsStreamAsync(); - await stream.CopyToAsync(Response.Body); - await Response.Body.FlushAsync(); - await Response.CompleteAsync(); - } - catch (MxApiMatrixException e) { - _logger.LogError(e, "Matrix error"); - Response.StatusCode = StatusCodes.Status500InternalServerError; - Response.ContentType = "application/json"; - - await Response.WriteAsJsonAsync(e.GetAsJson()); - await Response.CompleteAsync(); - } - catch (Exception e) { - _logger.LogError(e, "Unhandled error"); - Response.StatusCode = StatusCodes.Status500InternalServerError; - Response.ContentType = "text/plain"; - - await Response.WriteAsync(e.ToString()); - await Response.CompleteAsync(); - } - } - - [HttpPut] - public async Task ProxyPut([FromQuery] string? access_token, string _) { - try { - access_token ??= _authenticationService.GetToken(fail: false); - var mxid = await _authenticationService.GetMxidFromToken(fail: false); - var hs = await _authenticatedHomeserverProviderService.GetHomeserver(); - - _logger.LogInformation("Proxying request for {}: {}{}", mxid, Request.Path, Request.QueryString); - - using var hc = new HttpClient(); - hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", access_token); - hc.Timeout = TimeSpan.FromMinutes(10); - //remove access_token from query string - Request.QueryString = new QueryString( - Request.QueryString.Value - .Replace("&access_token", "access_token") - .Replace($"access_token={access_token}", "") - ); - - var resp = await hs.ClientHttpClient.SendAsync(new HttpRequestMessage(HttpMethod.Put, $"{Request.Path}{Request.QueryString}") { - Method = HttpMethod.Put, - Content = new StreamContent(Request.Body) - }); - - if (resp.Content is null) { - throw new MxApiMatrixException { - ErrorCode = "M_UNKNOWN", - Error = "No content in response" - }; - } - - Response.StatusCode = (int)resp.StatusCode; - Response.ContentType = resp.Content.Headers.ContentType?.ToString() ?? "application/json"; - await Response.StartAsync(); - await using var stream = await resp.Content.ReadAsStreamAsync(); - await stream.CopyToAsync(Response.Body); - await Response.Body.FlushAsync(); - await Response.CompleteAsync(); - } - catch (MxApiMatrixException e) { - _logger.LogError(e, "Matrix error"); - Response.StatusCode = StatusCodes.Status500InternalServerError; - Response.ContentType = "application/json"; - - await Response.WriteAsJsonAsync(e.GetAsJson()); - await Response.CompleteAsync(); - } - catch (Exception e) { - _logger.LogError(e, "Unhandled error"); - Response.StatusCode = StatusCodes.Status500InternalServerError; - Response.ContentType = "text/plain"; - - await Response.WriteAsync(e.ToString()); - await Response.CompleteAsync(); - } - } -}