-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSignController.cs
More file actions
133 lines (121 loc) · 4.06 KB
/
SignController.cs
File metadata and controls
133 lines (121 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using EdsWebApi.Models;
using EdsWebApi.Services;
using Microsoft.AspNetCore.Mvc;
namespace EdsWebApi.Controllers;
[ApiController]
[Route("api/sign")]
public sealed class SignController(IDocumentSignService service) : ControllerBase
{
/// <summary>
/// Signs multiple documents in batch using the same certificate
/// </summary>
/// <param name="request">Batch sign request containing multiple documents and certificate info</param>
/// <returns>Batch sign response with results for each document</returns>
[HttpPost("batch")]
[RequestSizeLimit(500_000_000)] // 500MB limit for batch operations
public IActionResult SignDocumentsBatch([FromBody] BatchSignRequest request)
{
if (request.Documents.Count == 0)
{
return BadRequest(new BatchSignResponse
{
Message = "At least one document is required"
});
}
if (string.IsNullOrWhiteSpace(request.KeyStoreBase64))
{
return BadRequest(new BatchSignResponse
{
Message = "KeyStoreBase64 is required"
});
}
if (string.IsNullOrWhiteSpace(request.Password))
{
return BadRequest(new BatchSignResponse
{
Message = "Password is required"
});
}
try
{
var result = service.SignDocumentsBatch(request);
return Ok(result);
}
catch (Exception ex)
{
return StatusCode(500, new BatchSignResponse
{
Message = $"Internal error: {ex.Message}",
TotalDocuments = request.Documents.Count,
FailedCount = request.Documents.Count
});
}
}
/// <summary>
/// Gets certificate information without signing
/// </summary>
/// <param name="request">Certificate loading request</param>
/// <returns>Certificate information</returns>
[HttpPost("certificate/info")]
public IActionResult GetCertificateInfo([FromBody] SignRequest request)
{
if (string.IsNullOrWhiteSpace(request.KeyStoreBase64))
{
return BadRequest(new { message = "KeyStoreBase64 is required" });
}
if (string.IsNullOrWhiteSpace(request.Password))
{
return BadRequest(new { message = "Password is required" });
}
try
{
var certInfo = service.GetCertificateInfo(
request.KeyStoreBase64,
request.Password,
request.StorageType
);
return Ok(certInfo);
}
catch (Exception ex)
{
return BadRequest(new { message = ex.Message });
}
}
/// <summary>
/// Verifies a CMS signature using KalkanAPI
/// </summary>
/// <param name="request">Verification request containing CMS signature</param>
/// <returns>Verification result with certificate info</returns>
[HttpPost("verify")]
[RequestSizeLimit(100_000_000)] // 100MB limit
public IActionResult VerifyCmsSignature([FromBody] VerifyCmsRequest request)
{
if (string.IsNullOrWhiteSpace(request.CmsSignatureBase64))
{
return BadRequest(new VerifyCmsResponse
{
Success = false,
Message = "CmsSignatureBase64 is required"
});
}
try
{
var result = service.VerifyCmsSignature(
request.CmsSignatureBase64,
request.OriginalDocumentBase64,
request.KeyStoreBase64,
request.Password,
request.StorageType
);
return Ok(result);
}
catch (Exception ex)
{
return StatusCode(500, new VerifyCmsResponse
{
Success = false,
Message = $"Internal error: {ex.Message}"
});
}
}
}