BasicAuth und IPCAM

Begonnen von marc2, 27 Januar 2013, 12:28:40

Vorheriges Thema - Nächstes Thema

marc2

Moin !

Ich habe bei meiner AXIS Webcam keine Möglichkeit gefunden, Username und Password als
Teil der URI mitzugeben. Allerdings wird BasicAuth unterstützt, also http://<username>:<passord>@<URI>.
Also hab ich in 49_IPCAM das Attribute "basicauth" eingebaut. Die URL wird korrekt zusammengebaut, der
Zugriff steigt aber wie folgt aus:

2013.01.27 12:16:55 1: IPCAM camURI: http://user:pwd@axis/axis-cgi/jpg/image.cgi?camera=1&resolution=640x480&compression=25
2013.01.27 12:16:55 1: CustomGetFileFromURL <hidden>: malformed or unsupported URL

Der Fehler ist klar, da das Regex in CustomGetFileFromURL BasicAuth nicht "unterstützt". Gibt es hierfür
einen guten Grund ? Könnte man das generell ändern ? Wäre blöd, wenn man nur deswegen eine eigene
Routine CustomGetFileFromURL in 99_myUtils unterbrigen müsste.

Danke & Gruß, Marc

marc2

Hi !

Anbei zwei diffs für 49_IPCAM.pm und HttpUtils.pm damit BasicAuth funktioniert:


# 49_IPCAM.pm

47c47
<                       "do_not_notify:1,0 showtime:1,0 ".
---
>                       "basicauth do_not_notify:1,0 showtime:1,0 ".
184a185
>   my $basicauth = (defined($attr{$name}{basicauth}) ? $attr{$name}{basicauth} : "NONE");
195c196,201
<   $camURI  = "http://$camAuth/$camPath";
---
>   if ($basicauth eq "NONE") {
>      $camURI  = "http://$camAuth/$camPath";
>   } else {
>      $camURI  = "http://$basicauth" . "@" . "$camAuth/$camPath";
>   }
[/font]

# HttpUtils.pm
7a8
> use MIME::Base64;
57c58
<   if($url !~ /^(http|https):\/\/([^:\/]+)(:\d+)?(\/.*)$/) {
---
>   if($url !~ /^(http|https):\/\/(([^:\/]+):([^:\/]+)@)?([^:\/]+)(:\d+)?(\/.*)$/) {
62,63c63,64
<   my ($protocol,$host,$port,$path)= ($1,$2,$3,$4);
<
---
>   my ($protocol,$authstring,$user,$pwd,$host,$port,$path)= ($1,$2,$3,$4,$5,$6,$7);
>  
70a72,75
>   my $auth64;
>   if(defined($authstring)) {
>      $auth64 = encode_base64("$user:$pwd","");
>   }
90a96,98
>   if(defined($authstring)) {
>     $hdr .= "Authorization: Basic $auth64\r\n";
>   }
[/font]

Spricht etwas dagegen, diese Änderungen zu übernehmen ? Ich denke die Unterstützung von
BasicAuth in HttpUtils.pm ist wäre auch an anderer Stelle hilfreich.

Gruß Marc

Martin Fischer

hallo marc,

> Spricht etwas dagegen, diese Änderungen zu übernehmen ? Ich denke die Unterstützung von
> BasicAuth in HttpUtils.pm ist wäre auch an anderer Stelle hilfreich.

schick mir das bitte als regulären patch (datei) im anhang per pm.

ich prüfe es und wenn es nichts bricht, checke ich es ein.

gruss martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

marc2

Hallo Martin,

die Patches habe ich Dir geschickt. Die Konfiguration für die IPCAM sieht bei mir nun wie folgt aus:

define MyCam IPCAM axis
attr MyCam credentials /var/media/ftp/fhem/ipcam.cfg
attr MyCam path axis-cgi/jpg/image.cgi?camera=1&resolution=640x480&compression=25
attr MyCam basicauth {USERNAME}:{PASSWORD}
attr MyCam delay 10
attr MyCam snapshots 2
attr MyCam timestamp 1
attr MyCam storage /var/media/ftp/Bilder/Gehege
attr MyCam room Outdoor
[/font]

D.h. auch bei basicauth nutze ich Dein Parsing von USERNAME und PASSWORD.

Gruß, Marc

Matse24

Hallo,

Versuche das IPCAM für eine Axis M1031 zu definieren.... und bekomme immer die Fehlermeldung "not supported image format... Ich bin alle Einträge zu diesem Thema durchgegangen.

Meine Einstellungen:
define MyCam IPCAM 192.168......
attr MyCam basicauth {username}:{password}
MyCam path axis/axis-cgi/jpg/image.cgi?camera=1&resolution=640x480&compression=25
attr MyCam room Wohnung
attr MyCam storage /opt/fhem/snapshots

Hat von Euch vielleicht einer noch eine Idee

LG Matse74

pechnase

Hallo Matse24,

wahrscheinlich hast Du Dein Problem in der Zwischenzeit gelöst. Ich habe in den letzten Tagen auch mit dem IPCAM Modul experimentiert und zunächst auch immer die von Dir beschriebene Fehlermeldung erhalten. Bei mir lag es daran, dass ich in dem attr basicauth {username]:{password} anstelle {USERNAME}:{PASSWORD} geschrieben habe. Also unbedingt Großschreibung verwenden!

VG pechnase
2 x RPI mit FHEM 6.3 (RPI B+ & RPI 2B) verbunden über FHEM2FHEM
- HM Fensterkontakte, Rauchmelder, Fernbedienung, Schalter
- Optolink (Selbstbau) Vitotronic 200KW2
- 1-wire DS1820 Temp.Sensoren, TX29DT-IT
- CUL (busware), nanoCUL433, Jeelink (Nachbau), nanoCUL868 WMbus

pechnase

Hallo,

in meinem Passwort für die IP-Cam verwende ich ein Dollarzeichen. Die Credentials habe ich in einem File gespeichert. Das IP-Cam Modul überträgt dann als Passwort nur den Teil links vom Dollarzeichen. Habe dann versucht das '$' durch '$$' im Credentialstring zu ersetzen, dann sendet das IPCAM Modul aber gar keinen Request mehr.

Hat jemand einen Tip, wie ich im PW ein Dollarzeichen verwenden kann? Danke.

VG pechnase
2 x RPI mit FHEM 6.3 (RPI B+ & RPI 2B) verbunden über FHEM2FHEM
- HM Fensterkontakte, Rauchmelder, Fernbedienung, Schalter
- Optolink (Selbstbau) Vitotronic 200KW2
- 1-wire DS1820 Temp.Sensoren, TX29DT-IT
- CUL (busware), nanoCUL433, Jeelink (Nachbau), nanoCUL868 WMbus