github.com/brimstone/sbuca@v0.0.0-20151202175429-8691d9eba5c5/server/certificates.go (about)

     1  package server
     2  
     3  import (
     4  	"github.com/go-martini/martini"
     5  	"github.com/martini-contrib/render"
     6  	//"github.com/brimstone/sbuca/x509util"
     7  	"net/http"
     8  	"strconv"
     9  
    10  	"github.com/brimstone/sbuca/ca"
    11  	"github.com/brimstone/sbuca/pkix"
    12  )
    13  
    14  func getCertificates(req *http.Request, params martini.Params, r render.Render) {
    15  
    16  	format := req.URL.Query().Get("format")
    17  
    18  	newCA, err := ca.NewCA(config["root-dir"])
    19  	if err != nil {
    20  		panic(err)
    21  	}
    22  
    23  	id := params["id"]
    24  	idInt, err := strconv.Atoi(id)
    25  	if err != nil {
    26  		r.JSON(401, map[string]interface{}{
    27  			"result": "wrong id",
    28  		})
    29  		return
    30  	}
    31  	cert, err := newCA.GetCertificate(int64(idInt))
    32  	if err != nil {
    33  		r.JSON(401, map[string]interface{}{
    34  			"result": "cannot get cert",
    35  		})
    36  		return
    37  	}
    38  
    39  	pem, err := cert.ToPEM()
    40  	if err != nil {
    41  		r.JSON(401, map[string]interface{}{
    42  			"result": "cannot get cert",
    43  		})
    44  		return
    45  	}
    46  
    47  	if format == "file" {
    48  		r.Data(200, pem)
    49  	} else {
    50  		r.JSON(200, map[string]interface{}{
    51  			"certificate": map[string]interface{}{
    52  				"id":  cert.GetSerialNumber().Int64(),
    53  				"crt": string(pem),
    54  				//"csr": csr,
    55  			},
    56  		})
    57  	}
    58  
    59  }
    60  
    61  func postCertificates(req *http.Request, params martini.Params, r render.Render) {
    62  
    63  	csrString := req.PostFormValue("csr")
    64  	format := req.URL.Query().Get("format")
    65  
    66  	csr, err := pkix.NewCertificateRequestFromPEM([]byte(csrString))
    67  	if err != nil {
    68  		panic(err)
    69  	}
    70  
    71  	newCA, err := ca.NewCA(config["root-dir"])
    72  	if err != nil {
    73  		panic(err)
    74  	}
    75  
    76  	cert, err := newCA.IssueCertificate(csr)
    77  	if err != nil {
    78  		panic(err)
    79  	}
    80  
    81  	certPem, err := cert.ToPEM()
    82  	if err != nil {
    83  		panic(err)
    84  	}
    85  	if format == "file" {
    86  		r.Data(200, certPem)
    87  	} else {
    88  		r.JSON(200, map[string]interface{}{
    89  			"certificate": map[string]interface{}{
    90  				"id":  cert.GetSerialNumber().Int64(),
    91  				"crt": string(certPem),
    92  				//"csr": csr,
    93  			},
    94  		})
    95  	}
    96  }