Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Config UI: keep mqtt and influx secrets on edit#19956

Merged
andig merged 13 commits intoevcc-io:masterfromleon558:fix/mqtt-config
Mar 31, 2025

Conversation

leon558
Copy link
Contributor

@leon558leon558 commentedMar 20, 2025
edited
Loading

fixes#17084

Passwörter und Schlüssel wurden bei Json Settings wie mqtt und influx bei jedem Bearbeiten überschrieben.
Ich habe die Redacted Funktionen angepasst, sodass jetzt der Websocket und die API alle geheimen Werte mit *** übergeben. Ist aber nicht festgesetzt, kann auch für einzelne Werte angepasst werden.
Ich habe die Get Endpoints für die Settings wieder aktiviert und frage diese beim Bearbeiten ab um die aktuelle Config zu haben.

Beim aktualisieren der Config, vergleiche ich die neue Config mit der alten redacted Config. Wenn vom Frontend genau der selbe Werte zurückkommt wie hingeschickt wurden, wird der alte Wert aus der schon vorhandenen Config genommen. Dadurch kann die Redacted Funktion jederzeit angepasst werden und der Vergleich funktioniert immer noch.

Was haltet ihr von dieser Lösung? Wenn jemand eine bessere Idee hat immer her damit :)

TODO:

naltatis reacted with hooray emoji
@andigandig added the enhancementNew feature or request labelMar 20, 2025
@naltatis
Copy link
Member

@leon558 sieht auf dem ersten Blick gut aus. Die Mechanik mit dem*** Check sollte ausreichen. Wird bei Device-Templates aktuell ähnlich gemacht.https://github.com/evcc-io/evcc/blob/master/server/http_config_helper.go#L113
Die Merge/Reflect Logik kann@andig sicher besser bewerten.

Ich füge hier bei Gelegenheit noch einen E2E Test hinzu.

@naltatis
Copy link
Member

Playwright Test ist hinzugefügt und läuft ✅

@andig hast du noch Anmerkungen?

@andig
Copy link
Member

Hatte noch keine Zeit. Wenn Test läuft rein damit?

@andig
Copy link
Member

@leon558 super PR! Bzgl.settingsSetJsonHandler hätte ich zwei Ideen:

  1. ein Test wäre gut. Der Code ist nicht ganz leicht zu verstehen.
  2. lässt sich das (wenn wir einen Test haben) vllt. mit Hilfe vonstructs.Map vereinfachen?

@leon558
Copy link
ContributorAuthor

@andig habe Tests hinzugefügt und die Merge Funktion verwendet jetzt structs.Map.
Hätte ich mal vorher gewusst das es die structs Lib gibt. Wollte es eigentlich von Anfang an über Map lösen, wollte dann aber nicht meine eigene Umwandlung schreiben 😄

dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
if err := dec.Decode(&struc); err != nil {
jsonError(w, http.StatusBadRequest, err)
return
}

oldStruc := newStruc()
settings.Json(key, &oldStruc)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

if err := ...

leon558 reacted with thumbs up emoji
@@ -111,3 +108,34 @@ func settingsDeleteJsonHandler(key string, valueChan chan<- util.Param, struc an
jsonResult(w, true)
}
}

func mergeSettingsOld(struc any, old any) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Das Naming ist unglücklich- from/to?

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Kann ich gerne machen. Hat mir selbst nicht so gefallen. Hatte versucht mich an der Codebase zu orientieren.
Finde from/to aber auch bisschen schwierig nachzuvollziehen. Also es ist nicht direkt klar was from und was to sein muss.
Wie wäre es mit old/new und als Name der Funktion einfach nur mergeSettings? Es geht ja im Endeffekt darum die alten und die neuen Einstellung zu vereinen.

return &TestStruct{}
}

handler := settingsSetJsonHandler(key, valueChan, newStruc)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Es sollte reichen die Funktion zu testen, den Handler brauchen wir m.E. nicht.

leon558 reacted with thumbs up emoji
@andigandig merged commit51234aa intoevcc-io:masterMar 31, 2025
6 checks passed
@andig
Copy link
Member

Grossartiger PR, vielen Dank!

naltatis reacted with thumbs up emoji

@andig
Copy link
Member

Mir fällt gerade im Nachgang auf, dass das embeddete mqtt.Config jetzt leider verschwunden ist. Das ist ziemlich unglücklich, da es an anderer Stelle noch verwendet wird und daher die Gefahr besteht, dass Änderungen an der einen nicht mehr an der anderen Stelle sichtbar sind oder nachgezogen werden. Das sollten wir vor Release noch korrigieren.

@leon558
Copy link
ContributorAuthor

Wo wir das noch verwendet? Ich hatte eigentlich extra geschaut, dass es nicht noch irgendwo benutzt wird.
An paar Stelle hatte ich noch mqtt.Config gesehen, aber das war dann type Config aus plugin/mqtt/client.go.

@andig
Copy link
Member

Hier:

evcc • charger/openwb.go:  37  cc := struct {  38: mqtt.Config    `mapstructure:",squash"`  39  Topic          string  58  // NewOpenWB creates a new configurable charger  59: func NewOpenWB(log *util.Logger, mqttconf mqtt.Config, id int, topic string, p1p3, dc bool, timeout time.Duration) (api.Charger, error) {  60  client, err := mqtt.RegisteredClientOrDefault(log, mqttconf)evcc • charger/warp2.go:  43  cc := struct {  44: mqtt.Config   `mapstructure:",squash"`  45  Topic         string  91  // NewWarp2 creates a new configurable charger  92: func NewWarp2(mqttconf mqtt.Config, topic, emTopic string, timeout time.Duration) (*Warp2, error) {  93  log := util.NewLogger("warp")evcc • meter/openwb.go:  23  cc := struct {  24: mqtt.Config `mapstructure:",squash"`  25  Topic       stringevcc • plugin/mqtt.go:  30  cc := struct {  31: mqtt.Config       `mapstructure:",squash"`  32  Topic, Payload    string // Payload only applies to setters

@leon558
Copy link
ContributorAuthor

Ich habe deine vorherige Aussage falsch verstanden. Ich schaue es mir mal an

@leon558
Copy link
ContributorAuthor

Habe es unter#20340 weitergeführt

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@naltatisnaltatisnaltatis left review comments

@andigandigandig left review comments

Assignees
No one assigned
Labels
enhancementNew feature or request
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

Config UI: Keep MQTT CA/certificate/key on edit
3 participants
@leon558@naltatis@andig

[8]ページ先頭

©2009-2025 Movatter.jp