parseParams in SetFn und = im Argument

Begonnen von CoolTux, 02 März 2021, 12:25:10

Vorheriges Thema - Nächstes Thema

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Vielleicht:
(In diesem Zweig der SetFn) prüfen, ob ein hash zurückgeliefert wird, und wenn ja: Wieder aus den Teilen (key/value) zusammenbauen?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Christoph Morrison


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?

Benni

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#

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

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 =
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

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=...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

CoolTux

Ja das geht. Ist aber nicht gerade sehr Benutzerfreundlich.

set myPowerwall setPassword pw=test=test23

Und als Password wird abgespeichert test=test23
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968