diff --git a/Back/Controllers/BaseController.cs b/Back/Controllers/BaseController.cs index 611f661..af47021 100644 --- a/Back/Controllers/BaseController.cs +++ b/Back/Controllers/BaseController.cs @@ -42,7 +42,7 @@ namespace Back.Controllers { var resultValidationmodel = await _mobilevalidation.ValidateAsync(model.Mobile); if (!resultValidationmodel.IsValid) - return BadRequest(resultValidationmodel.Errors); + return BadRequest(resultValidationmodel.Errors.Select(s=>s.ErrorMessage ).ToList()); return Ok(await _sBase.CreateCsrAndPrivateKey(model)); } [HttpPost("ReadPublicKeyFromCER")] diff --git a/Back/Services/ServBase.cs b/Back/Services/ServBase.cs index a761274..18bdc75 100644 --- a/Back/Services/ServBase.cs +++ b/Back/Services/ServBase.cs @@ -99,14 +99,12 @@ namespace Back.Services string csr = Encoding.UTF8.GetString(buffer); stream.Flush(); stream.Close(); - taxTools.csr = csr; taxTools.Base64csr = Convert.ToBase64String(buffer); taxTools.typecsr = "Csr"; stream = File.Open($"C:\\OpenSSL\\bin\\{model.cn}.key", FileMode.Open); buffer = new byte[stream.Length]; stream.Read(buffer, 0, (int)stream.Length); string key = Encoding.UTF8.GetString(buffer); - taxTools.key = key; taxTools.Base64key = Convert.ToBase64String(buffer); taxTools.typekey = "key"; stream.Flush(); @@ -193,7 +191,6 @@ namespace Back.Services //}); return new PublicKeyDTO { - PublicKey = PublicKey, PublicKeyBase64 = Convert.ToBase64String(buffer), type = "txt" }; diff --git a/Back/Validations/MobileValidation.cs b/Back/Validations/MobileValidation.cs index 407137d..ea1b4e7 100644 --- a/Back/Validations/MobileValidation.cs +++ b/Back/Validations/MobileValidation.cs @@ -8,6 +8,7 @@ namespace Back.Validations { public MobileValidation() { + CascadeMode = CascadeMode.Stop; RuleFor(m => m) .NotEmpty().WithMessage("موبایل نمی تواند باشد") .NotNull().WithMessage("موبایل نمی تواند باشد") diff --git a/Shared/DTOs/CsrPrivateKeyDto.cs b/Shared/DTOs/CsrPrivateKeyDto.cs index 8aa748a..f5c1cbf 100644 --- a/Shared/DTOs/CsrPrivateKeyDto.cs +++ b/Shared/DTOs/CsrPrivateKeyDto.cs @@ -4,13 +4,15 @@ namespace Shared.DTOs { public class CsrPrivateKeyDto { - [Required] + + [Required(ErrorMessage = "cn نمیتواند خالی باشد")] public string cn { get; set; } - [Required] + [Required(ErrorMessage = "sn نمیتواند خالی باشد")] public string sn { get; set; } - [Required] + [Required(ErrorMessage = "company نمیتواند خالی باشد")] public string company { get; set; } - [Required] + [Required(ErrorMessage = "mobile نمیتواند خالی باشد")] + [Length(11,11,ErrorMessage ="mobile باید 11 کاراکتر باشد")] public string Mobile { get; set; } } } diff --git a/Shared/DTOs/PublicKeyDTO.cs b/Shared/DTOs/PublicKeyDTO.cs index 7271fdb..9595a05 100644 --- a/Shared/DTOs/PublicKeyDTO.cs +++ b/Shared/DTOs/PublicKeyDTO.cs @@ -2,7 +2,6 @@ { public class PublicKeyDTO { - public string PublicKey { get; set; } public string PublicKeyBase64 { get; set; } public string type { get; set; } } diff --git a/Shared/DTOs/TaxToolsDTO.cs b/Shared/DTOs/TaxToolsDTO.cs index ad0cd3c..ab34ba3 100644 --- a/Shared/DTOs/TaxToolsDTO.cs +++ b/Shared/DTOs/TaxToolsDTO.cs @@ -2,10 +2,8 @@ { public class TaxToolsDTO { - public string csr { get; set; } public string Base64csr { get; set; } public string typecsr { get; set; } - public string key { get; set; } public string Base64key { get; set; } public string typekey { get; set; } } diff --git a/TaxPayerFull/Layout/TaxTools.razor b/TaxPayerFull/Layout/TaxTools.razor index 75bb1e8..59ced78 100644 --- a/TaxPayerFull/Layout/TaxTools.razor +++ b/TaxPayerFull/Layout/TaxTools.razor @@ -1,4 +1,7 @@ @using Shared.DTOs +@using System.Text +@inject HttpClient _hc +@inject IJSRuntime JS
@@ -9,73 +12,196 @@
ابزار/سامانه مودیان
-
+
-
-
+

1)ساخت فایل CSR

+
+
+
-
-
- -
-
-
- +
+
+ + +
+ + + + +
+
+
+
+ cn -
-
-
- - sn -
-
-
-
- - Company -
+
+
+
+ + sn
+
- + + Company +
+
+
+
+ Mobile
-
-
- -
- -
+ +
+ +
+ +
+ @*
- + 2)خواندن PublicKey
+
*@
+
+

+
+
+ - + + + +
+ +
- +
+
@code { - private CsrPrivateKeyDto? model { get; set; } = new CsrPrivateKeyDto(); -} -@functions{ - private void CreateCsrAndPrivateKey() + private long maxFileSize = 1024 * 15; + + + private EditContext? editContext; + [SupplyParameterFromForm] + private CsrPrivateKeyDto? modelTaxTools { get; set; } = new CsrPrivateKeyDto(); + + private ValidationMessageStore? messageStore; + + protected override void OnInitialized() { - + // modelTaxTools ??= new(); + // editContext = new(modelTaxTools); + // editContext.OnValidationRequested += HandleValidationRequested; + // messageStore = new(editContext); + + editContext = new EditContext(modelTaxTools); + messageStore = new(editContext); } - private void ReadPublicKeyFromCER() + + // private void HandleValidationRequested(object? sender, + // ValidationRequestedEventArgs args) + // { + // messageStore?.Clear(); + + + // // messageStore?.Add(() => modelTaxTools.Mobile, "Select at least one."); + + // } +} +@functions { + private async Task CreateCsrAndPrivateKey() { + var request = await _hc.PostAsJsonAsync("Base/CreateCsrAndPrivateKey", modelTaxTools); + if (request.IsSuccessStatusCode) + { + var res = await request.Content.ReadFromJsonAsync(); + await DownloadFileFromStream(res.Base64csr, $"{modelTaxTools.cn}.{res.typecsr}"); + await DownloadFileFromStream(res.Base64key, $"{modelTaxTools.cn}.{res.typekey}"); + } + else + { + var error = await request.Content.ReadFromJsonAsync>(); + messageStore?.Add(() => modelTaxTools.Mobile, error); + + } } -} \ No newline at end of file + private async Task ReadPublicKeyFromCER(InputFileChangeEventArgs e) + { + if (e.GetMultipleFiles()[0].Size <= maxFileSize) + { + string Base64Str = ""; + using (MemoryStream stream = new MemoryStream()) + { + await e.GetMultipleFiles()[0].OpenReadStream(maxFileSize).CopyToAsync(stream); + + byte[] Array = stream.ToArray(); + Base64Str = Convert.ToBase64String(Array); + + } + + // if (!string.IsNullOrEmpty(Base64Str)) + // { + // var request = await _hc.PostAsJsonAsync("Base/ReadPublicKeyFromCER", Base64Str); + // if (request.IsSuccessStatusCode) + // { + // var res = await request.Content.ReadFromJsonAsync(); + // await DownloadFileFromStream(res.PublicKeyBase64, $"{modelTaxTools.cn}.{res.type}"); + // } + // } + } + else + { + + } + + + + } + private Stream GetFileStream(byte[] bytes) + { + var fileStream = new MemoryStream(bytes); + + return fileStream; + } + private async Task DownloadFileFromStream(string Base64, string FileName) + { + byte[] bytes = System.Convert.FromBase64String(Base64); + + var fileStream = GetFileStream(bytes); + // var fileName = "log.bin"; + + using var streamRef = new DotNetStreamReference(stream: fileStream); + + await JS.InvokeVoidAsync("downloadFileFromStream", FileName, streamRef); + } +} + \ No newline at end of file