This commit is contained in:
Seth Grover 2025-09-23 16:00:27 +00:00 committed by GitHub
commit 0ddc3cbee9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 50 additions and 18 deletions

10
main.go
View file

@ -43,6 +43,9 @@ func main() {
Flags: []cli.Flag{
cli.StringFlag{Name: "url, u", Value: "localhost", Usage: "public URL to use"},
cli.StringFlag{Name: "port", Value: "8010", Usage: "ports of the local relay"},
cli.StringFlag{Name: "google-site-verification-id, g", Value: "", Usage: "Google site verification ID"},
cli.StringFlag{Name: "umami-url", Value: "", Usage: "Umami analytics URL"},
cli.StringFlag{Name: "umami-id", Value: "", Usage: "Umami analytics ID"},
},
HelpName: "hostyoself relay",
Action: func(c *cli.Context) error {
@ -118,6 +121,11 @@ func relay(c *cli.Context) (err error) {
flagPublicURL = "http://" + flagPublicURL
}
s := server.New(flagPublicURL, c.String("port"))
s := server.New(
flagPublicURL,
c.String("port"),
c.String("google-site-verification-id"),
c.String("umami-url"),
c.String("umami-id"))
return s.Run()
}

View file

@ -21,8 +21,11 @@ import (
)
type server struct {
publicURL string
port string
publicURL string
port string
googleSiteVerification string
umamiURL string
umamiID string
// connections stored as map of domain -> connections
conn map[string][]*connection
@ -39,11 +42,14 @@ type connection struct {
ws *wsconn.WebsocketConn
}
func New(publicURL, port string) *server {
func New(publicURL, port, googleSiteVerification, umamiURL, umamiID string) *server {
return &server{
publicURL: publicURL,
port: port,
conn: make(map[string][]*connection),
publicURL: publicURL,
port: port,
googleSiteVerification: googleSiteVerification,
umamiURL: umamiURL,
umamiID: umamiID,
conn: make(map[string][]*connection),
}
}
@ -106,14 +112,20 @@ Disallow:`))
return err
}
type view struct {
PublicURL template.JS
GeneratedDomain string
GeneratedKey string
PublicURL template.JS
GoogleSiteVerification string
UmamiURL template.JS
UmamiID string
GeneratedDomain string
GeneratedKey string
}
return t.Execute(w, view{
PublicURL: template.JS(s.publicURL),
GeneratedDomain: namesgenerator.GetRandomName(),
GeneratedKey: utils.RandStringBytesMaskImpr(6),
PublicURL: template.JS(s.publicURL),
GoogleSiteVerification: s.googleSiteVerification,
UmamiURL: template.JS(s.umamiURL),
UmamiID: s.umamiID,
GeneratedDomain: namesgenerator.GetRandomName(),
GeneratedKey: utils.RandStringBytesMaskImpr(6),
})
} else {
// get IP address
@ -206,11 +218,15 @@ Disallow:`))
return
}
return t.Execute(w, struct {
Files []File
Domain string
Domain string
Files []File
UmamiURL template.JS
UmamiID string
}{
Domain: domain,
Files: fs,
Domain: domain,
Files: fs,
UmamiURL: template.JS(s.umamiURL),
UmamiID: s.umamiID,
})
} else {
log.Debugf("problem getting: %s", err.Error())

View file

@ -1,6 +1,9 @@
<html>
<head>
{{ if and .UmamiURL .UmamiID }}
<script defer src="{{ .UmamiURL }}" data-website-id="{{ .UmamiID }}"></script>
{{ end }}
</head>
<body>

7
templates/view.html vendored
View file

@ -4,7 +4,12 @@
<head>
<meta charset='utf-8'>
<title>host yo self</title>
<meta name="google-site-verification" content="shffrGJ5t6F5m-ILyEVvbmxk8Fh1x_dSl6SF-WNKIWU" />
{{ if .GoogleSiteVerification }}
<meta name="google-site-verification" content="{{ .GoogleSiteVerification }}" />
{{ end }}
{{ if and .UmamiURL .UmamiID }}
<script defer src="{{ .UmamiURL }}" data-website-id="{{ .UmamiID }}"></script>
{{ end }}
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name='description' content='Need a web host? Host your self! Use this page to host a website or a file directly from your computer / phone / smartwatch / toaster!'>
<meta name='viewport' content='width=device-width, initial-scale=1'>