gw

package
v0.0.0-...-672342d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 29, 2021 License: MIT Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const VER = "Sun Mar 14 06:20:49 -03 2021"

Variables

View Source
var Handlers []RPHandler
View Source
var Serve func()
View Source
var ServePrd = func() {
	log.Printf("Initiating GW")

	if !config.Acme {

		if config.SelfSigned && config.Https {
			log.Printf("Using https + self signed approach")
			tlscfg := &tls.Config{
				GetCertificate: func(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
					ca := caroot.GetOrGenFromRoot(info.ServerName)
					return ca, nil
				},
			}

			server := &http.Server{
				Addr:      config.Addr,
				Handler:   http.DefaultServeMux,
				TLSConfig: tlscfg,
			}
			go func() {
				err := server.ListenAndServeTLS("", "")
				if err != nil {
					log.Printf("Finishing server: %s", err.Error())
				}
			}()

		} else {

			if config.Addr == "" {
				config.Addr = ":8080"
			}

			log.Printf("No acme set - if required, set ENV VAR ACME")

			if config.Https {
				log.Printf("Using simple ssl approach")
				conn, err := net.Listen("tcp", config.Addr)
				util.ErrP(err)
				server := http.Server{}
				log.Printf("APIGW - Running HTTPS @ %v", config.Addr)
				go func() {
					err = server.ServeTLS(conn, config.Cert, config.Key)
					util.ErrP(err)

				}()
			} else {
				log.Printf("Using simple approach")
				server := &http.Server{Addr: config.Addr}
				log.Printf("APIGW - Running HTTP @ %v", config.Addr)
				go func() {
					err := server.ListenAndServe()
					util.ErrP(err)
				}()
			}
		}

	} else {
		log.Printf("Using ACME approach")
		if config.Certs == "" {
			config.Certs = "./certs"
		}
		log.Printf("ACME Found!")
		certManager := autocert.Manager{
			Prompt: autocert.AcceptTOS,
			Cache:  autocert.DirCache(path.Join("./certs")),
		}

		server := &http.Server{
			Addr: ":443",

			TLSConfig: &tls.Config{
				PreferServerCipherSuites: true,

				CurvePreferences: []tls.CurveID{
					tls.CurveP256,
					tls.X25519,
				},
				MinVersion: tls.VersionTLS12,
				CipherSuites: []uint16{
					tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
					tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
					tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
					tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
					tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
					tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
				},
				GetCertificate:     certManager.GetCertificate,
				InsecureSkipVerify: true,
			},
		}

		go func() {
			err := http.ListenAndServe(":80", certManager.HTTPHandler(nil))
			util.ErrP(err)
		}()
		go func() {
			err := server.ListenAndServeTLS("", "")
			util.ErrP(err)
		}()
	}
	log.Printf("Server Running")
	base.LockGoRoutine()
}

Functions

func CreateRPHandle

func CreateRPHandle(pre string, strurl string) func(w http.ResponseWriter, r *http.Request)

func Init

func Init()

func RegisterHandler

func RegisterHandler(handler RPHandler)

Types

type RPHandler

type RPHandler interface {
	Name() string
	Init(first bool, c util.ConfigStruct, mux *http.ServeMux)
	CreateRP(pre string, s string) func(w http.ResponseWriter, r *http.Request)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL