7 / 7
Dec 2023

Hi alle,

wenn ich via REST API Adressbucheinträge hinzufüge, ist die Zuordnung (privat/Arbeit) des erzeugten Eintrages komisch (m.E. vertauscht).

$post = [
‘fullName’ => “Tester”,
‘name/personal’ => “Vorname”,
“name/surname” => “Nachname”,
“emails/home” => "test@home.de",
“emails/work” => "test@work.de",

"addresses/home/locality" => "Ort privat",
"addresses/home/postcode" => "PLZ privat",
"addresses/home/street" => "Straße privat",
"addresses/home/country" => "Land privat",
"phones/tel_home" => "11111",

"organizations/org/name" => "Organisation",
"addresses/work/locality" => "Ort Arbeit",
"addresses/work/postcode" => "PLZ Arbeit",
"addresses/work/street" => "Straße Arbeit",
"addresses/work/country" => "Land Arbeit"
	];

$ch = curl_init(‘https://egw.xxx.de/egroupware/groupdav.php/intech/addressbook/’);
curl_setopt($ch, CURLOPT_USERPWD, “xx:xx”);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array(“Content-Type: application/json”, “Accept: application/pretty+json”));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ‘POST’);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
curl_setopt($ch, CURLOPT_HEADERFUNCTION,
function($ch, $header) use (&$headers)
{
$len = strlen($header);
$header = explode(’:’, $header, 2);
if (count($header) < 2) // ignore invalid headers
return $len;

$headers[strtolower(trim($header[0]))][] = trim($header[1]);

return $len;

}
); //Funktion um über die einzelnen Zeilen des Headers zu iterieren und ein Array zu erzeugen

$response = curl_exec($ch); // execute!

Führt zu:


und

Die Zuordnung zu Privat und geschäftlich (“Organisation”) müsste doch genau andersherum sein.
Oder?

Gruß
Hansa

  • created

    Oct '23
  • last reply

    Dec '23
  • 6

    replies

  • 755

    views

  • 2

    users

  • 10

    links

3 months later

Leider keine Rückmeldung. Schade.

Mittlerweile (egroupware-docker (23.1.20231220)) hat die Schnittstelle ganz den Dienst eingestellt.
Selbst auf ein
"curl https://server/egroupware/groupdav.php/hansa/addressbook/ -H “Accept: application/pretty+json” --user hansa"

kommen keine Daten mehr zurück.

Wird das noch unterstützt oder ist die API EOL?

Gruß
Hansa

Ja, da gab es leider einen Fehler, der inzwischen behoben ist:

Da musst Du Dir bis zum nächsten Maintenance Release deb Container patchen. Gibt hier im Forum eine Anleitung dazu.

Weit von EOL, wir ziemlich aktiv entwickelt, aktuell bin ich dabei den Stundenzettel einzubinden, dabei ist leider auch der Fehler entstanden.

Ralf

Da ich diese Schnittstelle wirklich gerne nutzen würde, habe ich mir das Problem nochmal weiter angesehen.

Wenn ich die API, wie in der Doku (https://github.com/EGroupware/egroupware/blob/master/doc/REST-CalDAV-CardDAV/Addressbook.md) vorgeschlagen teste, funktioniert der Eintrag der Arbeitsplatzadresse (work = Organistation) korrekt.

so steht es in der Doku:
cat <<EOF | curl -i ‘https://example.org/egroupware/groupdav.php//addressbook/’ -X POST -d @- -H “Content-Type: application/json” --user
{
“fullName”: “First Tester”,
“name/personal”: “First”,
“name/surname”: “Tester”,
“organizations/org/name”: “Test Organization”,
“emails/work”: "test.user@test-user.org",
“addresses/work/locality”: “Test-Town”,
“addresses/work/postcode”: “12345”,
“addresses/work/street”: “Teststr. 123”,
“addresses/work/country”: “Germany”,
“addresses/work/countryCode”: “DE”,
“phones/tel_work”: “+49 123 4567890”,
“online/url”: “https://www.example.org/”,
“notes/note”: “This is a note.”,
egroupware.org:customfields/Test”: “Content for Test”
}
EOF

Ändere ich nun aber auch nur einen der Einträge von work auf home, ist das Ergebnis überraschend (und sicher nicht richtig).

cat <<EOF | curl -i ‘https://example.org/egroupware/groupdav.php//addressbook/’ -X POST -d @- -H “Content-Type: application/json” --user
{
“fullName”: “First Tester”,
“name/personal”: “First”,
“name/surname”: “Tester”,
“organizations/org/name”: “Test Organization”,
“emails/work”: "test.user@test-user.org",
“addresses/home/locality”: “Test-Town”,
“addresses/work/postcode”: “12345”,
“addresses/work/street”: “Teststr. 123”,
“addresses/work/country”: “Germany”,
“addresses/work/countryCode”: “DE”,
“phones/tel_work”: “+49 123 4567890”,
“online/url”: “https://www.example.org/”,
“notes/note”: “This is a note.”,
egroupware.org:customfields/Test”: “Content for Test”
}
EOF

liefert:


Wie man sieht, führt der eine home-Eintrag dazu, dass dieser in work und alle anderen (!) work-Einträge in home gespeichert werden.

Irgendwas ist da kaputt.

Ja, ist mir bewußt, bin aber noch nicht dazu gekommen.

Einfacher Workaround, fülle zuerst die Work und dann die Home Adresse.

Ralf