12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package main
- import (
- "fmt"
- "log"
- "net/http"
- "os"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
- )
- type Opts struct {
- Port uint16
- KeyFile string
- CertFile string
- }
- func handler(writer http.ResponseWriter, request *http.Request) {
- res := "pong.my"
- writer.Header().Set("Content-Type", "text/plain")
- writer.WriteHeader(http.StatusOK)
- _, _ = writer.Write([]byte(res))
- }
- func runServer(opts *Opts) error {
- mainMux := http.NewServeMux()
- mainMux.Handle("/ping", http.HandlerFunc(handler))
- server := &http.Server{
- Addr: fmt.Sprintf("localhost:%d", opts.Port),
- Handler: mainMux,
- ErrorLog: log.New(os.Stdout, "", log.LstdFlags),
- }
- return server.ListenAndServeTLS(opts.CertFile, opts.KeyFile)
- }
- func markFlagRequired(flags *pflag.FlagSet, names ...string) {
- for _, n := range names {
- name := n
- if err := cobra.MarkFlagRequired(flags, name); err != nil {
- panic(err)
- }
- }
- }
- func main() {
- opts := Opts{}
- cmd := cobra.Command{
- RunE: func(cmd *cobra.Command, args []string) error {
- return runServer(&opts)
- },
- }
- flags := cmd.Flags()
- flags.Uint16Var(&opts.Port, "port", 0, "")
- flags.StringVar(&opts.KeyFile, "keyfile", "", "path to key file")
- flags.StringVar(&opts.CertFile, "certfile", "", "path to cert file")
- markFlagRequired(flags, "port", "keyfile", "certfile")
- if err := cmd.Execute(); err != nil {
- _, _ = fmt.Fprintf(os.Stderr, "Exit with err: %s", err)
- os.Exit(1)
- }
- }
|