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 }
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 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 }