- // Check if the address is resolvable
- if (self::addrToUrl($apcontact['addr']) == $apcontact['url']) {
- $parts = parse_url($apcontact['url']);
- unset($parts['path']);
- $apcontact['baseurl'] = Network::unparseURL($parts);
- } else {
- $apcontact['addr'] = null;
+ // When the photo is too large, try to shorten it by removing parts
+ if (strlen($apcontact['photo']) > 255) {
+ $parts = parse_url($apcontact['photo']);
+ unset($parts['fragment']);
+ $apcontact['photo'] = Network::unparseURL($parts);
+
+ if (strlen($apcontact['photo']) > 255) {
+ unset($parts['query']);
+ $apcontact['photo'] = Network::unparseURL($parts);
+ }
+
+ if (strlen($apcontact['photo']) > 255) {
+ $apcontact['photo'] = substr($apcontact['photo'], 0, 255);
+ }
+ }
+
+ if (!$webfinger && !empty($apcontact['addr'])) {
+ $data = self::fetchWebfingerData($apcontact['addr']);
+ if (!empty($data)) {
+ $apcontact['baseurl'] = $data['baseurl'];
+
+ if (empty($apcontact['alias']) && !empty($data['alias'])) {
+ $apcontact['alias'] = $data['alias'];
+ }
+ if (!empty($data['subscribe'])) {
+ $apcontact['subscribe'] = $data['subscribe'];
+ }
+ } else {
+ $apcontact['addr'] = null;
+ }