FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: CoolTux am 02 März 2021, 12:25:10

Titel: parseParams in SetFn und = im Argument
Beitrag von: CoolTux am 02 März 2021, 12:25:10
Hallo,

Mir ist schon letztes Jahr aufgefallen das wenn ich parseParams für die SetFn aktiviere und ich bei den Argumenten = im String habe dieser natürlich als Key-Value Separator genommen wird.
Das ist in einem übergebenen Passwort sehr ungünstig. Welche Möglichkeiten seht Ihr hier?

Beispiel

    my $hash = shift // return;
    my $aArg = shift // return;

    my $name = shift @$aArg // return;
    my $cmd  = shift @$aArg // return qq{"set $name" needs at least one argument};

    ...........
    elsif ( lc $cmd eq 'gardenaaccountpassword' ) {
        return "please set Attribut gardenaAccountEmail first"
          if ( AttrVal( $name, 'gardenaAccountEmail', 'none' ) eq 'none' );
        return "usage: $cmd <password>" if ( scalar( @{$aArg} ) != 1 );

        StorePassword( $hash, $name, $aArg->[0] );
    }
    ........



Grüße
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: Beta-User am 02 März 2021, 12:48:40
Vielleicht:
(In diesem Zweig der SetFn) prüfen, ob ein hash zurückgeliefert wird, und wenn ja: Wieder aus den Teilen (key/value) zusammenbauen?
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: Christoph Morrison am 02 März 2021, 15:06:29

my $string_with_pw = q{foo bar foo=bar pw=bar=quz=qaz};
say Data::Dumper->Dump( [ parseParams($string_with_pw) ], [qw( @a %h )] );


ergibt:


$@a = [
        'foo',
        'bar'
      ];
$%h = {
        'pw' => 'bar=quz=qaz',
        'foo' => 'bar'
      };


Bildet das deinen Fall ab?
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: Benni am 02 März 2021, 17:39:23
Aus dem Wiki:
Zitat
Werte können in einfache (') oder doppelte (") Anführungszeichen eingeschlossen sein, um so den jeweiligen Separator zu enthalten
Ein solches Pärchen aus gleichen Anführungszeichen an Anfang und Ende eines Wertes wird beim Parsen entfernt.

Ist das keine Option?

gb#
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: CoolTux am 02 März 2021, 18:59:06
Zitat von: Benni am 02 März 2021, 17:39:23
Aus dem Wiki:
Ist das keine Option?

gb#

Schaue ich mir an. Danke für den Tip
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: CoolTux am 02 März 2021, 20:04:11
Zitat von: Benni am 02 März 2021, 17:39:23
Aus dem Wiki:
Ist das keine Option?

gb#

Nein ist es nicht da ich in der SetFn nicht entscheiden kann was wie viele Werte an die paseParam übergeben wird. An DoSet wird ein Array übergeben und wenn parseParams aktiv ist für SetFn dann wird von DoSet nur eine Array Referenz an parseParams übergeben. Also nur ein Wert. Und für alles andere wird dann das default genommen. Also für den $keyvalueseparator das =
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: justme1968 am 02 März 2021, 20:30:11
wenn in einem wert ein = vorkommen kann musst du eine andere syntax für die übergabe festlegen. sonst ist das ganze nicht eindeutig.

also etwas wie pw=...
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: CoolTux am 02 März 2021, 20:53:16
Ja das geht. Ist aber nicht gerade sehr Benutzerfreundlich.

set myPowerwall setPassword pw=test=test23

Und als Password wird abgespeichert test=test23
Titel: Antw:parseParams in SetFn und = im Argument
Beitrag von: justme1968 am 02 März 2021, 21:09:28
alternativ die unsaubere variante wie oben vorgeschlagen wenn im hash etwas steht key und value wieder zusammen bauen, wenn es im array steht lassen wie es ist. geht aber eigentlich nur wenn nur genau ein parameter mit möglichem = erlaubt ist.