diff --git a/server/src/main.ts b/server/src/main.ts index 87e7dcf..67e96c5 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -8,14 +8,15 @@ import { BadRequestExceptionFilter } from './system/filters/bad-request-exceptio import { AppValidationPipes } from './system/pipes/app-validation-pipe'; import * as fs from 'fs'; +import { SocketIoAdapter } from './socket-adapter'; async function bootstrap() { const httpsOptions = { - key: fs.readFileSync('ssl/key.pem'), - cert: fs.readFileSync('ssl/cert.pem'), + key: fs.readFileSync('ssl/localhost+1-key.pem'), + cert: fs.readFileSync('ssl/localhost+1.pem'), }; - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule, { httpsOptions }); const prefix_version = process.env.PREFIX_VERSION; @@ -53,7 +54,12 @@ async function bootstrap() { useContainer(app.select(AppModule), { fallbackOnErrors: true }); - await app.listen(Number(process.env.APP_PORT)); + await app.listen(Number(process.env.APP_API_PORT)); + + // ===== App cho WebSocket (WS hoặc WSS) ===== + const wsApp = await NestFactory.create(AppModule); + wsApp.useWebSocketAdapter(new SocketIoAdapter(wsApp)); + await wsApp.listen(Number(process.env.APP_SOCKET_PORT)); } bootstrap(); diff --git a/server/src/socket-adapter.ts b/server/src/socket-adapter.ts new file mode 100644 index 0000000..c23afc4 --- /dev/null +++ b/server/src/socket-adapter.ts @@ -0,0 +1,12 @@ +import { IoAdapter } from '@nestjs/platform-socket.io'; + +export class SocketIoAdapter extends IoAdapter { + createIOServer(port: number, options?: any): any { + const cors = { + origin: '*', + methods: ['GET', 'POST'], + credentials: true, + }; + return super.createIOServer(port, { ...options, cors }); + } +} diff --git a/server/ssl/cert.pem b/server/ssl/cert.pem deleted file mode 100644 index 07b16dd..0000000 --- a/server/ssl/cert.pem +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDvTCCAqWgAwIBAgIUV9payTNbqF6ZM2mCjfPLqSIicKwwDQYJKoZIhvcNAQEL -BQAwbjELMAkGA1UEBhMCVk4xCzAJBgNVBAgMAlZOMQswCQYDVQQHDAJWTjELMAkG -A1UECgwCVk4xCzAJBgNVBAsMAlZOMQswCQYDVQQDDAJWTjEeMBwGCSqGSIb3DQEJ -ARYPYWRtaW5AZ21haWwuY29tMB4XDTI1MDgwNjA5MDQyMVoXDTI2MDgwNjA5MDQy -MVowbjELMAkGA1UEBhMCVk4xCzAJBgNVBAgMAlZOMQswCQYDVQQHDAJWTjELMAkG -A1UECgwCVk4xCzAJBgNVBAsMAlZOMQswCQYDVQQDDAJWTjEeMBwGCSqGSIb3DQEJ -ARYPYWRtaW5AZ21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAwb6Ze/+uLOC2vHZZwH0BeTLCPesBf8vgHkvU6wmkPgDl9ulY5XWJxVhiBya3 -tkIZFLUleejaz+9ckhK6USZQX3iTlkZ57YW1w2VhCCH0/XCGwEteRX1JaREzJDUm -u5z+5vekcDSvMTmFgu4Qc23Z2PSW2oN42dae3iYpm/StMT78GpGc4bayZ7KX7FaY -rmB7bEF2/rGJRpVWBITi8zxT5ZOcERbk0KSjbzcdwoa98C5OVF8U6aHvkjfKm6qE -LjJz8JgV/QcLahM7gK+5b1rGYWT5EYslm2+Wik2CjDzOVDq0TpqZNLynA+HCszSp -9RVTfLciIRsk7ppA76SHI4nkQwIDAQABo1MwUTAdBgNVHQ4EFgQUNQ84Z6IsYPMv -AJfGXKekSp/lFiwwHwYDVR0jBBgwFoAUNQ84Z6IsYPMvAJfGXKekSp/lFiwwDwYD -VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAfkTLU1+B/VfNTYbzgSJF -8pABU+PfaXjFqL1Wrwg4v6q4qttaTVnUuwNDwmBTy36uMMrQ5BEGVlHON6vw188N -y1LMOGcFXnmHd0cmczi7H0OXLYzfGu7a756TePPp45Hl/PWLx8SFvd09rlGp34NK -E1H/2C8sbbJEqa9EcRKx3q1DMF+NWB436patnxdQOlI2cpIcEz4InbpoMTBoTPje -MmPsDIK81beLzVZ/JSRvShfncSdwGGxWWRZnUbKWbJXU4cKU3qCscKBTyB8Kmok0 -S6XumKi3HNSzAwFvrbzxaUilrTkOWO2QNp8nlkH8ZDfGE0ieCDvw+S1b0d4h7VKU -Jg== ------END CERTIFICATE----- diff --git a/server/ssl/key.pem b/server/ssl/key.pem deleted file mode 100644 index 03d3e45..0000000 --- a/server/ssl/key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBvpl7/64s4La8 -dlnAfQF5MsI96wF/y+AeS9TrCaQ+AOX26VjldYnFWGIHJre2QhkUtSV56NrP71yS -ErpRJlBfeJOWRnnthbXDZWEIIfT9cIbAS15FfUlpETMkNSa7nP7m96RwNK8xOYWC -7hBzbdnY9Jbag3jZ1p7eJimb9K0xPvwakZzhtrJnspfsVpiuYHtsQXb+sYlGlVYE -hOLzPFPlk5wRFuTQpKNvNx3Chr3wLk5UXxTpoe+SN8qbqoQuMnPwmBX9BwtqEzuA -r7lvWsZhZPkRiyWbb5aKTYKMPM5UOrROmpk0vKcD4cKzNKn1FVN8tyIhGyTumkDv -pIcjieRDAgMBAAECggEAHKFCRBEd13LjfgkNLUUrtRG7o3O5Vn21ojR5g7v6gdEX -KnwED3BlifyMC9t8VVoCI826+n9e6lBIQSu0Ta6YPOtv/8ptVRynpfaytoVyEwuQ -VhUtGp6vfO+2O3kBPsMt5cqdiZk3dFI4OQdd9fi7MvS94A+CicpN0q0YA/xNpZOT -XaTXV+opBit+evy356R+pzOuBkjHPLDt3zkU0HmREiSi3fzd7bAk/H03LAVtV8NH -cAqF3jDDuC+uL7v5Mltkhi/FmF58px/qs94HcsS6P2GKv0fPybsy+q3ma4HcLA1O -Em6CTOhrzoeRphfjHavEjpdlgWr1bfdGX+VS76UICQKBgQD6hQ8lZRd8d+cVe37R -IvIMfYV+Mu0NhvdaiXAEnnGxxPdql/npF03kjmhyZ+NpXtkRw3Padel/L/D2yk6U -Meosivl379GLNxIFTpZCTJC4LyuatVlTFrGPphD/LBnuLDwcFVEYtT92MCp4QW+S -Rbffkl7GifV4kaoyf+Kh34JaKQKBgQDF+5edQRRJ2JJ8yM9ZkdgikqEip7d9ksEV -w+9RaP2BGxR3t9kdwZxa3JKRQegJL6f4PS1Q0qDSlmTYuTvf9S61B6OQ+exYGI5B -PNNXQwi64vejF9x3FQu5XSYODPsPr9bjMpIcKCHNgKnlsz71/kzOe2PC8GOm3eP6 -8z+ASelwiwKBgQDlTfOuI9kaidmPtUk//n+VZTNSbyTCE/7G9TP+VlT1Bbf97nvG -mhknEh6SUXs7kKCZ/NBHb1Q5odUq38SLKyEQgmiUGoQvrEmnZ+Zraw+wNyTvZ/0J -66S9OqEmH+TgN8cRYYWoWwZqlO3awvJv7ba/QofTrKVuJc6miJ4V0rLK+QKBgGM6 -gTfo2VFVwb3XK82Zwnk5gpeK9fVzK2FMTdNAyuX9e5mxRJmcY1BLAw7YuIJ6JzbM -+rxqhP5nMG5LEM5j5aAIDxvnl2RkElByOv6ec26vuSw+Flp86t5h6GPcb6ziFdLT -ktWX67FDDmQ5HZJPfZFz2IFo2JlW1x/88NPMt7qXAoGAWTi9QIKR0XKzljEvdwJQ -B2j0/u3cDXlLwVhKAzbDrRFoKR7Yna/1Sfrg649CiNCFQ5bGx6tjMBEJpXpsMjcE -NmcRw4ExAMBAS6WtTezNtx2dN2StCKLMfQsfoMQ2J014fnqw0pgJswxyWMbR1LIS -vvSukbujOOAEIllSpEIsaVM= ------END PRIVATE KEY----- diff --git a/server/ssl/localhost+1-key.pem b/server/ssl/localhost+1-key.pem new file mode 100644 index 0000000..ab3fa8e --- /dev/null +++ b/server/ssl/localhost+1-key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDzbfy5PEmRtQY0 +V1wqQutWfUc3mCVTZaXym3RY2EHUBckM5iO5jf81gr0E4+CFaqaCiJukUns43WJg +CTwaoNzSgeylsicRqzLvKy8JJWf0A73ebyvxgwNR25+6D0svWj5b0kdSDUIp6nc5 +x1+nPoF2JbqrPOrQg6aimSerCDnSl8j2JIaY08oBt2sF7pPyiAicDKs/dTrJXG3p +pEdLfCwdxP2RSDaWCZBKo2Xast9Mx8mgfFdpHUGznEfk/R7jQcaa2eYqi3T19+gf +ACAFGARj50UJQRAkp347LfDr0RMBiq5LMxf9+GUVWc+N3dw4l2ABH6CXwLaMQ+tK +SJkmmHQTAgMBAAECggEAaO5uVAKyy8Y2iHVn2yfBfiS+gC5rWImmgO+VtX5y0cw0 +oATMPX4CFrTmeaco7xnL8NSmEq0jRJ3ZfAA/ElNpHKy4r6wdvzYG3KXGvrCLINpE +DA/r501MLwr2zSMui5jg7H+2Ep54eM0C27sfdl4xPBaDYrD9nyhAujI+sTD4i9fe +pIC0vXzw+c7IdjUa8SKj3NohnwESgNfnTQgWcTB/MEckCKLgFflN8+15oBmeXsKj +1Y2MuEo94aHhwT6jxDXirKlIWNtzNFcTZJeXWMhfOdVHjj7RQ4yDisDunXIoV3DP +RrSS0u60DzSkEKyQBwAefpWvx4jONRjaroSqtIIdYQKBgQD8GftqYNppr4HI+fiY +5l78spt3qo4Z2QfdNFSbGQMgivWTlwhJ1dJhalwTc3MI1KAwTE8tp49ef4jKQFTj +gqiRiu7eERSMMs7eI8DZRkDgn01G0N8EupJuByqza4CjirNV1ISoXA9HnWPhmsDA +e/3qQ/t2izkKwVeoaBChjO2lSwKBgQD3MazOKEN7DA3ZPj2PQzTWDWHGFb1EVeSY +M/wSZ4NRantHsGw/0rUbzHAouOLgRVzE4Pfpopuo/ZkNI1JMIl06L7COCKW5Af5J +gjmap9yhlQo0IADCjZIk/3eZ8qH6CwxHadU5t+YwLFwLzlEG5fBQbvilPn4DbC3/ +plM25XjXWQKBgEnfQzDU2KuHZjyCIzqKpuLdY3kZXTJtykQjhXc9SRFMJtHsu90G +7vLku75nYhoAVEBS3BDAvN4v+OFrIHTaYJLlZ0FjN+YtLTkiuOvyDijEBVzu76rv +EOF08CpLIhLKHerUr1q2PzP5Br+hHUJKEwmGijUebsScCxeqBtWP+kMpAoGAPmx2 +/SDB2cLzhFbpaNJJ93wtor4+q5EdRyppj6RAT0EanMH6tCtbvQdlk4MNGCGsCbPe +J0v/Dy/rhJvU3pEXBeihJ10brJrKQnn2Xg3h85QVnZAvYPIrY9h3tZLGQMSldytM +w2SjZqrtG7YgVCOhCk7bz672V5rsCtFP1l8goxECgYBTwI0A3h1VCwIce5GNHkxt +whFO9uV8nIL6GsDaMi1My6krn2TADRYjpM960GKWyI7sx4kVhWw37u7w427G+3qt +27/FrbCU1eNSzbInxigCFkLiLkVq2bzVR1Vw+7XhBlDFKpnw8NVruNAy1HNNtsR4 +VoKCR6lTe/Q6DaImnoAwCA== +-----END PRIVATE KEY----- diff --git a/server/ssl/localhost+1.pem b/server/ssl/localhost+1.pem new file mode 100644 index 0000000..f6762e5 --- /dev/null +++ b/server/ssl/localhost+1.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEPTCCAqWgAwIBAgIRAM9C/d+4FqfdoDcnYqCbsoowDQYJKoZIhvcNAQELBQAw +ezEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMSgwJgYDVQQLDB9hZG1p +bkBNYWNCb29rLUFpci5sb2NhbCAoQWRtaW4pMS8wLQYDVQQDDCZta2NlcnQgYWRt +aW5ATWFjQm9vay1BaXIubG9jYWwgKEFkbWluKTAeFw0yNTA5MTUwNTUxMzNaFw0y +NzEyMTUwNTUxMzNaMFMxJzAlBgNVBAoTHm1rY2VydCBkZXZlbG9wbWVudCBjZXJ0 +aWZpY2F0ZTEoMCYGA1UECwwfYWRtaW5ATWFjQm9vay1BaXIubG9jYWwgKEFkbWlu +KTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPNt/Lk8SZG1BjRXXCpC +61Z9RzeYJVNlpfKbdFjYQdQFyQzmI7mN/zWCvQTj4IVqpoKIm6RSezjdYmAJPBqg +3NKB7KWyJxGrMu8rLwklZ/QDvd5vK/GDA1Hbn7oPSy9aPlvSR1INQinqdznHX6c+ +gXYluqs86tCDpqKZJ6sIOdKXyPYkhpjTygG3awXuk/KICJwMqz91OslcbemkR0t8 +LB3E/ZFINpYJkEqjZdqy30zHyaB8V2kdQbOcR+T9HuNBxprZ5iqLdPX36B8AIAUY +BGPnRQlBECSnfjst8OvREwGKrkszF/34ZRVZz43d3DiXYAEfoJfAtoxD60pImSaY +dBMCAwEAAaNkMGIwDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMB +MB8GA1UdIwQYMBaAFH/NzzIPBK6kGM9mtBRusa7xMfO0MBoGA1UdEQQTMBGCCWxv +Y2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAYEAjqkcxq2vn+N4CgfZKCYX +xPMAgX3hriy//yi5HH2mE8UKbnJQOJbG6YtqPuGqBqxCBdeOfvU0mcZrtKwzdpZ+ +4EjTPEXTDXUIclSVUPXsPbb02NyQ8LsVTRCLjZH9xBmoxV8lL5qxIL4ey+f6iE1I +3pkTbiHvSmDseLbPCTmdZwdvh+qXWcHOG1guXx2KEP6/8ECeDEqy0UBwv2VabZcv +ErAs37VxXFppc8QtSEP3Gl8pTE3FIy5qAtQhIwnaH1+YzdtjAtQ6GHzAMJaq0RqH +3IWuyobQNzhwX6NTnwlKZsc5bYeDWNxvPz2ed/D/5tmK2Mvx21qr2Hq4v0rVDEV6 +xv3o5frX8LG+quV8MnAZlnBcDRmk40HxgsQFUU+vHi0hOxOIcE5twgFjxXRt2i37 +idTpuXncPNdglMUhi3szdpjwd1TxbNhDUqXpJt8fywi4HpdLxj8T7ZC/WzQK9A9B +wxiE1S3jker6pc7sLs8Gn47GRMy0PwTaZ9VQsPew/GkD +-----END CERTIFICATE-----