FHEM Forum

FHEM => Sonstiges => Thema gestartet von: HomeAuto_User am 26 Februar 2020, 21:51:10

Titel: [gelöst] Probl. encryptet Value $hash->{RenameFn}, normal geht es! getUniqueId()
Beitrag von: HomeAuto_User am 26 Februar 2020, 21:51:10
Hallo,
ich habe mit die Vorlage aus dem Modul 73_GardenaSmartBridge genommen um verschlüsselte Werte zu speichern.
Alles klappt soweit beim schreiben und lesen. Sobald ich nun das Modul umbenenne, so erhalte ich keinen Wert mehr, weil die Leseroutine ein undef liefert in der $hash->{RenameFn} Funktion.

Ich lese den Token von 40 Zeichen
sub Strava_ReadValue($$) {
my ($hash, $valuename) = @_;
my $name   = $hash->{NAME};
my $index  = $hash->{TYPE} . "_" . $hash->{NAME} . "_$valuename";
my $key    = getUniqueId() . $index;
my ( $value, $err );

Log3 $name, 4, "$name: ReadValue - Read $valuename from file";

( $err, $value ) = getKeyValue($index);

if ( defined($err) ) {
Log3 $name, 3, "$name: ReadValue - unable to read $valuename from file: $err";
return undef;
}

if ( defined($value) ) {
if ( eval "use Digest::MD5;1" ) {
$key = Digest::MD5::md5_hex( unpack "H*", $key );
$key .= Digest::MD5::md5_hex($key);
}

my $dec_val = '';

for my $char ( map { pack( 'C', hex($_) ) } ( $value =~ /(..)/g ) ) {
my $decode = chop($key);
$dec_val .= chr( ord($char) ^ ord($decode) );
$key = $decode . $key;
}
return $dec_val;

} else {
Log3 $name, 3, "$name: ReadValue - No $valuename in file";
return undef;
}
}


meine Werte aus und das klappt im normalen Programm einwandfrei. Sobald ich ABER das gleiche in der Funktion $hash->{RenameFn} ausführe, erhalte ich beim umbenennen keinen Wert. Sobald ich wieder zurück benenne, so kommt der Wert auch. Grund ist klar, bei der Umbenennenfunktion läuft was schief, nur was?

sub Strava_Rename(@) {
my ( $new, $old ) = @_;
  my $hash = $defs{$new};

Log3 $hash->{NAME}, 3, "$hash->{NAME}: Rename $old to $new";

## need FIX, after rename value not found ##
## value from read is undefind !!!

Strava_StoreValue( $hash, "Client_ID", Strava_ReadValue($hash,"Client_ID") ); ## NEED FIX ## Strava_ReadValue($hash,"Client_ID") ) undef bei rename
setKeyValue( $hash->{TYPE} . "_" . $old . "_Client_ID", undef );
return undef;
}


Entweder es klappt in dem Orginalmodul ebenso schon nicht oder der Fehler liegt bei mir  8)

Bitte schaut mal mit drüber.
Danke

EDIT:
1)
Kann es sein, das die Länge Probleme macht?
2)
Wenn ich es auf die Routine vom FritzBox Modul umstelle, so erhalte ich etwas zur Ansicht aber da ist der Token "eingekürzt und Leerzeichen auf einmal drin"?
(obwohl der Name und der lesbare verschlüsselte Key in der Datei uniqueID gleich sind bzw. stimmen)

:o :o :o

EDIT 2:
zu 2) Hier das Testergebnis mit einem beliebigen String von 10 Zeichen

Modulname: Strava
- Auszug Datei uniqueID -
uniqueID: 48bcd34664b84396712377a281252293
Strava_Strava_Test:5107010b020c53540e0e

Get Ergebnis unverschlüsselt: 0123456789

####################

Modulname: StravaTest
- Auszug Datei uniqueID -
uniqueID: 48bcd34664b84396712377a281252293
Strava_StravaTest_Test:5107010b020c53540e0e

Get Ergebnis unverschlüsselt: 7e8>a:j288


WIESO ist das GET Ergebnis unterschiedlich??

Im Anhang ist ein Beispielcode zur besseren Ansicht.
Titel: Antw:Probleme encryptet Value lesen $hash->{RenameFn}, normal geht es! getUniqueId()
Beitrag von: CoolTux am 27 Februar 2020, 13:33:12
Ich habe meine Version in Gardena entsprechend gefixt.

Schuld war das beim ReadPassword $hash->{NAME} verwendet wird und bei einem rename dann ja schon der neue Name in $hash->{NAME} steht.
Ich habe die Funktionen entsprechend umgeschrieben so das ab sofort $NAME mit übergeben wird bei Aufruf von StorePassword und ReadPassword.


Grüße
Titel: Antw:Probleme encryptet Value lesen $hash->{RenameFn}, normal geht es! getUniqueId()
Beitrag von: betateilchen am 27 Februar 2020, 15:06:51
*Popcorn*

Man sollte beim Klauen in fremden Modulen zumindest verstehen, was man da klaut *lach*

Zitat von: HomeAuto_User am 26 Februar 2020, 21:51:10
Sobald ich nun das Modul umbenenne,

Das Modul umbenennen ist immer eine schlechte Idee.
Vor allem, wenn man eigentlich von einem device redet  8)
Titel: Antw:[gelöst] Probl. encryptet Value $hash->{RenameFn}, normal geht es! getUniqueId()
Beitrag von: HomeAuto_User am 27 Februar 2020, 18:35:36
Hallo,
es ist schön wenn man so auf diese Art noch Fixes erkennt.
Nicht jeder sieht sofort in fremden Codes das noch ein Fehler ist und somit konnte CoolTux nach Anfrage beleuchten und beheben.

:) *Daumen*

PS: Immer das positive daraus sehen, wieder ein Beispiel was funktioniert unter den Modulen  ;D