Hallo,
Ich habe ein Password Hilfsmodul geschrieben um Passwörter entsprechend zu verwalten. Bedeutet speichern, auslesen, löschen und ändern.
Die Passwörter werden gesalzen als SHA265 Hash im keyFileName (default uniqueID) abgespeichert.
Beispiel Anwendung:
Klasse einbinden und ein Objekthash mittels des Constructors erzeugen
use FHEM::Core::Authentication::Passwords qw(:ALL);
...
sub Define {
my $hash = shift // return;
my $aArg = shift // return;
.....
### create password object to handle pass keystore
$hash->{helper}->{passObj} = FHEM::Core::Authentication::Passwords->new($hash->{TYPE});
.....
}
Passwort speichern
my ($passResp,$passErr);
($passResp,$passErr) = $passwdObj->setStorePassword($name,$password);
Passwort auslesen
my $password;
$password = $passwdObj->getReadPassword($name);
Passwort löschen
my ($passResp,$passErr);
($passResp,$passErr) = $passwdObj->setDeletePassword($name);
Ist $passResp definiert und $passErr ist undef wurde das Passwort erfolgreich abgespeichert. Bei einem Fehler bekommt $passResp ein undef und $passErr enthält den Fehlergrund
Wenn Devices/Instanzen umbenannt werden so muss man eine Rename Funktion in seinem Modul haben welche entsprechend in der Initialize Funktion zugewiesen wurde.
$hash->{RenameFn} = \&Rename;
Die Funktion könnte dann zum Beispiel so aussehen.
sub Rename {
my $new = shift;
my $old = shift;
my $hash = $::defs{$new};
my ($passResp,$passErr);
($passResp,$passErr) = $hash->{helper}->{passObj}->setRename($new,$old);
::Log3($new, 1,
qq(MODULNAME \(${new}\) - error while change the password hash after rename - $passErr))
if ( !defined($passResp)
and defined($passErr) );
::Log3($new, 1,
qq(MODULNAME \(${new}\) - change password hash after rename successfully))
if ( defined($passResp)
and !defined($passErr) );
return;
}
Spricht etwas gegen das einchecken ins SVN?
Das Modul befindet sich seit heute im SVN
Grüße
Marko