func BuildErrorWithJSON(msg string, logger boshlog.Logger) ([]byte, error) {
	response := NewExceptionResponse(bosherr.Error(msg))

	respJSON, err := json.Marshal(response)
	if err != nil {
		return respJSON, bosherr.WrapError(err, "Marshalling JSON")
	}

	logger.Info(mbusHandlerLogTag, "Building error", msg)

	return respJSON, nil
}
예제 #2
0
func (d *Downloader) Download(logger logger.Logger, url string) error {
	logger.Info("Download", "Downloading %s...", url)
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		logger.Error("Download", "Couldn't make the request to %s: %s", url, err.Error())
		return err
	}

	client, err := d.httpClient()
	if err != nil {
		logger.Error("Download", "Couldn't make the http client %s", err.Error())
		return err
	}

	resp, err := client.Do(req)
	if err != nil {
		logger.Error("Download", "Couldn't do the request (%s): %s", req, err.Error())
		return err
	}

	if resp.StatusCode != http.StatusOK {
		err := fmt.Errorf("Download failed, bad response: %s", resp.Status)
		logger.Error("Download", err.Error())
		return err
	}

	certificateVerifier := auth.CertificateVerifier{AllowedNames: d.config.PkixNames}

	err = certificateVerifier.Verify(resp.TLS.PeerCertificates)
	if err != nil {
		return err
	}

	logger.Info("Download", "Downloading complete. Installing...")
	err = d.installer.Install(resp.Body)
	if err != nil {
		return err
	}

	logger.Info("Download", "Download succeeded")
	return nil
}
func PerformHandlerWithJSON(rawJSON []byte, handler Func, maxResponseLength int, logger boshlog.Logger) ([]byte, Request, error) {
	var request Request

	err := json.Unmarshal(rawJSON, &request)
	if err != nil {
		return []byte{}, request, bosherr.WrapError(err, "Unmarshalling JSON payload")
	}

	request.Payload = rawJSON

	logger.Info(mbusHandlerLogTag, "Received request with action %s", request.Method)
	logger.DebugWithDetails(mbusHandlerLogTag, "Payload", request.Payload)

	response := handler(request)
	if response == nil {
		logger.Info(mbusHandlerLogTag, "Nil response returned from handler")
		return []byte{}, request, nil
	}

	respJSON, err := marshalResponse(response, maxResponseLength, logger)
	if err != nil {
		return respJSON, request, err
	}

	logger.Info(mbusHandlerLogTag, "Responding")
	logger.DebugWithDetails(mbusHandlerLogTag, "Payload", respJSON)

	return respJSON, request, nil
}