diff --git a/frontend/server/bin/www b/frontend/server/bin/www index f5895c99..7be11021 100644 --- a/frontend/server/bin/www +++ b/frontend/server/bin/www @@ -20,10 +20,10 @@ console.log("Please wait while DCS Olympus Server starts up..."); console.log(`Config location: ${args["config"]}`) /* Load the configuration file */ -var frontendPort = 0; +var httpPort = 0; if (fs.existsSync(args["config"])) { var json = JSON.parse(fs.readFileSync(args["config"], 'utf-8')); - frontendPort = json["frontend"]["port"]; + httpPort = json["frontend"]["port"]; } else { console.log("Failed to read config, aborting!"); return; @@ -35,7 +35,7 @@ var debug = require('debug')('client:server'); var http = require('http'); /* Normalize port */ -var port = normalizePort(frontendPort); +var port = normalizePort(httpPort); app.set('port', port); console.log("Express server listening on port: " + port) @@ -47,6 +47,21 @@ server.listen(port); server.on('error', onError); server.on('listening', onListening); +/* Optional https support */ +var https = null; +var credentials = null; +var httpsServer = null; +if (json["frontend"]["https"] === true){ + https = require('https'); + var privateKey = fs.readFileSync(json["frontend"]["keyPath"] ?? "./cert/default.key", 'utf8'); + var certificate = fs.readFileSync(json["frontend"]["certPath"] ?? "./cert/default.crt", 'utf8'); + var httpsPort = json["frontend"]["httpsPort"] ?? 3433; + credentials = {key: privateKey, cert: certificate}; + httpsServer = https.createServer(credentials, app); + httpsServer.listen(httpsPort); + console.log("Express server listening on SSL port: " + httpsPort) +} + /* Normalize a port into a number, string, or false. */ function normalizePort(val) { var port = parseInt(val, 10); diff --git a/frontend/server/cert/default.crt b/frontend/server/cert/default.crt new file mode 100644 index 00000000..e8a3d10e --- /dev/null +++ b/frontend/server/cert/default.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIUJj3UsO7kZ2w0ERm2kq5vBKvHskIwDQYJKoZIhvcNAQEL +BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDAzMTExNjQzMzNaFw0yNTAz +MTExNjQzMzNaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw +HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCPPhx02xZ6Bboi6+DeHPxxBUzwFwIpUt7idfqnEp1Q +r+A2c7DEQJNZs8C8kP6p4Qlg1WcP9MuKDo63Ak06tN5C5RrRZHDsA0fGqcZFeFcL +vhENO+1xf+1198GKqNhrK8vcB7aYEUy1Ms70bsb1OtG3qKIY966tiHzGFHI6oAgE +M8Q/0dQRXIHIknXYt+j7GpgSRieX+5TbJ9nXhKg56XLIF+iaIOS4vPbAdXlGGyh2 +ZIZS3qKqb9MzJHnDKpjDR9GUHmLlGvWto7djFHFZ3SqNwUOKJ9HO+iRxMjCqHHGt +2ox0aVnNNMUYCKIfevEtx1sMWXQhLFy9rK2A3rg+HLSTAgMBAAGjUzBRMB0GA1Ud +DgQWBBQnWAJizPDzLS0y/sdpdYZ0ynjfnjAfBgNVHSMEGDAWgBQnWAJizPDzLS0y +/sdpdYZ0ynjfnjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCO +nwXCddhwW3SpXI2Khwj+A0r2919yrBsFoAYXXhFIIzwbCU4lj5eure8AfwYoyb6/ +09m0d6Vo4Y3jmNCOS30s8udbKki3lV9DrOcdVhVs4OszTb/mFIZBZpipZgHgG4eM +74k/4Ai3j6CUZSZzr8eM6Tr1NByTiD8f3TsTKloxkU3POtAZxlItjl6+8S4RDbTK +POQktsz2vEgX0yH0DfKORK/1mg/VyxSWuDCAzePyVWe/TGIh+vch8A/QVruTgZ8u +f8T0Fi//N5kp/5+pNl7NCO+gH4a1vGAs6OcYe83bS4HXCznWdqMMrqQ5xEJa88R6 +y6UogPzVmw7nLW0cQb3L +-----END CERTIFICATE----- diff --git a/frontend/server/cert/default.key b/frontend/server/cert/default.key new file mode 100644 index 00000000..095489d3 --- /dev/null +++ b/frontend/server/cert/default.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCPPhx02xZ6Bboi +6+DeHPxxBUzwFwIpUt7idfqnEp1Qr+A2c7DEQJNZs8C8kP6p4Qlg1WcP9MuKDo63 +Ak06tN5C5RrRZHDsA0fGqcZFeFcLvhENO+1xf+1198GKqNhrK8vcB7aYEUy1Ms70 +bsb1OtG3qKIY966tiHzGFHI6oAgEM8Q/0dQRXIHIknXYt+j7GpgSRieX+5TbJ9nX +hKg56XLIF+iaIOS4vPbAdXlGGyh2ZIZS3qKqb9MzJHnDKpjDR9GUHmLlGvWto7dj +FHFZ3SqNwUOKJ9HO+iRxMjCqHHGt2ox0aVnNNMUYCKIfevEtx1sMWXQhLFy9rK2A +3rg+HLSTAgMBAAECggEABiHFCxWT5T5YhQUu96MrBVWSQRbjD0zOYMhnJf7MgDc/ +NGWIdCZFiIoC3q+gTzpkceJAyrSSgAL2hgwRrUkv2JJBLySLFvde+7ip1bB8nXKR +/UyK8hhlXG7yOJLYzOGvlOg5n1HiREF8DYeuebH+Z0vPQJ1du20D1mDqsOrH3RIf +18P2iYwSNsUgC4PcUralaeyYo/CRUT7tFzpVBjv4bullhbXdbzaqyZkE6NreoslV +pOOQK37d1lgI17qJzMduyRNqxoKX20jzu4aTFQR4q5AH5uJ1BSX7XUQe2y5436qj +HXFGPlp5j9gGxvq6lr606jczAGnGspn2BF2G0C0+CQKBgQDBCJOYskKesIdkroWc +5CxrfBcui0bJiNsy9IUEm71SwEIS2oTCQCJU0dF7swxAP4PW9yXO0eD9u35G+Emg +HsnHBpi2kycgDsvchhD9w+keRc+YIR2qSoGuI0YXgo3VKgF3ep4Ru3IXHHmb/L37 +j1+Qdx9ULunEWA7y2/7Cu083uQKBgQC997SlW03rxu/v7/FAT8gQ4tT+v9r1Z4nN +yl5JjHhwnVE1x1SsV3ikXyss/W3xsKcRP5konHeI74RT8Aczvj/B9pPI40duVlzw +w+RTXcjTBNt/zQQj/qc565o8iB1R/06tN87eb8XhjhjYU/dxrLRhbNa8BJ8crIxK +JkMtJ4xcqwKBgQCV2o+igfif8xEYwzdsxeIKC0p/0pXAjOMGWrcNDc5a+HAS7NsV +Ze6BBGXo7uW61tQFxNXwChTtRWnRtJyLlns0a9WQHwrHo1T1vIpiRn2qB64SPtsl +wTONOUsHo01yR2reEy21PFxkvrFVvE7MhNA+eYuzsbu+tlHcjZboG7ty2QKBgBPv +0Tehc3YRNNE7n1geh2KuS6hIvlQO/7lnSanyYhl/iSxZtRs5OuIVUtSv7D/3SDFZ +OVu3wBvQ91RP1pGpn8tdc3kb0T1VNv/VrzrIlvD+i4LII20bprU/crpzlpAqeTlY +qA9UL7JSVW0ussNtWqj24TpuSbyap0aI6XfttJ9tAoGANdZ+MCSVOoLiur5twgZ2 +zSImlAEfTpcvyc4wrHrx8VRKoPr3KONMjMnmmg6vxXHyXdQa2Cci8kDmdPcS0ZNl +FRw2GGVCtpbCh/AjoU1kmpMonYxyG44c182qfscizSof2bDaN+M6wZbyFYavGXQs +jqKudqwMbe/fDFVLRqvOqb4= +-----END PRIVATE KEY----- diff --git a/frontend/server/scripts/build-release.bat b/frontend/server/scripts/build-release.bat index d415239d..0c410d7e 100644 --- a/frontend/server/scripts/build-release.bat +++ b/frontend/server/scripts/build-release.bat @@ -4,6 +4,7 @@ echo D|xcopy /Y /S /E .\bin ..\..\build\frontend\bin echo D|xcopy /Y /S /E .\public ..\..\build\frontend\public echo D|xcopy /Y /S /E .\routes ..\..\build\frontend\routes echo D|xcopy /Y /S /E .\views ..\..\build\frontend\views +echo D|xcopy /Y /S /E .\views ..\..\build\frontend\cert echo F|xcopy /Y .\app.js ..\..\build\frontend\app.js echo F|xcopy /Y .\client.js ..\..\build\frontend\client.js diff --git a/frontend/website/@types/olympus/index.d.ts b/frontend/website/@types/olympus/index.d.ts index 58296eed..0c4f92e2 100644 --- a/frontend/website/@types/olympus/index.d.ts +++ b/frontend/website/@types/olympus/index.d.ts @@ -183,36 +183,34 @@ declare module "constants/constants" { maxZoom: number; attribution: string; }; - "USGS Topo": { - urlTemplate: string; - minZoom: number; - maxZoom: number; - attribution: string; - }; "OpenStreetMap Mapnik": { urlTemplate: string; minZoom: number; maxZoom: number; attribution: string; }; - OPENVKarte: { + "DCS Marianas Modern": ({ urlTemplate: string; minZoom: number; maxZoom: number; - attribution: string; - }; - "Esri.DeLorme": { + minNativeZoom?: undefined; + maxNativeZoom?: undefined; + attribution?: undefined; + } | { urlTemplate: string; + minNativeZoom: number; + maxNativeZoom: number; + minZoom: number; + maxZoom: number; + attribution?: undefined; + } | { + urlTemplate: string; + minNativeZoom: number; + maxNativeZoom: number; minZoom: number; maxZoom: number; attribution: string; - }; - CyclOSM: { - urlTemplate: string; - minZoom: number; - maxZoom: number; - attribution: string; - }; + })[]; }; export const IDLE = "Idle"; export const MOVE_UNIT = "Move unit";