FHEM Forum

FHEM => Automatisierung => Thema gestartet von: betateilchen am 20 Januar 2017, 17:36:15

Titel: 96_allowed.pm - verschiedene komische Verhalten
Beitrag von: betateilchen am 20 Januar 2017, 17:36:15
Bei Experimentieren mit 96_allowed.pm sind mir ein paar merkwürdige Dinge aufgefallen.

per telnet habe ich folgendes device angelegt:


Internals:
   CFGFN     
   NAME       allowedWeb
   NR         64
   STATE      active
   TYPE       allowed
   validFor   web
   Readings:
     2017-01-20 17:22:51   state           active
Attributes:
   basicAuth  { myAuth($user,$password) == 1 }



Wunschliste/Fragen:

Titel: Antw:96_allowed.pm - verschiedene komische Verhalten
Beitrag von: rudolfkoenig am 21 Januar 2017, 14:26:57
1. habs versucht nachzustellen, bei mir ist alles in Ordnung. Telnet stuerzt nicht ab, WEB fragt nach Passwort. Was ich dabei entdeckt habe: basicAuth mit "attr WEB longpoll websocket" funktioniert nicht. Habe auch noch keine Idee, wie ich das fixen soll, sollte aber fuer deinen Fall irrelevant sein.

Nach weiteren Experimentieren: das Setzen von basicAuth entfernt ueberall das Authenticated flag, was zum Beenden der telnet Verbindung gefuehrt hat. Das habe ich jetzt gefixt, ein unmotiviertes telnet-IAC kommt aber weiterhin

2. laut Programmcode ist das nicht der Fall:
  my ($user, $password) = split(":", decode_base64($secret));
  $pwok = eval $basicAuth;

und auch die Debug-Ausgabe nach einem Test zeigt was anderes.

ZitatbasicAuthExpiry sollte kürzere Zeiträume zulassen, nicht nur Tage.
Das hat Johannes verbrochen (https://forum.fhem.de/index.php/topic,46380.msg383262.html#msg383262), wie svn blame und log es mir gerade verraten hat. Ich habe mal das int() ein paar Zeilen weiter nach unten geschoben, damit kann man jetzt auch Tage als Fliesskomma definieren.

Zitatich würde gerne irgendwie einfach herausfinden, wie lange meine basicAuth noch valid ist (=Restlaufzeit von basicAuthExpiry)
Da es als Cookie gespeichert wird, findet man den Ablaufdatum beim Anschauen des Cookies im Browser. Einen anderen Weg kenne ich nicht.
Titel: Antw:96_allowed.pm - verschiedene komische Verhalten
Beitrag von: betateilchen am 21 Januar 2017, 16:06:25
Zitat von: rudolfkoenig am 21 Januar 2017, 14:26:57
Ich habe mal das int() ein paar Zeilen weiter nach unten geschoben, damit kann man jetzt auch Tage als Fliesskomma definieren.

Mir schwebt ja eher sowas vor wie


attr <name> basicAuthExpiry 3d5h4m


(oder Teile davon) um beispielsweise auch ein expiry von 30 Minuten setzen zu können, ohne erst einen Taschenrechner bemühen zu müssen.
Titel: Antw:96_allowed.pm - verschiedene komische Verhalten
Beitrag von: betateilchen am 22 Januar 2017, 22:28:04
Zitat von: betateilchen am 20 Januar 2017, 17:36:15
ich würde gerne irgendwie einfach herausfinden, wie lange meine basicAuth noch valid ist (=Restlaufzeit von basicAuthExpiry)

Zitat von: rudolfkoenig am 21 Januar 2017, 14:26:57
Da es als Cookie gespeichert wird, findet man den Ablaufdatum beim Anschauen des Cookies im Browser. Einen anderen Weg kenne ich nicht.

Man könnte beispielsweise ein Internal befüllen (wahlweise natürlich auch ein reading)

Man könnte readings erzeugen und damit auch gleich den angemeldeten user verfügbar machen.


Index: 96_allowed.pm
===================================================================
--- 96_allowed.pm (Revision 13191)
+++ 96_allowed.pm (Arbeitskopie)
@@ -108,6 +108,7 @@
     }
     
     my $pwok = ($secret && $secret eq $basicAuth);      # Base64
+    my ($user, $password);
     if($secret && $basicAuth =~ m/^{.*}$/) {
       eval "use MIME::Base64";
       if($@) {
@@ -114,7 +115,7 @@
         Log3 $aName, 1, $@;

       } else {
-        my ($user, $password) = split(":", decode_base64($secret));
+        ($user, $password) = split(":", decode_base64($secret));
         $pwok = eval $basicAuth;
         Log3 $aName, 1, "basicAuth expression: $@" if($@);
       }
@@ -127,6 +128,8 @@
         $time = int($time*86400+time());
         # generate timestamp according to RFC-1130 in Expires
         my $expires = "Expires=".FmtDateTimeRFC1123($time);
+readingsSingleUpdate($me,'authUser',$user,0);
+readingsSingleUpdate($me,'authExpires',$time,0);
         # set header with expiry
         $cl->{".httpAuthHeader"} = "Set-Cookie: AuthToken=".$secret.
                 "; Path=/ ; ".$expires."\r\n" ;


Titel: Antw:96_allowed.pm - verschiedene komische Verhalten
Beitrag von: rudolfkoenig am 23 Januar 2017, 11:30:35
Hab dein Patch leicht modifziert eingecheckt. Bitte beachten: die readings gelten nur fuer die letzte Authentifizierung, man kann aber in mehreren Browser den gleichen Benutzer angeben.
Titel: Antw:96_allowed.pm - verschiedene komische Verhalten
Beitrag von: betateilchen am 23 Januar 2017, 11:33:23
ich bin auch noch nicht so ganz sicher, ob die readings wirklich die bessere Variante gegenüber Internals sind, denn die readings werden ja auch mit abgespeichert *nachdenk*