Example #1
0
func newSSLConfig(logger logger.Logger) auth.SSLConfig {
	pem, err := ioutil.ReadFile(*caPemFile)
	if err != nil {
		logger.Error("CaPEMFile", "failed to read pemFile: ", err)
		os.Exit(1)
	}

	config, err := auth.NewSSLConfig(*certFile, *keyFile, string(pem), []string{*allowedName})
	if err != nil {
		logger.Error("Config", "Unable to create SSL config", err)
		os.Exit(1)
	}
	return config
}
func NewSignalableLogger(writerLogger logger.Logger, signalChannel chan os.Signal) (logger.Logger, chan bool) {
	doneChannel := make(chan bool, 1)
	go func() {
		for {
			<-signalChannel
			writerLogger.Error("Received SIGSEGV", "Dumping goroutines...")
			stackTrace := make([]byte, 10000)
			runtime.Stack(stackTrace, true)
			writerLogger.Error("Received SIGSEGV", string(stackTrace))
			doneChannel <- true
		}
	}()
	return writerLogger, doneChannel
}
Example #3
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
}
Example #4
0
func parseFlags(logger logger.Logger) {
	err := flags.Parse(os.Args[3:])
	if err != nil {
		usage()
	}
	flags.VisitAll(func(f *flag.Flag) {
		if f.Value.String() == "" {
			logger.Error("flags", "%s is a required flag", f.Name)
			usage()
		}
	})
}
func marshalResponse(response Response, maxResponseLength int, logger boshlog.Logger) ([]byte, error) {
	respJSON, err := json.Marshal(response)
	if err != nil {
		logger.Error(mbusHandlerLogTag, "Failed to marshal response: %s", err.Error())
		return respJSON, bosherr.WrapError(err, "Marshalling JSON response")
	}

	if maxResponseLength == UnlimitedResponseLength {
		return respJSON, nil
	}

	if len(respJSON) > maxResponseLength {
		respJSON, err = json.Marshal(response.Shorten())
		if err != nil {
			logger.Error(mbusHandlerLogTag, "Failed to marshal response: %s", err.Error())
			return respJSON, bosherr.WrapError(err, "Marshalling JSON response")
		}
	}

	if len(respJSON) > maxResponseLength {
		respJSON, err = BuildErrorWithJSON(responseMaxLengthErrMsg, logger)
		if err != nil {
			logger.Error(mbusHandlerLogTag, "Failed to build 'max length exceeded' response: %s", err.Error())
			return respJSON, bosherr.WrapError(err, "Building error")
		}
	}

	return respJSON, nil
}