func()

in evReady/cmd/web/handlers.go [35:102]


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

	form := evForm{
		Hostname: r.PostFormValue("hostname"),
		OID:      r.PostFormValue("oid"),
		RootCert: r.PostFormValue("rootCert"),
	}

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

	form.CheckField(validator.NotBlank(form.Hostname), "hostname", "Hostname field is required")
	form.CheckField(validator.MaxChars(form.Hostname, 253), "hostname", "Hostname cannot be more than 253 characters")
	form.CheckField(validator.ValidURL(form.Hostname), "hostname", "Hostname must be in a valid URL format with no spaces")
	form.CheckField(validator.NotBlank(form.OID), "oid", "OID field is required")
	form.CheckField(validator.MaxChars(form.OID, 253), "oid", "OID cannot be more than 253 characters")
	form.CheckField(validator.ValidOID(form.OID), "oid", "OID must be a valid OID format")
	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")

	hostname := app.urlCleaner(form.Hostname)
	oid := strings.TrimSpace(form.OID)

	var pemFile string

	if form.RootCert != "" {
		form.CheckField(validator.ValidPEM(form.RootCert), "rootCert", "Invalid certificate format. Certificate must be PEM-encoded")
		pemFile, err = app.pemCreator(hostname, form.RootCert)
		if err != nil {
			app.logger.Error("Unable to create PEM file from pasted contents", "Error", err.Error())
		}
	} else if form.RootCertUpload != nil {
		pemUploadFile := app.pemReader(app.uploadSave(r))
		form.CheckField(validator.ValidPEM(pemUploadFile), "rootCertUpload", "Invalid certificate format. Certificate must be PEM-encoded")
		pemFile, err = app.pemCreator(hostname, pemUploadFile)
		if err != nil {
			app.logger.Error("Unable to create PEM file from upload", "Error", err.Error())
		}
	}

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

	out, err := exec.Command(evReadyExec, "-h", hostname, "-o", oid, "-c", pemFile).CombinedOutput()
	if err != nil {
		app.logger.Error("ev-ready exec failed", "Error", err.Error())
	}

	app.logger.Info("Ran ev-checker", "Status", string(out))
	flash := string(out)

	data := app.newTemplateData(r)
	data.Form = form
	data.Flash = flash
	app.render(w, r, http.StatusOK, "home.tmpl", data)

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