P0-3 (часть 2): не отдавать пароль устройства повторно через GET
GetIoTDevice больше не возвращает mqtt_password (deviceToResponse получает ). Пароль остаётся доступен только один раз — при создании устройства. Хэширование паролей в БД + перевод EMQX на алгоритм хэша (часть 1) требует изменения emqx.conf и миграции — отдельным шагом.
This commit is contained in:
@@ -34,7 +34,9 @@ type iotDeviceUpdateRequest struct {
|
||||
Enabled *bool `json:"enabled"`
|
||||
}
|
||||
|
||||
// iotDeviceResponse — ответ API. MQTTPassword — только в GET по имени.
|
||||
// iotDeviceResponse — ответ API. MQTTPassword заполняется ТОЛЬКО при создании
|
||||
// устройства (отдаётся один раз) и НИКОГДА при чтении — чтобы пароль не утекал
|
||||
// через GET и не хранился в логах/истории.
|
||||
type iotDeviceResponse struct {
|
||||
Name string `json:"name"`
|
||||
Namespace string `json:"namespace"`
|
||||
@@ -50,7 +52,8 @@ type iotDeviceResponse struct {
|
||||
}
|
||||
|
||||
// deviceToResponse конвертирует устройство из БД в ответ API.
|
||||
// password отдаётся только если непустая (передаётся явно из Get).
|
||||
// password отдаётся только если непустая — только на создании, при чтении
|
||||
// передаётся пустая строка (пароль повторно не показывается).
|
||||
func deviceToResponse(d *store.Device, password string) iotDeviceResponse {
|
||||
resp := iotDeviceResponse{
|
||||
Name: d.Name,
|
||||
@@ -193,7 +196,7 @@ func (h *Handler) GetIoTDevice(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
writeJSON(w, http.StatusOK, deviceToResponse(device, device.MQTTPassword))
|
||||
writeJSON(w, http.StatusOK, deviceToResponse(device, ""))
|
||||
}
|
||||
|
||||
// DeleteIoTDevice — DELETE /v1/namespaces/{ns}/iot/devices/{name}.
|
||||
|
||||
Reference in New Issue
Block a user