FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Store OpenWebAuth token to verify contacts';
---
--- TABLE pagecache
---
-CREATE TABLE IF NOT EXISTS `pagecache` (
- `page` varbinary(255) NOT NULL COMMENT 'Page',
- `uri-id` int unsigned COMMENT 'Id of the item-uri table that contains the uri the page belongs to',
- `content` mediumtext COMMENT 'Page content',
- `fetched` datetime COMMENT 'date when the page had been fetched',
- PRIMARY KEY(`page`),
- INDEX `fetched` (`fetched`),
- INDEX `uri-id` (`uri-id`),
- FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
-) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Stores temporary data';
-
--
-- TABLE parsed_url
--
| [notify-threads](help/database/db_notify-threads) | |
| [oembed](help/database/db_oembed) | cache for OEmbed queries |
| [openwebauth-token](help/database/db_openwebauth-token) | Store OpenWebAuth token to verify contacts |
-| [pagecache](help/database/db_pagecache) | Stores temporary data |
| [parsed_url](help/database/db_parsed_url) | cache for 'parse_url' queries |
| [pconfig](help/database/db_pconfig) | personal (per user) configuration storage |
| [permissionset](help/database/db_permissionset) | |
+++ /dev/null
-Table pagecache
-===========
-
-Stores temporary data
-
-Fields
-------
-
-| Field | Description | Type | Null | Key | Default | Extra |
-| ------- | ------------------------------------------------------------------ | -------------- | ---- | --- | ------- | ----- |
-| page | Page | varbinary(255) | NO | PRI | NULL | |
-| uri-id | Id of the item-uri table that contains the uri the page belongs to | int unsigned | YES | | NULL | |
-| content | Page content | mediumtext | YES | | NULL | |
-| fetched | date when the page had been fetched | datetime | YES | | NULL | |
-
-Indexes
-------------
-
-| Name | Fields |
-| ------- | ------- |
-| PRIMARY | page |
-| fetched | fetched |
-| uri-id | uri-id |
-
-Foreign Keys
-------------
-
-| Field | Target Table | Target Field |
-|-------|--------------|--------------|
-| uri-id | [item-uri](help/database/db_item-uri) | id |
-
-Return to [database documentation](help/database)
$notify_items = [];
while ($item = DBA::fetch($items)) {
- ActivityPub\PageCache::deleteByUriId($item['uri-id']);
-
if (!empty($fields['body'])) {
Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']);
// clean up categories and tags so they don't end up as orphans
Post\Category::deleteByURIId($item['uri-id'], $item['uid']);
- ActivityPub\PageCache::deleteByUriId($item['uri-id']);
-
/*
* If item is a link to a photo resource, nuke all the associated photos
* (visitors will not have photo resources)
use Friendica\Model\Post;
use Friendica\Network\HTTPException;
use Friendica\Protocol\ActivityPub;
-use Friendica\Protocol\ActivityPub\PageCache;
use Friendica\Util\HTTPSignature;
use Friendica\Util\Network;
use Friendica\Util\Strings;
DI::baseUrl()->redirect(str_replace('objects/', 'display/', DI::args()->getQueryString()));
}
- $data = PageCache::fetch($_SERVER['REQUEST_URI']);
- if (!empty($data)) {
- header('Access-Control-Allow-Origin: *');
-
- System::jsonExit($data, 'application/activity+json');
- }
-
$itemuri = DBA::selectFirst('item-uri', ['id'], ['guid' => $this->parameters['guid']]);
if (DBA::isResult($itemuri)) {
Network::checkEtagModified($etag, $last_modified);
if (empty($this->parameters['activity']) && ($item['gravity'] != GRAVITY_ACTIVITY)) {
- $activity = ActivityPub\Transmitter::createActivityFromItem($item['id'], true);
+ $activity = ActivityPub\Transmitter::createCachedActivityFromItem($item['id'], false, true);
if (empty($activity['type'])) {
throw new HTTPException\NotFoundException();
}
} elseif (empty($this->parameters['activity']) || in_array($this->parameters['activity'],
['Create', 'Announce', 'Update', 'Like', 'Dislike', 'Accept', 'Reject',
'TentativeAccept', 'Follow', 'Add'])) {
- $data = ActivityPub\Transmitter::createActivityFromItem($item['id']);
+ $data = ActivityPub\Transmitter::createCachedActivityFromItem($item['id']);
if (empty($data)) {
throw new HTTPException\NotFoundException();
}
throw new HTTPException\NotFoundException();
}
- if (in_array($item['private'], [Item::PUBLIC, Item::UNLISTED])) {
- PageCache::add($_SERVER['REQUEST_URI'], $item['uri-id'], $data);
- }
-
// Relaxed CORS header for public items
header('Access-Control-Allow-Origin: *');
+++ /dev/null
-<?php
-/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-namespace Friendica\Protocol\ActivityPub;
-
-use Friendica\Core\Logger;
-use Friendica\Database\Database;
-use Friendica\Database\DBA;
-use Friendica\DI;
-use Friendica\Util\DateTimeFormat;
-
-/**
- * This class handles the page cache
- */
-class PageCache
-{
- /**
- * Add content to the page cache
- *
- * @param string $page
- * @param int $uriid
- * @param mixed $content
- * @return void
- */
- public static function add(string $page, int $uriid, $content)
- {
- if (!DI::config()->get('system', 'pagecache')) {
- return;
- }
-
- DBA::delete('pagecache', ["`fetched` < ?", DateTimeFormat::utc('now - 5 minutes')]);
- DBA::insert('pagecache', ['page' => $page, 'uri-id' => $uriid, 'content' => serialize($content), 'fetched' => DateTimeFormat::utcNow()], Database::INSERT_UPDATE);
-
- Logger::debug('Page added', ['page' => $page]);
- }
-
- /**
- * Fetch data from the page cache
- *
- * @param string $page
- * @return mixed
- */
- public static function fetch(string $page)
- {
- $pagecache = DBA::selectFirst('pagecache', [], ['page' => $page]);
- if (empty($pagecache['content'])) {
- return null;
- }
-
- DBA::update('pagecache', ['fetched' => DateTimeFormat::utcNow()], ['page' => $page]);
-
- Logger::debug('Page fetched', ['page' => $page]);
-
- return unserialize($pagecache['content']);
- }
-
- /**
- * Delete the pagecache via its connected uri-id
- *
- * @param integer $uriid
- * @return void
- */
- public static function deleteByUriId(int $uriid)
- {
- DBA::delete('pagecache', ['uri-id' => $uriid]);
- }
-}
* @return array|false activity or false on failure
* @throws \Exception
*/
- public static function createCachedActivityFromItem(int $item_id, bool $force = false)
+ public static function createCachedActivityFromItem(int $item_id, bool $force = false, bool $object_mode = false)
{
- $cachekey = 'APDelivery:createActivity:' . $item_id;
+ $cachekey = 'APDelivery:createActivity:' . $item_id . ':' . (int)$object_mode;
if (!$force) {
$data = DI::cache()->get($cachekey);
}
}
- $data = self::createActivityFromItem($item_id);
+ $data = self::createActivityFromItem($item_id, $object_mode);
DI::cache()->set($cachekey, $data, Duration::QUARTER_HOUR);
return $data;
DBA::e("OPTIMIZE TABLE `cache`");
DBA::e("OPTIMIZE TABLE `locks`");
DBA::e("OPTIMIZE TABLE `oembed`");
- DBA::e("OPTIMIZE TABLE `pagecache`");
DBA::e("OPTIMIZE TABLE `parsed_url`");
DBA::e("OPTIMIZE TABLE `session`");
use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) {
- define('DB_UPDATE_VERSION', 1483);
+ define('DB_UPDATE_VERSION', 1482);
}
return [
"uid" => ["uid"],
]
],
- "pagecache" => [
- "comment" => "Stores temporary data",
- "fields" => [
- "page" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "Page"],
- "uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the uri the page belongs to"],
- "content" => ["type" => "mediumtext", "comment" => "Page content"],
- "fetched" => ["type" => "datetime", "comment" => "date when the page had been fetched"],
- ],
- "indexes" => [
- "PRIMARY" => ["page"],
- "fetched" => ["fetched"],
- "uri-id" => ["uri-id"],
- ],
- ],
"parsed_url" => [
"comment" => "cache for 'parse_url' queries",
"fields" => [
// Don't show smilies.
'no_smilies' => false,
- // pagecache (Boolean)
- // Cache frequently fetched pages.
- 'pagecache' => false,
-
// paranoia (Boolean)
// Log out users if their IP address changed.
'paranoia' => false,