using Centron.Api.docuFORM.Models; using System; using System.Collections.Generic; using System.Net; using System.Reflection; using System.Text; using System.Text.Json.Serialization; namespace Centron.Api.docuFORM.Helper { public static class DocuFormRequestHelper { public static string CreateAuthorizationRequestURI(AuthCodeRequest authCodeRequest, string? baseUriToAdd = null) { var parameters = RequestToParameterString(authCodeRequest); var endPointAndParameters = DocuFormRestApiConstants._endpointAuthCode + "?" + parameters; var baseUri = baseUriToAdd != null ? new Uri(baseUriToAdd) : null; return baseUri != null ? new Uri(baseUri, endPointAndParameters).ToString() : endPointAndParameters; } public static string RequestToParameterString(T request) { var parameters = RequestToParameters(request); var parameterString = string.Join("&", parameters.Select(f => $"{WebUtility.UrlEncode(f.Key)}={WebUtility.UrlEncode(f.Value)}")); return parameterString; } public static Dictionary RequestToParameters(T request, bool removeParameterWithoutValue = true) { var dict = new Dictionary(); var props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var prop in props) { var attr = prop.GetCustomAttribute(); var key = attr?.Name ?? prop.Name; var value = prop.GetValue(request)?.ToString(); if(removeParameterWithoutValue && string.IsNullOrWhiteSpace(value)) continue; dict[key] = value ?? string.Empty; } return dict; } public static string CreateRedirectURI(int? portNumber = null) { var uriBuilder = new UriBuilder(DocuFormRestApiConstants._redirectURI); uriBuilder.Port = portNumber.HasValue && portNumber.Value > 0 ? portNumber.Value : -1; var uri = uriBuilder.ToString(); while(uri.EndsWith("/")) uri = uri.Substring(0, uri.Length - 1); return uri; } } }