/// <inheritdoc/> public AcmeResponse PostAccount(AcmeRequest request) { return(WrapAction((response) => { var @params = (UpdateAccount)request.GetContent(ConverterService.GetType <UpdateAccount>()); var account = GetAccount(request); if (@params.Status != null) { // Deactivate if (@params.Status != AccountStatus.Deactivated) { throw new MalformedException("Request parameter status must be 'deactivated'"); } account = AccountService.Deactivate(account.Id); } else if (@params.Contacts != null) { // Update account = AccountService.Update(account.Id, @params); } response.Headers.Location = $"{Options.BaseAddress}acct/{account.Id}"; response.Content = ConverterService.ToAccount(account); }, request)); }
/// <inheritdoc/> public AcmeResponse CreateOrder(AcmeRequest request) { return(WrapAction((response) => { // get account var account = GetAccount(request); // get params var @params = (NewOrder)request.GetContent(ConverterService.GetType <NewOrder>()); // get order var order = OrderService.GetActual(account.Id, @params); if (order == null) { // create order order = OrderService.Create(account.Id, @params); response.StatusCode = 201; // Created } // add headers response.Headers.Location = new Uri(new Uri(Options.BaseAddress), $"order/{order.Id}").ToString(); // convert to JSON response.Content = ConverterService.ToOrder(order); }, request)); }
/// <inheritdoc/> public AcmeResponse FinalizeOrder(AcmeRequest request, int orderId) { return(WrapAction((response) => { // get account var account = GetAccount(request); // enroll certificate var @params = (FinalizeOrder)request.GetContent(ConverterService.GetType <FinalizeOrder>()); var order = OrderService.EnrollCertificate(account.Id, orderId, @params); // add headers response.Headers.Location = new Uri(new Uri(Options.BaseAddress), $"order/{order.Id}").ToString(); response.Content = ConverterService.ToOrder(order); }, request)); }
/// <inheritdoc/> public AcmeResponse RevokeCertificate(AcmeRequest request) { return(WrapAction((response) => { var header = request.Token.GetProtected(); var @params = (RevokeCertificate)request.GetContent(ConverterService.GetType <RevokeCertificate>()); if (header.KeyID != null) { var account = GetAccount(request); OrderService.RevokeCertificate(account.Id, @params); } else { OrderService.RevokeCertificate(header.Key, @params); } }, request)); }
/// <inheritdoc/> public AcmeResponse CreateAccount(AcmeRequest request) { return(WrapAction(response => { var header = request.Token.GetProtected(); var @params = (NewAccount)request.GetContent(ConverterService.GetType <NewAccount>()); var account = AccountService.FindByPublicKey(header.Key); if (@params.OnlyReturnExisting == true) { if (account == null) { throw new AccountDoesNotExistException(); } response.Content = ConverterService.ToAccount(account); response.StatusCode = 200; // Ok } else { if (account == null) { // Create new account account = AccountService.Create(header.Key, @params); response.Content = ConverterService.ToAccount(account); response.StatusCode = 201; // Created } else { // Existing account response.Content = ConverterService.ToAccount(account); response.StatusCode = 200; // Ok } } response.Headers.Location = $"{Options.BaseAddress}acct/{account.Id}"; }, request, true)); }