Exemple #1
0
        /// <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));
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
        /// <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));
        }
Exemple #4
0
 /// <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));
 }
Exemple #5
0
        /// <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));
        }