feat(tls): HTTPS + wss:// для iot.kube5s.ru
- emqx-ws-ingress.yaml: TLS секция + cert-manager letsencrypt-prod, ssl-redirect=true - router.go: CORS Allow-Origin: http → https://iot.kube5s.ru - iot-console.html: дефолт MQTT брокера ws:// → wss:// - operator.yaml: v0.1.53 → v0.1.54 - crypto.subtle теперь работает (HTTPS страница)
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
// Изменено: 2026-04-04 (iot-console: добавлен CORS middleware + /console маршрут)
|
||||
// Изменено: 2026-04-04 (tls: CORS origin обновлён с http → https для iot.kube5s.ru)
|
||||
// router.go — регистрация всех REST-маршрутов через gorilla/mux.
|
||||
// Все маршруты /v1/ защищены Bearer-токеном (middleware.Auth).
|
||||
// /console — публичный маршрут (статический HTML без auth).
|
||||
// CORS включён для http://iot.kube5s.ru — там хостится IoT Консоль (UI).
|
||||
// CORS включён для https://iot.kube5s.ru — там хостится IoT Консоль (UI).
|
||||
|
||||
package api
|
||||
|
||||
@@ -16,12 +16,12 @@ import (
|
||||
"gitea-naeel.giteak8s.services.ngcloud.ru/naeel/sless/internal/api/middleware"
|
||||
)
|
||||
|
||||
// corsMiddleware добавляет CORS-заголовки для IoT Консоли на http://iot.kube5s.ru.
|
||||
// Нужен потому что: консоль на http://iot.kube5s.ru, API на https://sless.kube5s.ru — разные origin.
|
||||
// corsMiddleware добавляет CORS-заголовки для IoT Консоли на https://iot.kube5s.ru.
|
||||
// Нужен потому что: консоль на https://iot.kube5s.ru, API на https://sless.kube5s.ru — разные origin.
|
||||
// Обрабатывает preflight OPTIONS запросы от браузера.
|
||||
func corsMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "http://iot.kube5s.ru")
|
||||
w.Header().Set("Access-Control-Allow-Origin", "https://iot.kube5s.ru")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Authorization, Content-Type")
|
||||
w.Header().Set("Access-Control-Max-Age", "600")
|
||||
|
||||
@@ -194,7 +194,7 @@ const S = {
|
||||
// ns вычисляется из токена автоматически (SHA256(sub) → "sless-{hex}"), не вводится вручную
|
||||
ns: localStorage.getItem('iot_ns') || '',
|
||||
apiBase: localStorage.getItem('iot_api_base') || 'https://sless.kube5s.ru',
|
||||
mqttBase: localStorage.getItem('iot_mqtt_base')|| 'ws://iot.kube5s.ru/mqtt',
|
||||
mqttBase: localStorage.getItem('iot_mqtt_base')|| 'wss://iot.kube5s.ru/mqtt',
|
||||
|
||||
// Рабочие данные
|
||||
devices: [],
|
||||
@@ -479,7 +479,7 @@ function renderLogin() {
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>MQTT Broker WebSocket</label>
|
||||
<input id="f-mqtt" value="${h(S.mqttBase)}" placeholder="ws://iot.kube5s.ru/mqtt">
|
||||
<input id="f-mqtt" value="${h(S.mqttBase)}" placeholder="wss://iot.kube5s.ru/mqtt">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Bearer токен</label>
|
||||
@@ -522,7 +522,7 @@ async function doLogin() {
|
||||
}
|
||||
|
||||
S.apiBase = api || 'https://sless.kube5s.ru';
|
||||
S.mqttBase = mqtt || 'ws://iot.kube5s.ru/mqtt';
|
||||
S.mqttBase = mqtt || 'wss://iot.kube5s.ru/mqtt';
|
||||
S.ns = ns;
|
||||
S.token = tok;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user