in internal/mock/alloydbadmin.go [98:150]
func CreateEphemeralSuccess(i FakeAlloyDBInstance, ct int) *Request {
return &Request{
reqMethod: http.MethodPost,
reqPath: fmt.Sprintf(
"/v1alpha/projects/%s/locations/%s/clusters/%s:generateClientCertificate",
i.project, i.region, i.cluster),
reqCt: ct,
handle: func(resp http.ResponseWriter, req *http.Request) {
// Read the body from the request.
b, err := io.ReadAll(req.Body)
defer req.Body.Close()
if err != nil {
http.Error(resp, fmt.Errorf("unable to read body: %w", err).Error(), http.StatusBadRequest)
return
}
var rreq alloydbpb.GenerateClientCertificateRequest
err = protojson.Unmarshal(b, &rreq)
if err != nil {
http.Error(resp, fmt.Errorf("invalid or unexpected json: %w", err).Error(), http.StatusBadRequest)
return
}
bl, _ := pem.Decode([]byte(rreq.PublicKey))
if bl == nil {
http.Error(resp, fmt.Errorf("unable to decode CSR: %w", err).Error(), http.StatusBadRequest)
return
}
pub, err := x509.ParsePKCS1PublicKey(bl.Bytes)
if err != nil {
http.Error(resp, fmt.Errorf("unable to decode CSR: %w", err).Error(), http.StatusBadRequest)
return
}
chain, err := i.GeneratePEMCertificateChain(pub)
if err != nil {
http.Error(
resp,
fmt.Errorf("unable to create certificate: %w", err).Error(),
http.StatusBadRequest,
)
return
}
rresp := alloydbpb.GenerateClientCertificateResponse{
CaCert: chain[len(chain)-1], // last entry is CA
PemCertificateChain: chain,
}
if err := json.NewEncoder(resp).Encode(&rresp); err != nil {
http.Error(resp, fmt.Errorf("unable to encode response: %w", err).Error(), http.StatusBadRequest)
return
}
},
}
}