From e89a70b0af6d0ee830892718b5fbcb9ccae6545a Mon Sep 17 00:00:00 2001 From: nobody Date: Mon, 26 Oct 2020 16:17:53 -0700 Subject: [PATCH 1/4] icon files for local projects - fix redmatrix icons (edges cutoff) --- Zotlabs/Lib/System.php | 12 ++++++++++++ Zotlabs/Module/Settings/Channel.php | 2 +- boot.php | 2 +- images/misty.ico | Bin 0 -> 1150 bytes images/osada.ico | Bin 0 -> 1150 bytes images/redmatrix-64.png | Bin 3326 -> 3823 bytes images/redmatrix.ico | Bin 0 -> 1150 bytes images/redmatrix.png | Bin 28668 -> 9380 bytes images/redmatrix.svg | 27 +++++++++++++-------------- images/zap.ico | Bin 0 -> 1150 bytes 10 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 images/misty.ico create mode 100644 images/osada.ico create mode 100644 images/redmatrix.ico create mode 100644 images/zap.ico diff --git a/Zotlabs/Lib/System.php b/Zotlabs/Lib/System.php index 5cac1e2b3..acd07699c 100644 --- a/Zotlabs/Lib/System.php +++ b/Zotlabs/Lib/System.php @@ -33,6 +33,13 @@ class System { return z_root() . '/images/' . PLATFORM_NAME . '-64.png'; } + static public function get_project_favicon() { + if(is_array(App::$config) && is_array(App::$config['system']) && array_key_exists('favicon',App::$config['system'])) { + return App::$config['system']['favicon']; + } + return z_root() . '/images/' . PLATFORM_NAME . '.ico'; + } + static public function get_project_version() { if(is_array(App::$config) && is_array(App::$config['system']) && App::$config['system']['hide_version']) @@ -62,6 +69,11 @@ class System { return self::get_project_icon(); } + static public function get_site_favicon() { + if(is_array(App::$config) && is_array(App::$config['system']) && App::$config['system']['site_favicon_url']) + return App::$config['system']['site_favicon_url']; + return self::get_project_favicon(); + } static public function get_project_link() { if(is_array(App::$config) && is_array(App::$config['system']) && App::$config['system']['project_link']) diff --git a/Zotlabs/Module/Settings/Channel.php b/Zotlabs/Module/Settings/Channel.php index 4998dcfc8..0aa639490 100644 --- a/Zotlabs/Module/Settings/Channel.php +++ b/Zotlabs/Module/Settings/Channel.php @@ -131,7 +131,7 @@ class Channel { PermissionLimits::Set(local_channel(),'post_comments',$post_comments); $publish = (((x($_POST,'profile_in_directory')) && (intval($_POST['profile_in_directory']) == 1)) ? 1: 0); - $username = ((x($_POST,'username')) ? notags(trim($_POST['username'])) : ''); + $username = ((x($_POST,'username')) ? escape_tags(trim($_POST['username'])) : ''); $timezone = ((x($_POST,'timezone_select')) ? notags(trim($_POST['timezone_select'])) : ''); $defloc = ((x($_POST,'defloc')) ? notags(trim($_POST['defloc'])) : ''); $openid = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : ''); diff --git a/boot.php b/boot.php index 7a87b23c6..0570e3656 100755 --- a/boot.php +++ b/boot.php @@ -16,7 +16,7 @@ use Zotlabs\Daemon\Run; * @brief This file defines some global constants and includes the central App class. */ -define ( 'STD_VERSION', '20.10.26' ); +define ( 'STD_VERSION', '20.10.27' ); define ( 'ZOT_REVISION', '6.0' ); define ( 'DB_UPDATE_VERSION', 1243 ); diff --git a/images/misty.ico b/images/misty.ico new file mode 100644 index 0000000000000000000000000000000000000000..e8bce6daf2a61a3de78ec80f8d6caf4ef148214e GIT binary patch literal 1150 zcma)5OK4L;6g^f^DN;&73sOWE{y=vTT^J~mRH`VY;-dJYDiYI(m1_MUDp?dM2t{y_ zx^dA4MQ~FU#3z*OVqImCEK(8|F}jJm5gziA(}rFxMIJ}+8%NjQ>hdSg#wGkBD2{nEz4qfJnY69P;TZ} z4eP-Wz6QnuER{<1vU0i1>1We!PTQ*I*{%?KaU4I|huRr?8uOCY{kdF@v+-FskAA#Y zjo#umm`Eh*oPSL!l?sE`gTzJH!Y@;omGW+mXWKUO`8>NKU8cU@aY1_3&H7-~X(qmx zWilD!g!&K>_TdTo@do!bzYInnMmaG#!E`$9C9i%PSHuS}LnQ$LK#XL_!2DmFz^ zYm;lMEqq#V?+0*9+M4xfGAf+GS@l+T#edq*nHMvyaz-CViJR5$AF7F$j0f-tceQ^H z?1*$QnM~5u!*LwWy`FRX=H|a;iLSBOh=a($uQT0HoG>^T8f4%3KH{3zrdFr0*q|>v zYm;}a>bzLx8%+(mE7*}-8w!W3R!g@gG$?Bfk*ojx-bvJWA ctAq1;_49g751Kcc=Vnj%X&|mGR0K-<2aoE}g#Z8m literal 0 HcmV?d00001 diff --git a/images/osada.ico b/images/osada.ico new file mode 100644 index 0000000000000000000000000000000000000000..77faf385e8d3ad561e4d74f277df57329d34de3e GIT binary patch literal 1150 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 M07*qoM6N<$g4~=5ZvX%Q diff --git a/images/redmatrix.ico b/images/redmatrix.ico new file mode 100644 index 0000000000000000000000000000000000000000..30062bb0a7484cd201a2591811dd0140d1241fcc GIT binary patch literal 1150 zcma)5Urdrw6hD|`TMzowLt(kLlu#mi=(Y9QV^6KE_j>T9m)a_GtFcP!#X>E&7RXve zrU-_ln4jP#Bz%w?$$H@lWP{`d=J<0u=fVffS?jWod(XZ1_dCCH?l}M|`gL^y{rAAl zc7S65prwztXs5PM(|?ZkUJX1LIRjIhePGRL!TOulk!~1%L0)wKAW@%yyCVZISGoY} zc+fWh^A!!;8zYX6eLU(@U~(H_4JRk;C`lVgJa`^_=$uH~d8J8Yhl{U~Ax?yOP_YJUwpJ%)n3dsV$z5NT2zB7D-;T1oy}$iKA+EHDwV>s(A3cjZ-4Up)O7hN#s%z$8B8XV zm`EfjhqGunK82-H2^T%Jb0e%a{AWc!3}j$_)gj89B<;_wR|*01D`@z<|@5V2P(6%jMf zoO{LQbu1QZ;5mP-?{}`vgZfSz-ncd{@RoNjVZWZ37xv(-N$fvrBYc4Cp~~;aHPBi= ztV5@=W3gDo72k%?d3$hH;LR_+!e;$cKjVz8kHbp+GTs1Qs$mJ8PN%3_uAO*1j<3e- zO8qVqu2H{r4(gvfqs?06T({;s!0(~-&wi|;gJw1L?-2Fxn=rp^y?^Du_3v&cz_&vH R!>ZcXLUiC#xyKmB{sGV9_pJZ` literal 0 HcmV?d00001 diff --git a/images/redmatrix.png b/images/redmatrix.png index f048b67060562ff4f5854a17def2ada480d1d227..9b4d610ef0c0710720029c455ba9d5578a4b98b9 100644 GIT binary patch literal 9380 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 diff --git a/images/redmatrix.svg b/images/redmatrix.svg index 875a9c41d..23bc1a9b1 100644 --- a/images/redmatrix.svg +++ b/images/redmatrix.svg @@ -26,7 +26,7 @@ inkscape:pageshadow="2" inkscape:zoom="1.979899" inkscape:cx="35.049163" - inkscape:cy="27.799654" + inkscape:cy="88.408806" inkscape:document-units="px" inkscape:current-layer="g2985" showgrid="false" @@ -34,11 +34,11 @@ fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" - inkscape:window-width="1848" - inkscape:window-height="1016" - inkscape:window-x="72" - inkscape:window-y="27" - inkscape:window-maximized="1" /> + inkscape:window-width="1521" + inkscape:window-height="830" + inkscape:window-x="192" + inkscape:window-y="212" + inkscape:window-maximized="0" /> @@ -61,21 +61,20 @@ id="g2985" transform="matrix(4.7619048,0,0,4.7619048,-1370.7143,-2042.6958)"> + cx="375.05301" + cy="532.36218" + rx="20.532581" + ry="20.479477" /> diff --git a/images/zap.ico b/images/zap.ico new file mode 100644 index 0000000000000000000000000000000000000000..b04de2bb4fc189797a4fc06c266ef804b31895a2 GIT binary patch literal 1150 zcma)4-%Aux7(JHs7WtBIL2p_RK@n(BCV?;2-w;;X`U_dn#9UNRSRZOb=&4}$u_Ahq z9uny#LP*xt-C-TKEF_7gR%P30V$s<>eRpDPvYB!3aPD_G_nhnyl zpcX*AKqz7U@KQX-*`v65`4~=m3ijDJaRe8ZZe#1lDV*O&>a~67eK&r73Bnj`z*R4i zA3xWMnbjUJ(|urPvKg&@T9>{0iA#un>j!5aPjT}O%2O>E6Qqkj8iqFpz+wn2 zkAmq$oXLkFnzB}$7jgqAKe~ecbO&-A18uCle9G_nJl95Am>>Mh+xyO{1+cDn;fIsc zBfV5({nJM-&c9<}$U9@X6S=+q&%wi-eg1@oVOTj@?B4F#oPE^V&2Nr?#xVF{MYsH4 zvsu2G>|^%s>Hl)v{B{rh)eD-YX=SLonp%>(9Q-H4&z}mn^Y#4@3x$G}p{C@_G`Hn^ zb`L-Qj_6AA4>MZI@|Q{_E>1t=FS%PKep{o<|11`ZOhhA8nKrMg>Yr#w#>wqnYvb3c yMfzBFyb)UyzlCJ*94;=jAuU-OZb${(`FI<&&NFC?5qKa73*HLGs?@8leEbH(J?+^5 literal 0 HcmV?d00001 From 6fd6bf07017e207aa6e0324dfa1ef766bb0beac3 Mon Sep 17 00:00:00 2001 From: nobody Date: Mon, 26 Oct 2020 19:51:59 -0700 Subject: [PATCH 2/4] cleanup deprecated directory code --- Zotlabs/Daemon/Cli_suggest.php | 14 --- Zotlabs/Daemon/Cron_daily.php | 13 --- Zotlabs/Daemon/Cron_weekly.php | 5 - Zotlabs/Lib/Libzotdir.php | 182 --------------------------------- Zotlabs/Module/Regdir.php | 102 ------------------ boot.php | 24 ----- include/socgraph.php | 61 ----------- 7 files changed, 401 deletions(-) delete mode 100644 Zotlabs/Daemon/Cli_suggest.php delete mode 100644 Zotlabs/Module/Regdir.php diff --git a/Zotlabs/Daemon/Cli_suggest.php b/Zotlabs/Daemon/Cli_suggest.php deleted file mode 100644 index 5dced462d..000000000 --- a/Zotlabs/Daemon/Cli_suggest.php +++ /dev/null @@ -1,14 +0,0 @@ - $preferred ]; - } - else { - return []; - } - } - /** * Directories may come and go over time. We will need to check that our @@ -174,132 +118,6 @@ class Libzotdir { return $o; } - /** - * @brief Checks the directory mode of this hub. - * - * Checks the directory mode of this hub to see if it is some form of directory server. If it is, - * get the directory realm of this hub. Fetch a list of all other directory servers in this realm and request - * a directory sync packet. This will contain both directory updates and new ratings. Store these all in the DB. - * In the case of updates, we will query each of them asynchronously from a poller task. Ratings are stored - * directly if the rater's signature matches. - * - * @param int $dirmode; - */ - - static function sync_directories($dirmode) { - - // !!!!!!!!! - return; - // !!!!!!!!! - - - if ($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_NORMAL) - return; - - $realm = get_directory_realm(); - if ($realm == DIRECTORY_REALM) { - $r = q("select * from site where (site_flags & %d) > 0 and site_url != '%s' and site_type = %d and ( site_realm = '%s' or site_realm = '') ", - intval(DIRECTORY_MODE_PRIMARY|DIRECTORY_MODE_SECONDARY), - dbesc(z_root()), - intval(SITE_TYPE_ZOT), - dbesc($realm) - ); - } - else { - $r = q("select * from site where (site_flags & %d) > 0 and site_url != '%s' and site_realm like '%s' and site_type = %d ", - intval(DIRECTORY_MODE_PRIMARY|DIRECTORY_MODE_SECONDARY), - dbesc(z_root()), - dbesc(protect_sprintf('%' . $realm . '%')), - intval(SITE_TYPE_ZOT) - ); - } - - // If there are no directory servers, setup the fallback master - /** @FIXME What to do if we're in a different realm? */ - - if ((! $r) && (z_root() != DIRECTORY_FALLBACK_MASTER)) { - - $x = site_store_lowlevel( - [ - 'site_url' => DIRECTORY_FALLBACK_MASTER, - 'site_flags' => DIRECTORY_MODE_PRIMARY, - 'site_update' => NULL_DATE, - 'site_directory' => DIRECTORY_FALLBACK_MASTER . '/dirsearch', - 'site_realm' => DIRECTORY_REALM, - 'site_valid' => 1, - ] - ); - - $r = q("select * from site where site_flags in (%d, %d) and site_url != '%s' and site_type = %d ", - intval(DIRECTORY_MODE_PRIMARY), - intval(DIRECTORY_MODE_SECONDARY), - dbesc(z_root()), - intval(SITE_TYPE_ZOT) - ); - } - if (! $r) - return; - - foreach ($r as $rr) { - if (! $rr['site_directory']) - continue; - - logger('sync directories: ' . $rr['site_directory']); - - // for brand new directory servers, only load the last couple of days. - // It will take about a month for a new directory to obtain the full current repertoire of channels. - - $token = get_config('system','realm_token'); - - $syncdate = (($rr['site_sync'] <= NULL_DATE) ? datetime_convert('UTC','UTC','now - 2 days') : $rr['site_sync']); - $x = z_fetch_url($rr['site_directory'] . '?f=&sync=' . urlencode($syncdate) . (($token) ? '&t=' . $token : '')); - - if (! $x['success']) - continue; - - $j = json_decode($x['body'],true); - if (!($j['transactions']) || ($j['ratings'])) - continue; - - q("update site set site_sync = '%s' where site_url = '%s'", - dbesc(datetime_convert()), - dbesc($rr['site_url']) - ); - - logger('sync_directories: ' . $rr['site_url'] . ': ' . print_r($j,true), LOGGER_DATA); - - if (is_array($j['transactions']) && count($j['transactions'])) { - foreach ($j['transactions'] as $t) { - $r = q("select * from updates where ud_guid = '%s' limit 1", - dbesc($t['transaction_id']) - ); - if ($r) { - continue; - } - - $ud_flags = 0; - if (is_array($t['flags']) && in_array('deleted',$t['flags'])) - $ud_flags |= UPDATE_FLAGS_DELETED; - if (is_array($t['flags']) && in_array('forced',$t['flags'])) - $ud_flags |= UPDATE_FLAGS_FORCED; - if (is_array($t['flags']) && in_array('censored',$t['flags'])) - $ud_flags |= UPDATE_FLAGS_CENSORED; - - $z = q("insert into updates ( ud_hash, ud_guid, ud_date, ud_flags, ud_addr ) - values ( '%s', '%s', '%s', %d, '%s' ) ", - dbesc($t['hash']), - dbesc($t['transaction_id']), - dbesc($t['timestamp']), - intval($ud_flags), - dbesc($t['address']) - ); - } - } - } - } - - - /** * @brief * diff --git a/Zotlabs/Module/Regdir.php b/Zotlabs/Module/Regdir.php deleted file mode 100644 index a1643f01e..000000000 --- a/Zotlabs/Module/Regdir.php +++ /dev/null @@ -1,102 +0,0 @@ - false); - - $url = $_REQUEST['url']; - $access_token = $_REQUEST['t']; - $valid = 0; - - // we probably don't need the realm as we will find out in the probe. - // What we may want to do is throw an error if you're trying to register in a different realm - // so this configuration issue can be discovered. - - $realm = $_REQUEST['realm']; - if(! $realm) - $realm = DIRECTORY_REALM; - - if($realm === DIRECTORY_REALM) { - $valid = 1; - } else { - $token = get_config('system','realm_token'); - if($token && $access_token != $token) { - $result['message'] = 'This realm requires an access token'; - return; - } - $valid = 1; - } - - $dirmode = intval(get_config('system','directory_mode')); - - if ($dirmode == DIRECTORY_MODE_NORMAL) { - $ret['message'] = t('This site is not a directory server'); - json_return_and_die($ret); - } - - $m = null; - if ($url) { - $m = parse_url($url); - - if ((! $m) || (! z_dns_check($m['host']))) { - $result['message'] = 'unparseable url'; - json_return_and_die($result); - } - - $j = Zotfinger::exec($url); - if($j) { - $result['success'] = true; - } - else { - $valid = 0; - } - - q("update site set site_valid = %d where site_url = '%s'", - intval($valid), - strtolower($url) - ); - - json_return_and_die($result); - - } - else { - - if ($dirmode == DIRECTORY_MODE_STANDALONE) { - $r = array(array('site_url' => z_root())); - } else { - $r = q("select site_url from site where site_flags in ( 1, 2 ) and site_realm = '%s' and site_type = %d and site_valid = 1 ", - dbesc(get_directory_realm()), - intval(SITE_TYPE_ZOT) - ); - } - if ($r) { - $result['success'] = true; - $result['directories'] = array(); - foreach ($r as $rr) - $result['directories'][] = $rr['site_url']; - - json_return_and_die($result); - } - } - json_return_and_die($result); - } -} diff --git a/boot.php b/boot.php index 7a87b23c6..776f29608 100755 --- a/boot.php +++ b/boot.php @@ -83,10 +83,6 @@ define ( 'DIRECTORY_MODE_STANDALONE', 0x0100); // A detached (off the grid) hub // point to go out and find the rest of the world. define ( 'DIRECTORY_REALM', 'ZAP'); -define ( 'DIRECTORY_FALLBACK_MASTER', 'https://zap.macgirvin.com'); - -$DIRECTORY_FALLBACK_SERVERS = [ ]; - /** * @@ -2365,26 +2361,6 @@ function get_directory_realm() { return DIRECTORY_REALM; } -/** - * @brief Return the primary directory server. - * - * @return string - */ -function get_directory_primary() { - - $dirmode = intval(get_config('system','directory_mode')); - - if($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_PRIMARY) { - return z_root(); - } - - if($x = get_config('system', 'directory_primary')) - return $x; - - return DIRECTORY_FALLBACK_MASTER; -} - - /** * @brief Return relative date of last completed poller execution. * diff --git a/include/socgraph.php b/include/socgraph.php index 18dfbf006..d80ab2ce6 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -398,67 +398,6 @@ function suggestion_query($uid, $myxchan, $start = 0, $limit = 80) { } -// This function fetches a number of sitenames from the directory and searches them -// for channels that have opted-in to be "default" suggestions to new channels which -// have no connections. -// @TODO: We currently use a hardwired path of '/poco'. This should be configurable -// and based on discovered endpoint locations. - - -function update_suggestions() { - - // this function is no longer used - // remove any existing entries it once created - // - - $r = q("delete from xlink where xlink_xchan = '' and xlink_static = 0", - db_utcnow(), db_quoteinterval('7 DAY') - ); - - // !!!!! - return; - // !!!!! - - - $dirmode = get_config('system', 'directory_mode', DIRECTORY_MODE_NORMAL); - - if ($dirmode == DIRECTORY_MODE_STANDALONE) { - poco_load('', z_root() . '/poco'); - return; - } - - if ($dirmode == DIRECTORY_MODE_PRIMARY) { - $url = z_root() . '/sitelist'; - } - else { - $directory = Libzotdir::find_upstream_directory($dirmode); - $url = $directory['url'] . '/sitelist'; - } - if (! $url) - return; - - $ret = z_fetch_url($url); - - if ($ret['success']) { - - // We will grab fresh data once a day via the poller. Remove anything over a week old because - // the targets may have changed their preferences and don't want to be suggested - and they - // may have simply gone away. - - $r = q("delete from xlink where xlink_xchan = '' and xlink_updated < %s - INTERVAL %s and xlink_static = 0", - db_utcnow(), db_quoteinterval('7 DAY') - ); - - $j = json_decode($ret['body'],true); - if ($j && $j['success']) { - foreach ($j['entries'] as $host) { - poco_load('',$host['url'] . '/poco'); - } - } - } -} - - function poco() { $system_mode = false; From 7100021b08333d4a9f360b57f671491a097e02b4 Mon Sep 17 00:00:00 2001 From: nobody Date: Tue, 27 Oct 2020 01:45:46 -0700 Subject: [PATCH 3/4] deprecate daemon/externals --- Zotlabs/Daemon/Cron.php | 6 ------ Zotlabs/Daemon/Externals.php | 16 +++++++++++++++ Zotlabs/Module/Oexchange.php | 38 ++++++++++++++++++------------------ 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php index ec3b944fa..250a1f358 100644 --- a/Zotlabs/Daemon/Cron.php +++ b/Zotlabs/Daemon/Cron.php @@ -171,12 +171,6 @@ class Cron { } } - // pull in some public posts - - $disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false; - if(! $disable_discover_tab) - Run::Summon(array('Externals')); - $generation = 0; $restart = false; diff --git a/Zotlabs/Daemon/Externals.php b/Zotlabs/Daemon/Externals.php index 650143d2c..0ea412066 100644 --- a/Zotlabs/Daemon/Externals.php +++ b/Zotlabs/Daemon/Externals.php @@ -4,6 +4,22 @@ namespace Zotlabs\Daemon; use Zotlabs\Lib\Libzot; +/* + +This file is being kept for archival reference at this time. +It is not currently referenced elsewhere. Its purpose is to grab +some public posts from random zot sites by polling occasionally +and asking for a 'zotfeed'. This is generally stored in the +'public stream' which is owned by the system channel on this site. +If somebody wishes to bring back this functionality, it should be +modified to read public outboxes in ActivityStreams format. + +*/ + + + + + class Externals { diff --git a/Zotlabs/Module/Oexchange.php b/Zotlabs/Module/Oexchange.php index f36511134..950965a95 100644 --- a/Zotlabs/Module/Oexchange.php +++ b/Zotlabs/Module/Oexchange.php @@ -1,30 +1,28 @@ 1) && (argv(1) === 'xrd')) { - $tpl = get_markup_template('oexchange_xrd.tpl'); - - $o = replace_macros($tpl, array('$base' => z_root())); - echo $o; + if ((argc() > 1) && (argv(1) === 'xrd')) { + echo replace_macros(get_markup_template('oexchange_xrd.tpl'), [ '$base' => z_root() ] ); killme(); } } function get() { - - if(! local_channel()) { - if(remote_channel()) { - $observer = \App::get_observer(); - if($observer && $observer['xchan_url']) { + if (! local_channel()) { + if (remote_channel()) { + $observer = App::get_observer(); + if ($observer && $observer['xchan_url']) { $parsed = @parse_url($observer['xchan_url']); - if(! $parsed) { - notice( t('Unable to find your hub.') . EOL); + if (! $parsed) { + notice( t('Unable to find your site.') . EOL); return; } $url = $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : ''); @@ -37,7 +35,7 @@ class Oexchange extends \Zotlabs\Web\Controller { return login(false); } - if((argc() > 1) && argv(1) === 'done') { + if ((argc() > 1) && argv(1) === 'done') { info( t('Post successful.') . EOL); return; } @@ -51,15 +49,17 @@ class Oexchange extends \Zotlabs\Web\Controller { $tags = (((x($_REQUEST,'tags')) && strlen($_REQUEST['tags'])) ? '&tags=' . urlencode(notags(trim($_REQUEST['tags']))) : ''); - $ret = z_fetch_url(z_root() . '/urlinfo?f=&url=' . $url . $title . $description . $tags); + $ret = z_fetch_url(z_root() . '/linkinfo?f=&url=' . $url . $title . $description . $tags); - if($ret['success']) + if ($ret['success']) { $s = $ret['body']; + } - if(! strlen($s)) + if (! strlen($s)) { return; + } - $post = array(); + $post = []; $post['profile_uid'] = local_channel(); $post['return'] = '/oexchange/done' ; From 2a177ffd14bd2cb9732285e095c623c44a32ca7a Mon Sep 17 00:00:00 2001 From: nobody Date: Tue, 27 Oct 2020 16:51:27 -0700 Subject: [PATCH 4/4] mastodon now requires 'host' header be signed - in addition to digest and date --- Zotlabs/Lib/Queue.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Lib/Queue.php b/Zotlabs/Lib/Queue.php index 8f065653b..9a7549327 100644 --- a/Zotlabs/Lib/Queue.php +++ b/Zotlabs/Lib/Queue.php @@ -232,13 +232,15 @@ class Queue { $channel = channelx_by_n($outq['outq_channel']); $retries = 0; - + $m = parse_url($outq['outq_posturl']); + $headers = []; $headers['Content-Type'] = 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' ; $ret = $outq['outq_msg']; logger('ActivityPub send: ' . jindent($ret), LOGGER_DATA); $headers['Date'] = datetime_convert('UTC','UTC', 'now', 'D, d M Y H:i:s \\G\\M\\T'); $headers['Digest'] = HTTPSig::generate_digest_header($ret); + $headers['Host'] = $m['host']; $headers['(request-target)'] = 'post ' . get_request_string($outq['outq_posturl']); $xhead = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel));