mirror of https://github.com/jlelse/GoBlog
Add config for short domains
This commit is contained in:
parent
9e4a03549f
commit
efce703f33
|
@ -72,7 +72,7 @@ func initActivityPub() error {
|
|||
}
|
||||
|
||||
func apHandleWebfinger(w http.ResponseWriter, r *http.Request) {
|
||||
re, err := regexp.Compile(`^acct:(.*)@` + regexp.QuoteMeta(appConfig.Server.Domain) + `$`)
|
||||
re, err := regexp.Compile(`^acct:(.*)@` + regexp.QuoteMeta(appConfig.Server.publicHostname) + `$`)
|
||||
if err != nil {
|
||||
serveError(w, r, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
|
@ -85,7 +85,7 @@ func apHandleWebfinger(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
w.Header().Set(contentType, "application/jrd+json"+charsetUtf8Suffix)
|
||||
_ = json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"subject": "acct:" + name + "@" + appConfig.Server.Domain,
|
||||
"subject": "acct:" + name + "@" + appConfig.Server.publicHostname,
|
||||
"links": []map[string]string{
|
||||
{
|
||||
"rel": "self",
|
||||
|
|
34
config.go
34
config.go
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
|
@ -23,15 +24,17 @@ type config struct {
|
|||
}
|
||||
|
||||
type configServer struct {
|
||||
Logging bool `mapstructure:"logging"`
|
||||
LogFile string `mapstructure:"logFile"`
|
||||
Debug bool `mapstructure:"Debug"`
|
||||
Port int `mapstructure:"port"`
|
||||
Domain string `mapstructure:"domain"`
|
||||
PublicAddress string `mapstructure:"publicAddress"`
|
||||
PublicHTTPS bool `mapstructure:"publicHttps"`
|
||||
LetsEncryptMail string `mapstructure:"letsEncryptMail"`
|
||||
JWTSecret string `mapstructure:"jwtSecret"`
|
||||
Logging bool `mapstructure:"logging"`
|
||||
LogFile string `mapstructure:"logFile"`
|
||||
Debug bool `mapstructure:"Debug"`
|
||||
Port int `mapstructure:"port"`
|
||||
PublicAddress string `mapstructure:"publicAddress"`
|
||||
ShortPublicAddress string `mapstructure:"shortPublicAddress"`
|
||||
PublicHTTPS bool `mapstructure:"publicHttps"`
|
||||
LetsEncryptMail string `mapstructure:"letsEncryptMail"`
|
||||
JWTSecret string `mapstructure:"jwtSecret"`
|
||||
publicHostname string
|
||||
shortPublicHostname string
|
||||
}
|
||||
|
||||
type configDb struct {
|
||||
|
@ -211,8 +214,17 @@ func initConfig() error {
|
|||
return err
|
||||
}
|
||||
// Check config
|
||||
if appConfig.Server.Domain == "" {
|
||||
return errors.New("no domain configured")
|
||||
publicURL, err := url.Parse(appConfig.Server.PublicAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
appConfig.Server.publicHostname = publicURL.Hostname()
|
||||
if appConfig.Server.ShortPublicAddress != "" {
|
||||
shortPublicURL, err := url.Parse(appConfig.Server.ShortPublicAddress)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
appConfig.Server.shortPublicHostname = shortPublicURL.Hostname()
|
||||
}
|
||||
if appConfig.Server.JWTSecret == "" {
|
||||
return errors.New("no JWT secret configured")
|
||||
|
|
8
http.go
8
http.go
|
@ -49,7 +49,11 @@ func startServer() (err error) {
|
|||
certmagic.DefaultACME.Agreed = true
|
||||
certmagic.DefaultACME.Email = appConfig.Server.LetsEncryptMail
|
||||
certmagic.DefaultACME.CA = certmagic.LetsEncryptProductionCA
|
||||
err = certmagic.HTTPS([]string{appConfig.Server.Domain}, securityHeaders(d))
|
||||
hosts := []string{appConfig.Server.publicHostname}
|
||||
if appConfig.Server.shortPublicHostname != "" {
|
||||
hosts = append(hosts, appConfig.Server.shortPublicHostname)
|
||||
}
|
||||
err = certmagic.HTTPS(hosts, securityHeaders(d))
|
||||
} else {
|
||||
err = http.ListenAndServe(localAddress, d)
|
||||
}
|
||||
|
@ -72,9 +76,9 @@ func buildHandler() (http.Handler, error) {
|
|||
if appConfig.Server.Logging {
|
||||
r.Use(logMiddleware)
|
||||
}
|
||||
// r.Use(middleware.Logger)
|
||||
r.Use(middleware.Recoverer)
|
||||
r.Use(middleware.Compress(flate.DefaultCompression))
|
||||
r.Use(redirectShortDomain)
|
||||
r.Use(middleware.RedirectSlashes)
|
||||
r.Use(middleware.CleanPath)
|
||||
r.Use(middleware.GetHead)
|
||||
|
|
|
@ -17,6 +17,9 @@ func (p *post) shortURL() string {
|
|||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
if appConfig.Server.ShortPublicAddress != "" {
|
||||
return appConfig.Server.ShortPublicAddress + s
|
||||
}
|
||||
return appConfig.Server.PublicAddress + s
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func redirectShortDomain(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
||||
if appConfig.Server.shortPublicHostname != "" && r.Host == appConfig.Server.shortPublicHostname {
|
||||
http.Redirect(rw, r, appConfig.Server.PublicAddress+r.RequestURI, http.StatusMovedPermanently)
|
||||
return
|
||||
}
|
||||
next.ServeHTTP(rw, r)
|
||||
})
|
||||
}
|
|
@ -48,7 +48,7 @@ func handleWebmention(w http.ResponseWriter, r *http.Request) {
|
|||
serveError(w, r, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
if !isAllowedHost(httptest.NewRequest(http.MethodGet, m.Target, nil), r.URL.Host, appConfig.Server.Domain) {
|
||||
if !isAllowedHost(httptest.NewRequest(http.MethodGet, m.Target, nil), appConfig.Server.publicHostname) {
|
||||
serveError(w, r, "target not allowed", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue