func()

in certViewer/cmd/web/handlers.go [34:91]


func (app *application) certPost(w http.ResponseWriter, r *http.Request) {
	err := r.ParseMultipartForm(1 << 20) // 10MB
	if err != nil {
		app.clientError(w, http.StatusBadRequest)
		return
	}

	form := certForm{
		RootCert: r.PostFormValue("rootCert"),
	}

	_, header, _ := r.FormFile("rootCertUpload")
	form.RootCertUpload = header

	form.CheckField(validator.NoPEMs(form.RootCert, form.RootCertUpload), "rootCertUpload", "Please upload or paste the contents of a PEM file")
	form.CheckField(validator.BothPEMs(form.RootCert, form.RootCertUpload), "rootCertUpload", "Please only submit a pasted PEM file OR upload a file")

	var pemFile string

	if form.RootCert != "" {
		form.CheckField(validator.ValidPEM(form.RootCert), "rootCert", "Invalid certificate format. Certificate must be PEM-encoded")
		pemFile = form.RootCert
	} else if form.RootCertUpload != nil {
		pemUploadFile := app.uploadSave(r)
		pemContents := app.pemReader(pemUploadFile)
		form.CheckField(validator.ValidPEM(pemContents), "rootCertUpload", "Invalid certificate format. Certificate must be PEM-encoded")
		pemFile = pemContents

		// remove the cert written to the file system
		app.certCleanup(pemUploadFile)
	}

	if !form.Valid() {
		data := app.newTemplateData(r)
		data.Form = form
		app.render(w, r, http.StatusUnprocessableEntity, "home.tmpl", data)
		return
	}

	block, _ := pem.Decode([]byte(pemFile))
	if block == nil {
		app.clientError(w, http.StatusBadRequest)
		return
	}

	certX509, err := x509.ParseCertificate(block.Bytes)
	if err != nil {
		app.clientError(w, http.StatusBadRequest)
		return
	}

	certData := certInfo(certX509)
	data := app.newTemplateData(r)
	data.Certificate = certData
	data.Form = form

	app.render(w, r, http.StatusOK, "home.tmpl", data)
}