fix(kontakte): LinkedIn-Foto nur aus der Vorschau, klarere Meldung

Anlass: Bei einem Kontakt kam das Foto, beim naechsten nicht. Der Vergleich
der beiden Profilseiten zeigt warum - das zweite Profil liefert als
og:image nur LinkedIns Ersatzgrafik (static.licdn.com/aero-v1/sc/h/...),
weil die Sichtbarkeit des Fotos auf "Meine Kontakte" steht. Angemeldet
sieht man es, der Abruf hier ist es nicht.

Zwei Konsequenzen:

* Die Rueckfallebene "erste media.licdn.com-Adresse im Quelltext" faellt
  weg. Dieselbe Seite enthaelt 24 solcher Adressen: Firmenlogos,
  Beitragsbilder und die Fotos der "aehnlichen Profile" am Rand. Nur die
  Open-Graph-Vorschau gehoert nachweislich zum aufgerufenen Profil -
  alles andere haette irgendwann ein fremdes Gesicht an einen Kontakt
  gehaengt.
* Die Meldung sagt jetzt, was wirklich los ist: "nur fuer Kontakte
  sichtbar oder es gibt keines" statt "hat kein eigenes Foto". Von
  aussen sind die beiden Faelle nicht unterscheidbar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-09-10 00:30:30 +02:00
co-authored by Claude Opus 5
parent 0a2cf52e8a
commit 46983a7e2c
5 changed files with 68 additions and 24 deletions
+15 -4
View File
@@ -531,10 +531,21 @@ Den Abruf macht das Backend (`server/src/linkedinPhoto.js`, Route
Same-Origin-Policy davor. Gelesen wird die Open-Graph-Vorschau der öffentlichen
Profilseite (`og:image`), das Bild kommt anschließend von `media.licdn.com`.
Geprüft wird die Herkunft (nur `https` von `licdn.com` mit `/dms/image/` im
Pfad), die Größe (max. 5 MB) und die Antwortzeit (12 s); die graue
Platzhalter-Silhouette der Profile ohne eigenes Foto wird abgewiesen. Verkleinert
wird danach im Browser über denselben Weg wie ein Upload
(`compressImageSource()`).
Pfad), die Größe (max. 5 MB) und die Antwortzeit (12 s). Verkleinert wird danach
im Browser über denselben Weg wie ein Upload (`compressImageSource()`).
Gelesen wird **ausschließlich** die Vorschau-Adresse. Der übrige Quelltext wird
nicht durchsucht, obwohl dort Dutzende Bildadressen stehen - sie gehören
Firmenlogos, Beiträgen und den „ähnlichen Profilen" am Seitenrand. Eine davon zu
nehmen, hieße, einem Kontakt das Gesicht einer fremden Person anzuhängen.
**Wann kein Foto kommt:** Liefert die Vorschau die graue Silhouette oder eine
Grafik von `static.licdn.com`, gibt LinkedIn zu diesem Profil öffentlich kein
Foto heraus. Zwei Ursachen, von außen nicht unterscheidbar: Das Profil hat kein
Foto, oder seine Sichtbarkeit steht auf *Meine Kontakte* statt *Alle
LinkedIn-Mitglieder*. Im zweiten Fall sieht man das Foto im eigenen,
angemeldeten LinkedIn sehr wohl - dieser Abruf ist aber nicht angemeldet, und
das soll er auch nicht sein.
Der Abruf ist bewusst als **Komfort** gebaut, nicht als Zusage: LinkedIn weist
Anfragen aus Rechenzentren häufiger ab als solche aus einem Büronetz. Schlägt er