forked from TrueCloudLab/lego
42941ccea6
- Packages - Isolate code used by the CLI into the package `cmd` - (experimental) Add e2e tests for HTTP01, TLS-ALPN-01 and DNS-01, use [Pebble](https://github.com/letsencrypt/pebble) and [challtestsrv](https://github.com/letsencrypt/boulder/tree/master/test/challtestsrv) - Support non-ascii domain name (punnycode) - Check all challenges in a predictable order - No more global exported variables - Archive revoked certificates - Fixes revocation for subdomains and non-ascii domains - Disable pending authorizations - use pointer for RemoteError/ProblemDetails - Poll authz URL instead of challenge URL - The ability for a DNS provider to solve the challenge sequentially - Check all nameservers in a predictable order - Option to disable the complete propagation Requirement - CLI, support for renew with CSR - CLI, add SAN on renew - Add command to list certificates. - Logs every iteration of waiting for the propagation - update DNSimple client - update github.com/miekg/dns
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"errors"
|
|
|
|
"github.com/xenolf/lego/acme"
|
|
)
|
|
|
|
type OrderService service
|
|
|
|
// New Creates a new order.
|
|
func (o *OrderService) New(domains []string) (acme.ExtendedOrder, error) {
|
|
var identifiers []acme.Identifier
|
|
for _, domain := range domains {
|
|
identifiers = append(identifiers, acme.Identifier{Type: "dns", Value: domain})
|
|
}
|
|
|
|
orderReq := acme.Order{Identifiers: identifiers}
|
|
|
|
var order acme.Order
|
|
resp, err := o.core.post(o.core.GetDirectory().NewOrderURL, orderReq, &order)
|
|
if err != nil {
|
|
return acme.ExtendedOrder{}, err
|
|
}
|
|
|
|
return acme.ExtendedOrder{
|
|
Location: resp.Header.Get("Location"),
|
|
Order: order,
|
|
}, nil
|
|
}
|
|
|
|
// Get Gets an order.
|
|
func (o *OrderService) Get(orderURL string) (acme.Order, error) {
|
|
if len(orderURL) == 0 {
|
|
return acme.Order{}, errors.New("order[get]: empty URL")
|
|
}
|
|
|
|
var order acme.Order
|
|
_, err := o.core.postAsGet(orderURL, &order)
|
|
if err != nil {
|
|
return acme.Order{}, err
|
|
}
|
|
|
|
return order, nil
|
|
}
|
|
|
|
// UpdateForCSR Updates an order for a CSR.
|
|
func (o *OrderService) UpdateForCSR(orderURL string, csr []byte) (acme.Order, error) {
|
|
csrMsg := acme.CSRMessage{
|
|
Csr: base64.RawURLEncoding.EncodeToString(csr),
|
|
}
|
|
|
|
var order acme.Order
|
|
_, err := o.core.post(orderURL, csrMsg, &order)
|
|
if err != nil {
|
|
return acme.Order{}, err
|
|
}
|
|
|
|
if order.Status == acme.StatusInvalid {
|
|
return acme.Order{}, order.Error
|
|
}
|
|
|
|
return order, nil
|
|
}
|