andig / carddav2fb

Download CardDAV VCards and upload as phonebook to AVM FRITZ!Box
63 stars 19 forks source link

Invalid XML when stripping namespaces if file contains !CDATA #159

Closed JockelBln closed 5 years ago

JockelBln commented 5 years ago

Ich habe versucht auf der Synology 218+ das Image von hub.docker.com zum Laufen zu bringen. Leider wird es ständig gestoppt und neu gestartet. im Protokoll findet sich dann folgende Meldung Fehlermeldung usw... Im Verzeichnis /data ligen die Dateien config.php und config.cron. Habe ich eventuell noch etwas vergessen? Sorry, aber ich bin noch totaler Anfänger mit Docker.

blacksenator commented 5 years ago

Das hat n.m.M. nix mit Docker zu tun. Für mich liest sich das, als ob die vCards vom Server nicht syntaktisch korrekt geliefert werden: "VERSION" ist laut RFC6350 ein Pflichtfeld: "This property MUST be present in the vCard object, and it must appear immediately after BEGIN:VCARD." Dazu passt ja auch die Meldung: "Couldn´t find end of Start Tag VCARD"

JockelBln commented 5 years ago

Hmmm, dann bin ich erst mal wieder raus - Danke für den Hilfeversuch! Momentan habe ich auf einer VM noch eine ältere Version von carddav2fb laufen (die hast Du ursprünglich im ip-phone-forum vorgestellt und läuft noch mit PHP 7.01), dann muss ich die halt weiter nutzen.

andig commented 5 years ago

... oder Du zeigst mal die Originaldaten.

Viele Grüße, Andreas

Am 17.10.2019 um 10:48 schrieb JockelBln notifications@github.com:

 Hmmm, dann bin ich erst mal wieder raus - Danke für den Hilfeversuch! Momentan habe ich auf einer VM noch eine ältere Version von carddav2fb laufen (die hast Du ursprünglich im ip-phone-forum vorgestellt und läuft noch mit PHP 7.01), dann muss ich die halt weiter nutzen.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

JockelBln commented 5 years ago

Hi Andreas,

welche Daten bräuchtest Du denn? Ich habe ja noch deine Mail und könnte sie schicken. Eigentlich wollte ich ja nicht wieder zu deinem perssönlichen Pflegefall werden ;)

Gruß Jörg

andig commented 5 years ago

Ich würde gerne sehen, welche Daten zu dem Error führen. Mit dem download Kommando kannst Du die abspeichern. Gerne anonymisiert hier einstellen (bevorzugt) oder per PM an mich. PS.: Was für ein Server ist das?

JockelBln commented 5 years ago

Die Daten werden von mailbox.org abgerufen. Download funktioniert momentan komischerweise nicht, im Terminal steht

Downloading vCard(s) from account xxxxxxx@xxxx.xx
  173 [============================]
Downloaded 173 vCard(s)
Dissolving groups (e.g. iCloud)
pi@VMPi:~ $

aber ich erhalte immer eine leere *.json. Lasse ich carddav2fb mit run laufen funktioniert die Übertragung zur FB aber. Wie gesagt habe ich auf meiner VM (Raspbian Stretch) noch eine ältere Version von @blacksenator laufen. Morgen versuche ich mal eine VM mit der neuen Version von carddav2fb aufzusetzen. Oder gibt es eine Möglichkeit den Download mit dem Dockerimage auf der DS 218+ durchzuführen?

andig commented 5 years ago

@JockelBln hast Du den Download auch in Docker laufen? Wie ist der Aufruf? Hast Du die Ausgabedatei auch aus dem Container raus gemountet? ping @blacksenator kannst Du bzgl. Download helfen?

andig commented 5 years ago

Oder gibt es eine Möglichkeit den Download mit dem Dockerimage auf der DS 218+ durchzuführen?

Nein, mangels multi-arch php base image habe ich dazu leider keine generische Option gefunden. Du kannst das Dockerfile aber einfach anpassen und Dir ein eigenes Image bauen....

JockelBln commented 5 years ago

Also was Docker angeht, da bin ich gerade am Forschen - glaube aber, dass lerne ich mit meinen fast 60 Lenzen nicht mehr :-( Nun habe ich mir eine neue VM mit Buster aufgesetzt und die Version hier vom git getestet. Egal ob ich mit run oder download starte das Ergebnis ist immer gleich

pi@Pi:~/carddav2fb $ ./carddav2fb run
PHP Notice:  Undefined index: local in /home/pi/carddav2fb/src/DownloadTrait.php on line 51
PHP Warning:  Invalid argument supplied for foreach() in /home/pi/carddav2fb/src/DownloadTrait.php on line 51
Downloading vCard(s) from account xxx@xxxx.xx
    0 [>---------------------------]PHP Warning:  SimpleXMLElement::__construct(): namespace error : Failed to parse QName 'VERSION:' in /home                                               /pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): VERSION:3.0 in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct():         ^ in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): Entity: line 4: parser error : Specification mandate value for attribute VERSION:3.0 in /home/p                                               i/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): N:Bxxxd;Dirk;;; in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ^ in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): Entity: line 4: parser error : attributes construct error in /home/pi/carddav2fb/src/CardDav/Ba                                               ckend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): N:Bxxxd;Dirk;;; in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ^ in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): Entity: line 4: parser error : Couldn't find end of Start Tag VCARD line 2 in /home/pi/carddav2                                               fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): N:Bxxxd;Dirk;;; in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ^ in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): Entity: line 12: parser error : Sequence ']]>' not allowed in content in /home/pi/carddav2fb/sr                                               c/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): N:Bxxxd;Dirk;;; in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ^ in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): Entity: line 12: parser error : Sequence ']]>' not allowed in content in /home/pi/carddav2fb/sr                                               c/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ]]></address-data></prop><status>HTTP/1.1 200 OK</status></propstat></response>< in /home/pi/ca                                               rddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ^ in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): Entity: line 12: parser error : internal error: detected an error in element content in /home/p                                               i/carddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ]]></address-data></prop><status>HTTP/1.1 200 OK</status></propstat></response>< in /home/pi/ca                                               rddav2fb/src/CardDav/Backend.php on line 162
PHP Warning:  SimpleXMLElement::__construct(): ^ in /home/pi/carddav2fb/src/CardDav/Backend.php on line 162

In Backend.php line 162:

  String could not be parsed as XML

download [-d|--dissolve] [-f|--filter] [-i|--image] [-c|--config CONFIG] [--] <filename>

Ich habe jetzt mal Kontakte dierekt aus mailbox.org exportiert, die sehen doch eigentlich normal aus, oder?

BEGIN:VCARD
VERSION:3.0
N:Bxxxd;Dirk;;;
FN:Bxxxd\, Dirk
CATEGORIES:Privat
REV:20180827T160843Z
TEL;TYPE=CELL,PREF:+49 (xxx) xxxxxxx
PRODID:-//Open-Xchange//7.10.1-Rev21//EN
END:VCARD
BEGIN:VCARD
VERSION:3.0
FN:Bins\, Ich
PRODID:-//Open-Xchange//7.10.1-Rev21//EN
REV:20191018T133027Z
N:Bins;Ich;;Herr;
TEL;TYPE=voice,home,pref:+49 (30) 1234567
END:VCARD

Der oberste wurde mit Handy bzw. Outlook nach mailbox.org synchronisert, der untere wurde nur zum Test von mir direkt online dort angelegt.

Anschließend habe ich die "alte" Version carddav2fb von @blacksenator noch mal auf stretch laufen lassen, das funktioniert nach wie vor ohne Fehler.

Ich will aber gar nicht weiter damit nerven, jetzt ist erst mal Wochenende und die alte VM läuft ja eh noch bei mir wegen dem Volkszähler. Dachte nur, es ist ne coole Idee einige Sachen in Docker laufen zu lassen...

blacksenator commented 5 years ago

Hallo, das mit der aktuellen Version download ebensowenig funktioniert wie run ist klar. Ist ja dasselbe Coding, dass da in Backend.php durchlaufen wird. Die Meldung PHP Notice: Undefined index: local in /home/pi/carddav2fb/src/DownloadTrait.php on line 51 liegt m.E. daran, dass die config.php nicht dem neuen Stand entspricht. Bitte mal mit example.config.php abgleichen, Das erklärt aber leider nicht, warum die VCFs (die so erst mal valide aussehen) nicht gelesen werden können - wobei ein Export aus mailbox.org auch keine valide Aussage drüber zulässt, was der Server liefert, wenn er per http-Request angesprochen wird. IMO sollten wir den Fehler mal eingrenzen:

  1. Liegt es an mailbox.org? Wenn das möglich ist: kann Andreas oder ich auf die von Dir angelegten zwei Testsätze zugreifen? Sprich: sind die in einer separaten CardDAV DB deren Credentials du Andreas oder mir zur Verfügung stellen könntest?
  2. Liegt es an docker? Hast Du eine Möglichkeit die aktuelle Version auf einem Pi oder anderen Linux-Rechner per git clone zu installieren?
andig commented 5 years ago

Convert funktioniert lokal wunderbar:

❯ ./carddav2fb convert test.vcf test.xml
Reading vCard(s) from file test.vcf
    2 [============================]
Read 2 vCard(s)

Converted 2 vCard(s)
Succesfull saved phonebook as test.xml
andig commented 5 years ago

Lass Docker erstmal raus und probiere es lokal- ausser php und composer braucht es dafür nichts, auch keine vm ;)

andig commented 5 years ago

@blacksenator wofür brauchen wir egtl. die local Option?

blacksenator commented 5 years ago

Das ist das User-gewünschte Feature auch eine lokale *.vcf einlesen zu können statt vom Server (oder beides)

andig commented 5 years ago

Warum nicht einfach per ykommandozeike angeben statt config? Was bringt das? Ist aber ein separates Thema...

JockelBln commented 5 years ago

Hallo Ihr Beiden, ich habe jetzt mal einen Testaccount bei mailbox.org angelegt und dort 3 Kontakte angelegt. Gern könnt Ihr damit auch testen. @blacksenator von Dir habe ich ja keine Mail, ich sende die Zugangsdaten einfach mal per Unterhaltung im IP-Phone forum, wenn das ok ist. @andig Wenn das ok ist schicke ich dir die Daten auch per Mail. Mit Docker habe ich jetzt auch nicht mehr weitergemacht, dafür reicht mein Kenntnisstand eh nicht aus. Ich kann da nur ein Image runterladen und nach Schrit-für Schritt-Anweisung konfigurieren und starten. Da ich "nur" Windoof-User bin teste ich das halt auf einer WM auf der Diskstation. Die ist doch um einiges schneller als mein Raspberry. Den letzten Test habe ich gerade noch einmal mit git clone gemacht, leider immernoch gleiches Ergebnis. Irgendwie hab ich wohl den wurm drin...

andig commented 5 years ago

Bitte die https://github.com/andig/carddav2fb/blob/master/src/CardDav/Backend.php#L287 mal so ändern:

    $xml = preg_replace('/(<\/*)[^!>:]+:/', '$1', $xml);

Gehts dann?

blacksenator commented 5 years ago

Hallo Andreas,

habe den Test-Account von @JockelBln getestet: mit dem gleichen Ergebnis :( Aber damit ($xml = preg_replace('/(<\/*)[^!>:]+:/', '$1', $xml);) ist der Fehler weg!

grafik

JockelBln commented 5 years ago

@andig @blacksenator Sorry wegen der späten Rückmeldung, ich habe die Zeile eben geändert und nun wird auch mit dieser Version wieder sauber synchronisiert.

andig commented 5 years ago

...das Docker Image baut gerade und wird in Zukunft auch automatisch aktualisiert...