using Microsoft.AspNetCore.Mvc;
using DomainResults.Mvc;
using MaksIT.LetsEncryptServer.Services;
using MaksIT.Models.LetsEncryptServer.CertsFlow.Requests;
namespace MaksIT.LetsEncryptServer.Controllers {
///
/// Certificates flow controller, used for granular testing purposes
///
[ApiController]
[Route("api/certs")]
public class CertsFlowController : ControllerBase {
private readonly ICertsFlowService _certsFlowService;
public CertsFlowController(
ICertsFlowService certsFlowService
) {
_certsFlowService = certsFlowService;
}
///
/// Initialize certificate flow session
///
/// sessionId
[HttpPost("configure-client")]
public async Task ConfigureClient([FromBody] ConfigureClientRequest requestData) {
var result = await _certsFlowService.ConfigureClientAsync(requestData);
return result.ToActionResult();
}
///
/// Retrieves terms of service
///
/// Session ID
/// Terms of service
[HttpGet("{sessionId}/terms-of-service")]
public IActionResult TermsOfService(Guid sessionId) {
var result = _certsFlowService.GetTermsOfService(sessionId);
return result.ToActionResult();
}
///
/// When a new certificate session is created, create or retrieve cache data by accountId
///
/// Session ID
/// Account ID
/// Request data
/// Account ID
[HttpPost("{sessionId}/init/{accountId?}")]
public async Task Init(Guid sessionId, Guid? accountId, [FromBody] InitRequest requestData) {
var result = await _certsFlowService.InitAsync(sessionId, accountId, requestData);
return result.ToActionResult();
}
///
/// After account initialization, create a new order request
///
/// Session ID
/// Request data
/// New order response
[HttpPost("{sessionId}/order")]
public async Task NewOrder(Guid sessionId, [FromBody] NewOrderRequest requestData) {
var result = await _certsFlowService.NewOrderAsync(sessionId, requestData);
return result.ToActionResult();
}
///
/// Complete challenges for the new order
///
/// Session ID
/// Challenges completion response
[HttpPost("{sessionId}/complete-challenges")]
public async Task CompleteChallenges(Guid sessionId) {
var result = await _certsFlowService.CompleteChallengesAsync(sessionId);
return result.ToActionResult();
}
///
/// Get order status before certificate retrieval
///
/// Session ID
/// Request data
/// Order status
[HttpGet("{sessionId}/order-status")]
public async Task GetOrder(Guid sessionId, [FromBody] GetOrderRequest requestData) {
var result = await _certsFlowService.GetOrderAsync(sessionId, requestData);
return result.ToActionResult();
}
///
/// Download certificates to local cache
///
/// Session ID
/// Request data
/// Certificates download response
[HttpPost("{sessionId}/certificates/download")]
public async Task GetCertificates(Guid sessionId, [FromBody] GetCertificatesRequest requestData) {
var result = await _certsFlowService.GetCertificatesAsync(sessionId, requestData);
return result.ToActionResult();
}
///
/// Apply certificates from local cache to remote server
///
/// Session ID
/// Request data
/// Certificates application response
[HttpPost("{sessionId}/certificates/apply")]
public async Task ApplyCertificates(Guid sessionId, [FromBody] GetCertificatesRequest requestData) {
var result = await _certsFlowService.ApplyCertificatesAsync(sessionId, requestData);
return result.ToActionResult();
}
}
}