* Maintainer: Harald Eilertsen * * SPDX-FileCopyrightText: 2021 Harald Eilertsen * SPDX-License-Identifier: AGPL-3.0-or-later */ use Zotlabs\Lib\Apps; use Zotlabs\Extend\Hook; function unshorturl_install() { Hook::register('feature_settings', 'addon/unshorturl/unshorturl.php', 'unshorturl_feature_settings', 1); Hook::register('prepare_body', 'addon/unshorturl/unshorturl.php', 'unshorturl_prepare_body', 1); } function unshorturl_uninstall() { Hook::unregister('feature_settings', 'addon/unshorturl/unshorturl.php', 'unshorturl_feature_settings'); Hook::unregister('prepare_body', 'addon/unshorturl/unshorturl.php', 'unshorturl_prepare_body'); } function unshorturl_feature_settings(&$a, &$html) { $html = '
' . '

UnshortURL

' . '

Expand shortened URL\'s into their full representation.

' . '
' . '
'; } function unshorturl_get_long_url($shorturl) { $ch = curl_init($shorturl); curl_setopt_array($ch, [ CURLOPT_HEADER => true, CURLOPT_NOBODY => true, CURLOPT_RETURNTRANSFER => true ]); $res = curl_exec($ch); if ($res !== false) { $matches = []; if (preg_match('/^(?:L|l)ocation: (.*)$/m', $res, $matches)) { return $matches[1]; } } return false; } function unshorturl_prepare_body(&$body) { if (!local_channel() || !Apps::addon_app_installed(local_channel(), 'unshorturl')) { return; } $matches = []; $num_matches = preg_match_all('/https?:\/\/(bit\.ly|dlvr\.it|t\.co)\/\w+/', $body['html'], $matches); if ($num_matches > 0) { $matches = array_unique($matches); foreach ($matches as $links) { foreach($links as $l) { $longurl = unshorturl_get_long_url($l); if ($longurl) { $body['html'] = str_replace($l, $longurl, $body['html']); } } } } }