Autor Thema: parseParams in SetFn und = im Argument  (Gelesen 404 mal)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 26658
parseParams in SetFn und = im Argument
« 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
« Letzte Änderung: 02 März 2021, 12:26:56 von CoolTux »
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://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 14167
  • "Developer"?!? Meistens doch eher "User"
Antw:parseParams in SetFn und = im Argument
« Antwort #1 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?
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1594
Antw:parseParams in SetFn und = im Argument
« Antwort #2 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?

Offline Benni

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2194
  • FHEMinist
Antw:parseParams in SetFn und = im Argument
« Antwort #3 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#

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 26658
Antw:parseParams in SetFn und = im Argument
« Antwort #4 am: 02 März 2021, 18:59:06 »
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://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 26658
Antw:parseParams in SetFn und = im Argument
« Antwort #5 am: 02 März 2021, 20:04:11 »
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://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20683
Antw:parseParams in SetFn und = im Argument
« Antwort #6 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=...
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH
Zustimmung Zustimmung x 1 Liste anzeigen

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 26658
Antw:parseParams in SetFn und = im Argument
« Antwort #7 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
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://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20683
Antw:parseParams in SetFn und = im Argument
« Antwort #8 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.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH
Informativ Informativ x 1 Liste anzeigen