Start implementing main config

This commit is contained in:
Anders Pitman 2020-09-28 14:07:54 -06:00
parent 92affa7718
commit 501af0c3dc

View File

@ -10,11 +10,26 @@ import (
"sync" "sync"
"strconv" "strconv"
"encoding/json" "encoding/json"
"io/ioutil"
"github.com/caddyserver/certmagic" "github.com/caddyserver/certmagic"
) )
type BoringProxyConfig struct {
AdminDomain string `json:"admin_domain"`
Smtp *SmtpConfig `json:"smtp"`
}
type SmtpConfig struct {
Server string
Port int
Username string
Password string
}
type BoringProxy struct { type BoringProxy struct {
config *BoringProxyConfig
tunMan *TunnelManager tunMan *TunnelManager
adminListener *AdminListener adminListener *AdminListener
certConfig *certmagic.Config certConfig *certmagic.Config
@ -22,6 +37,19 @@ type BoringProxy struct {
func NewBoringProxy() *BoringProxy { func NewBoringProxy() *BoringProxy {
config := &BoringProxyConfig{}
configJson, err := ioutil.ReadFile("boringproxy_config.json")
if err != nil {
log.Println(err)
}
err = json.Unmarshal(configJson, config)
if err != nil {
log.Println(err)
config = &BoringProxyConfig{}
}
//certmagic.DefaultACME.DisableHTTPChallenge = true //certmagic.DefaultACME.DisableHTTPChallenge = true
certmagic.DefaultACME.DisableTLSALPNChallenge = true certmagic.DefaultACME.DisableTLSALPNChallenge = true
//certmagic.DefaultACME.CA = certmagic.LetsEncryptStagingCA //certmagic.DefaultACME.CA = certmagic.LetsEncryptStagingCA
@ -30,14 +58,14 @@ func NewBoringProxy() *BoringProxy {
tunMan := NewTunnelManager(certConfig) tunMan := NewTunnelManager(certConfig)
adminListener := NewAdminListener() adminListener := NewAdminListener()
err := certConfig.ManageSync([]string{"anders.boringproxy.io"}) err = certConfig.ManageSync([]string{config.AdminDomain})
if err != nil { if err != nil {
log.Println("CertMagic error") log.Println("CertMagic error")
log.Println(err) log.Println(err)
} }
p := &BoringProxy{tunMan, adminListener, certConfig} p := &BoringProxy{config, tunMan, adminListener, certConfig}
http.HandleFunc("/", p.handleAdminRequest) http.HandleFunc("/", p.handleAdminRequest)
go http.Serve(adminListener, nil) go http.Serve(adminListener, nil)
@ -143,8 +171,7 @@ func (p *BoringProxy) handleConnection(clientConn net.Conn) {
// is automatically called on first read/write // is automatically called on first read/write
decryptedConn.Handshake() decryptedConn.Handshake()
adminDomain := "anders.boringproxy.io" if serverName == p.config.AdminDomain {
if serverName == adminDomain {
p.handleAdminConnection(decryptedConn) p.handleAdminConnection(decryptedConn)
} else { } else {
p.handleTunnelConnection(decryptedConn, serverName) p.handleTunnelConnection(decryptedConn, serverName)