123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // Package certinfo implements the HTTP handler for the certinfo command.
- package certinfo
- import (
- "net/http"
- "github.com/cloudflare/cfssl/api"
- "github.com/cloudflare/cfssl/certinfo"
- "github.com/cloudflare/cfssl/log"
- )
- // Handler accepts requests for either remote or uploaded
- // certificates to be bundled, and returns a certificate bundle (or
- // error).
- type Handler struct{}
- // NewHandler creates a new bundler that uses the root bundle and
- // intermediate bundle in the trust chain.
- func NewHandler() http.Handler {
- return api.HTTPHandler{Handler: new(Handler), Methods: []string{"POST"}}
- }
- // Handle implements an http.Handler interface for the bundle handler.
- func (h *Handler) Handle(w http.ResponseWriter, r *http.Request) (err error) {
- blob, matched, err := api.ProcessRequestFirstMatchOf(r,
- [][]string{
- {"certificate"},
- {"domain"},
- })
- if err != nil {
- log.Warningf("invalid request: %v", err)
- return err
- }
- var cert *certinfo.Certificate
- switch matched[0] {
- case "domain":
- if cert, err = certinfo.ParseCertificateDomain(blob["domain"]); err != nil {
- log.Warningf("couldn't parse remote certificate: %v", err)
- return err
- }
- case "certificate":
- if cert, err = certinfo.ParseCertificatePEM([]byte(blob["certificate"])); err != nil {
- log.Warningf("bad PEM certifcate: %v", err)
- return err
- }
- }
- return api.SendResponse(w, cert)
- }
|