add certs
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 1m23s
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 1m23s
This commit is contained in:
31
main.go
31
main.go
@@ -6,40 +6,46 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/quic-go/quic-go/http3"
|
||||||
"github.com/quic-go/webtransport-go"
|
"github.com/quic-go/webtransport-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
// 1. Создаем WebTransport Server
|
||||||
mux := http.NewServeMux()
|
|
||||||
|
|
||||||
wt := &webtransport.Server{
|
wt := &webtransport.Server{
|
||||||
CheckOrigin: func(r *http.Request) bool { return true },
|
CheckOrigin: func(r *http.Request) bool { return true },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mux := http.NewServeMux()
|
||||||
mux.HandleFunc("/chat", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("/chat", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// 2. Апгрейд соединения до WebTransport
|
||||||
session, err := wt.Upgrade(w, r)
|
session, err := wt.Upgrade(w, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("upgrade error:", err)
|
log.Printf("Upgrade error: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
go handleChatSession(session)
|
go handleChatSession(session)
|
||||||
})
|
})
|
||||||
|
|
||||||
server := &http.Server{
|
// 3. Настройка HTTP/3 сервера
|
||||||
|
// В современных версиях quic-go/http3 достаточно передать Handler,
|
||||||
|
// который внутри вызывает wt.Upgrade
|
||||||
|
server := http3.Server{
|
||||||
Addr: ":8080",
|
Addr: ":8080",
|
||||||
Handler: mux,
|
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) {
|
func handleChatSession(session *webtransport.Session) {
|
||||||
|
|
||||||
for {
|
for {
|
||||||
stream, err := session.AcceptStream(context.Background())
|
stream, err := session.AcceptStream(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -48,12 +54,9 @@ func handleChatSession(session *webtransport.Session) {
|
|||||||
|
|
||||||
go func(s webtransport.Stream) {
|
go func(s webtransport.Stream) {
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
buf := make([]byte, 1024)
|
buf := make([]byte, 1024)
|
||||||
n, _ := s.Read(buf)
|
n, _ := s.Read(buf)
|
||||||
|
fmt.Printf("Message: %s\n", string(buf[:n]))
|
||||||
fmt.Println("Message:", string(buf[:n]))
|
|
||||||
|
|
||||||
s.Write([]byte("Server: OK"))
|
s.Write([]byte("Server: OK"))
|
||||||
}(*stream)
|
}(*stream)
|
||||||
}
|
}
|
||||||
|
|||||||
28
qgo.quizer.space-key.pem
Normal file
28
qgo.quizer.space-key.pem
Normal 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
25
qgo.quizer.space.pem
Normal 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-----
|
||||||
Reference in New Issue
Block a user