add certs
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 1m23s

This commit is contained in:
Smile Rex
2026-03-10 01:33:54 +03:00
parent 75446d73ef
commit 6a6c4ba9ee
3 changed files with 70 additions and 14 deletions

31
main.go
View File

@@ -6,40 +6,46 @@ import (
"log"
"net/http"
"github.com/quic-go/quic-go/http3"
"github.com/quic-go/webtransport-go"
)
func main() {
mux := http.NewServeMux()
// 1. Создаем WebTransport Server
wt := &webtransport.Server{
CheckOrigin: func(r *http.Request) bool { return true },
}
mux := http.NewServeMux()
mux.HandleFunc("/chat", func(w http.ResponseWriter, r *http.Request) {
// 2. Апгрейд соединения до WebTransport
session, err := wt.Upgrade(w, r)
if err != nil {
log.Println("upgrade error:", err)
log.Printf("Upgrade error: %v", err)
return
}
go handleChatSession(session)
})
server := &http.Server{
// 3. Настройка HTTP/3 сервера
// В современных версиях quic-go/http3 достаточно передать Handler,
// который внутри вызывает wt.Upgrade
server := http3.Server{
Addr: ":8080",
Handler: mux,
}
fmt.Println("Server started")
fmt.Println("WebTransport (HTTP/3) Server started on :8080")
log.Fatal(server.ListenAndServe())
// 4. Запуск с TLS (обязательно для HTTP/3)
// Для теста в Swarm используйте свои cert.pem и key.pem
err := server.ListenAndServeTLS("qgo.quizer.space.pem", "qgo.quizer.space-key.pem")
if err != nil {
log.Fatal(err)
}
}
func handleChatSession(session *webtransport.Session) {
for {
stream, err := session.AcceptStream(context.Background())
if err != nil {
@@ -48,12 +54,9 @@ func handleChatSession(session *webtransport.Session) {
go func(s webtransport.Stream) {
defer s.Close()
buf := make([]byte, 1024)
n, _ := s.Read(buf)
fmt.Println("Message:", string(buf[:n]))
fmt.Printf("Message: %s\n", string(buf[:n]))
s.Write([]byte("Server: OK"))
}(*stream)
}

28
qgo.quizer.space-key.pem Normal file
View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDSOex5d+izX1d5
j60wiUjTvMYC5cpykoeMVLzMGyCuIBFvBj2s/6fU0Q1xu6QRhRP//QOmUZRDqJ6/
kNcs38fBst8humrDqpY0geP+CIeHq5DqvehRtrJEAyMnAF+BvnqmTbEhKGN/Vobe
48Nk0bJjoqbf4y9UBdKJ3WKGkDZDMbQKcnD6mUPvSI8S9oXreA+qllP3DA/5JnCd
DlzUc0F9hrCTTIluEO5/birs1e0VbKWlxw81HrUmJGKaMdAwzby4yH0S0O37VU/b
X9vkU3zBjMY//N/GG8ymhigvW6lVxvTX6bz5vRvx1XLKBMBK8nzI4KZo8jhQQg/U
UEOgpfeXAgMBAAECggEABRz3jXTHKiW1gPVnpviP1uaOgl+IbwT1WwpslSJLxzBs
fCDQuzZ0pI55Hz0LHon4FI/Y2OC/FG4zfkFNmn/O4f0xxCY+loe9o4VNQE6AzWH0
4mDAF8yzxUe2QSqXKBaz8PuOxVmwIda+7QjpJbib+CRqnqNt8UM6/bNuxAsZ5sRx
Z7orKKpluDkaowhiXucnpmaeDvCOlLbnfMoChemIvrxwPik0AAfyBbMLb/fB648K
7JR18tYQFz5dSXebqUc9vp7//c/zLdED9O8thOQIsWh/lRGjDqHzC6TrqTpe4iGW
jgr9+9/HRxva4MMcu/+hRziB/M4+sin0VN46gDOBcQKBgQDZn3xh9YKQLFAUBxjF
rkTBVNbwMCfsMgx1bBENJH2uUTEAgyUTQFr8ClLEcdbwD5PUxYI3APGHImlEqhT8
5jZZfnDwdjwL7phfILAm/y4wxZ+Uoll8LQJ1wrtdqY8dxtq3zpSDqf2yzdUmVZE5
lh5gOmXoG59Dp9U6/B6xqnluLQKBgQD3TIPjhfaFFln9HLnfMG2tKWDhwp3femqS
NOy4F2DAa2wDzRyDysnabJWYvziAgVslvBJUn3T7De+1ktHNsESsfBG/37kFGTva
QMSDGO5wDHAWD8qORmNEpXvi6QvN949M1bEVhMjcobs95s05HiAILx24oXE6nWZT
6M5rWRqbUwKBgHwIEfQi4U8acml3wf6o3Db0C6zJRXew7rjd5rn+2kLHs43/MNpQ
C4sqtxGPcFlSB4d1Kkn/F6lVS3n/FgctjjxjfCsQuBh03BMbpkoTllflypYEEcxc
OtKzMeaoBRGLjIzGCI8iC54lAh7fFe4kSRu/LOWlGJiOx1De8P+BkcPhAoGADFqs
NA+bMybctAJdXsMCl6X7iwu361QoQsmWEdRJJxO2v7HdfNACqYDHMGxNHE5aCVaN
6+BTbb9SfFWrWYU2yQ8hq943VgPes5aMuqfiMYLNjqyXR+hISUOjHsDZsB5v8Dy0
rgiGKE+EFSGUmwfgPchsya53A6CdXg/BUCeRZrUCgYBOM5RiHnkZrkWJ/zfKF6Mu
qavcEDWo5qQD8Dd8tzFGA48r8zVgr6+6Lqm736EHFLWw+TKTsXlV1AkvuX40CZkg
GP7319dc5ytzITMIo3vEMpf1VS1RrrN7nRoVSiKzQplnU1+CTWPZckKP9h8oKn+9
zk0yHcuSd8wV2oa4KSGAHw==
-----END PRIVATE KEY-----

25
qgo.quizer.space.pem Normal file
View File

@@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIENDCCApygAwIBAgIQGGUyGgFmEmhZArrvVGYLDDANBgkqhkiG9w0BAQsFADB1
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExJTAjBgNVBAsMHFJFWFxz
bWlsZXJleEBSZXggKFNtaWxlIFJleCkxLDAqBgNVBAMMI21rY2VydCBSRVhcc21p
bGVyZXhAUmV4IChTbWlsZSBSZXgpMB4XDTI2MDMwOTIyMzMyNVoXDTI4MDYwOTIy
MzMyNVowUDEnMCUGA1UEChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRl
MSUwIwYDVQQLDBxSRVhcc21pbGVyZXhAUmV4IChTbWlsZSBSZXgpMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jnseXfos19XeY+tMIlI07zGAuXKcpKH
jFS8zBsgriARbwY9rP+n1NENcbukEYUT//0DplGUQ6iev5DXLN/HwbLfIbpqw6qW
NIHj/giHh6uQ6r3oUbayRAMjJwBfgb56pk2xIShjf1aG3uPDZNGyY6Km3+MvVAXS
id1ihpA2QzG0CnJw+plD70iPEvaF63gPqpZT9wwP+SZwnQ5c1HNBfYawk0yJbhDu
f24q7NXtFWylpccPNR61JiRimjHQMM28uMh9EtDt+1VP21/b5FN8wYzGP/zfxhvM
poYoL1upVcb01+m8+b0b8dVyygTASvJ8yOCmaPI4UEIP1FBDoKX3lwIDAQABo2Uw
YzAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgw
FoAU5b3W0xZSMRVucu6dgemt+ce4/v0wGwYDVR0RBBQwEoIQcWdvLnF1aXplci5z
cGFjZTANBgkqhkiG9w0BAQsFAAOCAYEAWQVEtzMWonkl8Kp/pVI4qzAmc4bzWyod
pAZYTr/NPNTCUfYFX/3rjfQrSZVsctKoQO4fItTI4jpy4wMgGqQb/XA/Js2bFBpo
L4Hw67QllQcGz+GldYKa7uI9mr1kfddmsiGIS60vO4ggYvYkSLUMTEZQt+zYbqRw
dB0A3dNZnB4xRisUN7a/LodzSEAVXkCVr28hXEiJ2f6rOCs6BUsPrZ44UOC5btzp
NreZN8AtbnhYfYM1tHBDYgblcIW1oMbN0nvPcU0x9+BVCFg0b8/15o2rPH5YpJPm
8n0BMxYVafsFAm3YQM3DOCTlqofbC5pjlZgcJKh7oS+dq2AfR6IT9XLRV+NnyDU+
vHa2gp0CXL5snPgkSybfms2VrwBwVVtv19DVKEcmhxn4uAcWh9dmdMX9wVc7J7cX
alexvIKPJpftIJeMRBkEtRdmGCamYB+q9wdfcY4EVvDMBajR3Rkc2gQJKzvKbqg3
MArIHJMHCwJSQV/IwFVSulnCPjY7MQTf
-----END CERTIFICATE-----