8.2 more domains, move beta signups

This commit is contained in:
metacryst
2025-08-02 19:38:03 -05:00
parent 5ba9bae02c
commit 343f466c6e
6 changed files with 274 additions and 37 deletions

104
beta/beta_signups.csv Normal file
View File

@@ -0,0 +1,104 @@
Email
Abishanka.saha@gmail.com
juancampa@gmail.com
Bgfrazier@gmail.com
kernelsoe@gmail.com
Ekonomy@protonmail.com
kisunnayo@duck.com
Jacob_moya1117@yahoo.com
matias.sjoblom6@gmail.com
Ldelunak5@gmail.com
maxkmobey@icloud.com
W2019fgatfield@gmail.com
montanarinick@gmail.com
abishanka.saha@gmail.com
nate.d.luna@gmail.com
akbir.yfoga@8shield.net
noahflodder@gmail.com
arc360yt@gmail.com
omar.elfanek@gmail.com
aritraneogi2006@gmail.com
parchment.653468@schlosser.xyz
aubertbrennan@gmail.com
"parchment.page.displace612@passmail.net"
augustinamari14@gmail.com
pj@kantak.de
belle.smithies@gmail.com
pratyush.sahoo55@gmail.com
ben@bn0367.com
quigleyoto@gmail.com
bridger.joshua@gmail.com
resstowot@gmail.com
carlosgarciagutierrez.cgagu@gmail.com
samuel@sun.museum
cerca_sesion0u@icloud.com
sherin@hey.com
chankahei123456@gmail.com
ssampaoli@equo.dev
danielrouhana@gmail.com
sunny.gonna@gmail.com
david.regev@gmail.com
tamarindtypex@proton.me
fm100310@gmail.com
guignardmathias@gmail.com
vasconcelos.arthur@gmail.com
happywzm@gmail.com
victordedomenico.du60@gmail.com
hello@marlin.red
voidmelon@skiff.com
iyousifsabah@gmail.com
youvegotcaleb@gmail.com
jaywin.jv@gmail.com
zayn.khan@uconn.edu
john0000wu@gmail.com
Lukasdavisbarrs@gmail.com,2.20 9:35pm
zacharywood92@gmail.com,2.25 7:40pm
TYHSoftware@gmail.com,2.29 4:42pm
arnav@arnavgosain.com,3.1 2:23pm
fvaughan36@gmail.com,4.2 6:51pm
parchment@a.odajay.com,4.4 12:48pm
logan.a.welsh@gmail.com,4.21 12:16pm
andrew@renormalizing.com,4.22 2:10pm
shukur.mukhtarov@gmail.com,4.22 8:40pm
Jf.jessie@gmail.com,4.24 3:02am
dhanraj6174@gmail.com,4.25 12:55am
wenwu@hey.com,5.17 10:54pm
pcnk08@gmail.com,5.23 8:44am
Dainajag@aim.com,7.1 5:33am
Dainajag@aol.com,7.1 5:34am
luckyplukas@gmail.com,7.1 6:49am
yinan@hey.com,7.1 12:21pm
mano@flairvc.com,7.3 1:04pm
kayruss1@gmail.com,7.4 1:47pm
luckyplukas@googlemail.com,7.18 6:44am
rennt@oregonstate.edu,8.6 4:38pm
weconel991@daypey.com,8.22 11:55am
test@test.com,8.22 11:55am
jn,8.28 1:55pm
hart.lucas02@gmail.com,8.28 7:33pm
joe.jbh@proton.me,8.29 5:38pm
theobragstad22@gmail.com,8.29 6:25pm
seandavrancomputerscience@gmail.com,8.30 5:48am
sandavran@gmail.com,8.30 5:49am
harikakondur3@gmail.com,9.5 3:25pm
jacobef2@gmail.com,9.7 12:04am
gregjf@gmail.com,9.9 10:48pm
fnnjfndj@fake.com,9.25 3:10pm
ganeshharshu27@gmail.com,9.25 5:48pm
brayden.a15@gmail.com,9.26 10:48am
fantomhaiv65@gmail.com,9.26 1:40pm
ravidatd@oregonstate.edu,9.26 9:08pm
ethanpeterson55@gmail.com,9.27 12:48pm
craetona@oregonstate.edu,9.27 2:21pm
baumanne@oregonstate.edu,9.27 3:39pm
morgirme@gmail.com,9.29 9:19pm
saakiyama02@gmail.com,9.30 1:04am
randquistcp@gmail.com,10.4 8:52am
mgriffin@ncose.com,10.16 2:40pm
beastern@gmail.com,10.23 8:03pm
jalvarez062001@gmail.com,11.2 4:23pm
intim@oregonstate.edu,11.29 6:42pm
danielburnstech@gmail.com,12.12 11:12am
taykingg@gmail.com,6.19.2025 10:22pm
asdf@pm.me,8.2.2025 7:32pm
pp@pm.me,8.2.2025 7:37pm
Can't render this file because it has a wrong number of fields in line 54.

50
fullchain.pem Normal file
View File

@@ -0,0 +1,50 @@
-----BEGIN CERTIFICATE-----
MIIECzCCA5KgAwIBAgISBXwhSxScclnvXiGv4vODPHAqMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNTA0MDgxNTUxNDlaFw0yNTA3MDcxNTUxNDhaMBsxGTAXBgNVBAMMECou
cGFyY2htZW50LnBhZ2UwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASFM3oC5uJD
B9BiyHKvk2LQFDngkMA9W6XHhxuuwi4//XprHY4+kYc+EoSNkz4m5ku5b1FG5wY2
hzVnnYeyhBdno4ICnTCCApkwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsG
AQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSvq5Yi60F/
nsb9/R0UGw15Sl/aGjAfBgNVHSMEGDAWgBSfK1/PPCFPnQS37SssxMZwi9LXDTBV
BggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9lNS5vLmxlbmNyLm9y
ZzAiBggrBgEFBQcwAoYWaHR0cDovL2U1LmkubGVuY3Iub3JnLzB2BgNVHREEbzBt
ghAqLnBhcmNobWVudC5wYWdlghBhZG1pbi5zdW4ubXVzZXVtgg1haS5zdW4ubXVz
ZXVtghJhbWVyaWNhLnN1bi5tdXNldW2CEHF1aWxsLnN1bi5tdXNldW2CEnNjcmFw
ZXIuc3VuLm11c2V1bTATBgNVHSAEDDAKMAgGBmeBDAECATAtBgNVHR8EJjAkMCKg
IKAehhxodHRwOi8vZTUuYy5sZW5jci5vcmcvNDMuY3JsMIIBBQYKKwYBBAHWeQIE
AgSB9gSB8wDxAHcADeHyMCvTDcFAYhIJ6lUu/Ed0fLHX6TDvDkIetH5OqjQAAAGW
Fk9RkQAABAMASDBGAiEA0QVjV0yjeKE/jBRAhheZdh63KEQL4jxe5Z5Qt93oa2YC
IQCNcP4pbxlW9vRHvIxFkHO35XjGOShU8IzEuOMMQbQltgB2AMz7D2qFcQll/pWb
U87psnwi6YVcDZeNtql+VMD+TA2wAAABlhZPUakAAAQDAEcwRQIhALXOWF8RBt8M
hKdISAB3oXoqP6gu0sIax6StXNb4hTfLAiB1hHzFz4J7VEFzvmXO2JSLk5rb5mHN
N61RnLwl6lLL2zAKBggqhkjOPQQDAwNnADBkAjBvp6IDen/nyXBbkxYOPhxe6Ej6
4D6CGTans1DciQ5HxNarxYRk6DpTjMthd9ETYUYCMG1GCvOkpgmNcQfm0aJ5lb54
tfjEZvG7Xlrzv4EeP7vpovoUlCkIs7+GAB3uaZaaXQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK
a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO
VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw
i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C
2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+
bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG
6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV
XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO
koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq
cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI
E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e
K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX
GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL
sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd
VQD9F6Na/+zmXCc=
-----END CERTIFICATE-----

112
main.go
View File

@@ -2,6 +2,7 @@
package main
import (
"crypto/tls"
"fmt"
"log"
"net/http"
@@ -56,7 +57,7 @@ func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc {
if isLocalIP(ipWithPort) {
log.Printf("%s %s %s", r.Host, cleanIP, path)
} else {
log.Printf("%s %s \033[33m%s%s\033[0m", formattedTime, cleanIP, r.Host, path)
log.Printf("\033[33m%s\033[0m %s \033[94m%s %s\033[0m", formattedTime, cleanIP, r.Host, path)
}
// Add request info to global store
@@ -74,22 +75,6 @@ func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc {
}
}
func outsideHandler(w http.ResponseWriter, r *http.Request) {
if r.Host == "america.sun.museum" {
target, _ := url.Parse("http://localhost:8000")
proxy := httputil.NewSingleHostReverseProxy(target)
r.Host = target.Host
proxy.ServeHTTP(w, r)
return
} else
if r.Host == "admin.sun.museum" {
src.BetaSignupHandler(w, r)
return
}
fmt.Fprintf(w, "Hello, World! You're from outside.")
}
func rootHandler(w http.ResponseWriter, r *http.Request) {
ip := r.RemoteAddr
ip = ip[:strings.LastIndex(ip, ":")] // Trim port
@@ -100,15 +85,92 @@ func rootHandler(w http.ResponseWriter, r *http.Request) {
}
}
func outsideHandler(w http.ResponseWriter, r *http.Request) {
if r.Host == "america.sun.museum" {
target, _ := url.Parse("http://localhost:8000")
proxy := httputil.NewSingleHostReverseProxy(target)
r.Host = target.Host
proxy.ServeHTTP(w, r)
return
} else
if(r.Host == "thefiveprinciples.org") {
target, _ := url.Parse("http://localhost:3001")
proxy := httputil.NewSingleHostReverseProxy(target)
r.Host = target.Host
proxy.ServeHTTP(w, r)
return
} else
if(r.Host == "americanforum.net") {
target, _ := url.Parse("http://localhost:3002")
proxy := httputil.NewSingleHostReverseProxy(target)
r.Host = target.Host
proxy.ServeHTTP(w, r)
return
} else
if(r.Host == "hyperia.so") {
target, _ := url.Parse("http://localhost:3003")
proxy := httputil.NewSingleHostReverseProxy(target)
r.Host = target.Host
proxy.ServeHTTP(w, r)
return
} else
if(r.Host == "aryan.so") {
target, _ := url.Parse("http://localhost:3004")
proxy := httputil.NewSingleHostReverseProxy(target)
r.Host = target.Host
proxy.ServeHTTP(w, r)
return
} else
if r.Host == "admin.sun.museum" {
src.BetaSignupHandler(w, r)
return
}
fmt.Fprintf(w, "Hello, World! You're from outside.")
}
func main() {
log.SetFlags(0)
log.SetFlags(0)
// Your handler with logging middleware
http.HandleFunc("/", loggingMiddleware(rootHandler))
certFile := "/etc/letsencrypt/live/parchment.page/fullchain.pem"
keyFile := "/etc/letsencrypt/live/parchment.page/privkey.pem"
log.Println("Server running on port 3000")
err := http.ListenAndServeTLS(":3000", certFile, keyFile, nil)
if err != nil {
log.Fatalf("Server failed: %v", err)
// Load multiple certificates
certs := map[string]*tls.Certificate{}
loadCert := func(domain string) {
cert, err := tls.LoadX509KeyPair(
"/etc/letsencrypt/live/"+domain+"/fullchain.pem",
"/etc/letsencrypt/live/"+domain+"/privkey.pem",
)
if err != nil {
log.Fatalf("Failed to load certificate for %s: %v", domain, err)
}
certs[domain] = &cert
}
}
// Example domains
loadCert("parchment.page")
loadCert("hyperia.so")
// Configure TLS with SNI
tlsConfig := &tls.Config{
GetCertificate: func(hello *tls.ClientHelloInfo) (*tls.Certificate, error) {
if cert, ok := certs[hello.ServerName]; ok {
return cert, nil
}
// fallback: return any default cert
return certs["hyperia.so"], nil
},
MinVersion: tls.VersionTLS12,
}
server := &http.Server{
Addr: ":3000",
Handler: nil, // uses default http handler
TLSConfig: tlsConfig,
}
log.Println("🔒 HTTPS server running on port 3000")
log.Fatal(server.ListenAndServeTLS("", "")) // certs handled by tlsConfig
}

View File

@@ -1 +1,3 @@
```sudo go run *.go```
```sudo go run *.go```
https://uptime.betterstack.com/team/328750/monitors

View File

@@ -70,7 +70,7 @@ func BetaSignupHandler(w http.ResponseWriter, r *http.Request) {
csvLine := fmt.Sprintf("\n%s,%s %s", req.Email, formattedDate, formattedTime)
// Append to CSV file
csvFilePath := filepath.Join(homeDir, "Admin", "beta_signups.csv")
csvFilePath := filepath.Join(homeDir, "Admin", "beta", "beta_signups.csv")
err = os.MkdirAll(filepath.Dir(csvFilePath), 0755)
if err != nil {
log.Printf("Error creating CSV directory: %v", err)

View File

@@ -1,14 +1,33 @@
/* 1. Shut down Admin and run this file 'npm run start' */
/*
/* 2. Run this command */
// sudo certbot certonly \
// --dns-route53 \
// -d '*.parchment.page' \
// -d quill.sun.museum \
// -d admin.sun.museum \
// -d scraper.sun.museum \
// -d ai.sun.museum \
// -d america.sun.museum
This server useses two certificates: one for Parchment, which requires
wildcard domains, and one for all the other websites.
*/
/* 1. Shut down Admin and run 'npm run start' (in this ssl folder) */
/* 2.1 Run this command to support Parchment wildcard certs (AWS Authentication)
sudo certbot certonly \
--dns-route53 \
-d '*.parchment.page'
*/
/* 2.2 Run this command to support all others
sudo certbot certonly \
--standalone \
-d hyperia.so \
-d aryan.so \
-d admin.sun.museum \
-d america.sun.museum \
-d noahkurtis.com \
-d americanforum.net \
-d thefiveprinciples.org \
-d government.forum
*/
import http from 'http';