summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-11-17 13:03:59 -0800
committerBrion Vibber <brion@pobox.com>2010-11-17 13:03:59 -0800
commit197b56778a04a1d0f12dabb84e95dc9b80902aeb (patch)
tree63f6362e82fdfd5a39fcb328afff2f16e515a66e
parent589aee587f19735d14aeb47ac0dc864d035ac97f (diff)
Add $config['attachments']['process_links'] to allow disabling processing of mentioned URL links for attachment info (oEmbed lookups) and dereferencing of redirects that we didn't have shortened ourselves.
This option may be useful for intranet sites that don't have direct access to the internet, as they may be unable to successfully fetch those resources.
-rw-r--r--classes/File_redirection.php12
-rw-r--r--classes/Notice.php12
-rw-r--r--lib/default.php1
-rw-r--r--lib/util.php8
-rw-r--r--plugins/LinkPreview/LinkPreviewPlugin.php2
-rw-r--r--plugins/TwitterBridge/twitterimport.php8
6 files changed, 29 insertions, 14 deletions
diff --git a/classes/File_redirection.php b/classes/File_redirection.php
index 1976e3439..4ee43026b 100644
--- a/classes/File_redirection.php
+++ b/classes/File_redirection.php
@@ -139,6 +139,7 @@ class File_redirection extends Memcached_DataObject
* reached.
*
* @param string $in_url
+ * @param boolean $discover true to attempt dereferencing the redirect if we don't know it already
* @return mixed one of:
* string - target URL, if this is a direct link or a known redirect
* array - redirect info if this is an *unknown* redirect:
@@ -150,7 +151,7 @@ class File_redirection extends Memcached_DataObject
* size (optional): byte size from Content-Length header
* time (optional): timestamp from Last-Modified header
*/
- public function where($in_url) {
+ public function where($in_url, $discover=true) {
// let's see if we know this...
$a = File::staticGet('url', $in_url);
@@ -166,8 +167,13 @@ class File_redirection extends Memcached_DataObject
}
}
- $ret = File_redirection::lookupWhere($in_url);
- return $ret;
+ if ($discover) {
+ $ret = File_redirection::lookupWhere($in_url);
+ return $ret;
+ } else {
+ // No manual dereferencing; leave the unknown URL as is.
+ return $in_url;
+ }
}
/**
diff --git a/classes/Notice.php b/classes/Notice.php
index 85c7dabea..dd9438f16 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -476,7 +476,9 @@ class Notice extends Memcached_DataObject
* @return void
*/
function saveUrls() {
- common_replace_urls_callback($this->content, array($this, 'saveUrl'), $this->id);
+ if (common_config('attachments', 'process_links')) {
+ common_replace_urls_callback($this->content, array($this, 'saveUrl'), $this->id);
+ }
}
/**
@@ -489,9 +491,11 @@ class Notice extends Memcached_DataObject
*/
function saveKnownUrls($urls)
{
- // @fixme validation?
- foreach (array_unique($urls) as $url) {
- File::processNew($url, $this->id);
+ if (common_config('attachments', 'process_links')) {
+ // @fixme validation?
+ foreach (array_unique($urls) as $url) {
+ File::processNew($url, $this->id);
+ }
}
}
diff --git a/lib/default.php b/lib/default.php
index ece01f2a8..a91fa338f 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -253,6 +253,7 @@ $default =
'show_thumbs' => true, // show thumbnails in notice lists for uploaded images, and photos and videos linked remotely that provide oEmbed info
'thumb_width' => 100,
'thumb_height' => 75,
+ 'process_links' => true, // check linked resources for embeddable photos and videos; this will hit referenced external web sites when processing new messages.
),
'application' =>
array('desclimit' => null),
diff --git a/lib/util.php b/lib/util.php
index e6b62f750..49566c4d4 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -848,7 +848,7 @@ function common_linkify($url) {
$canon = File_redirection::_canonUrl($url);
- $longurl_data = File_redirection::where($canon);
+ $longurl_data = File_redirection::where($canon, common_config('attachments', 'process_links'));
if (is_array($longurl_data)) {
$longurl = $longurl_data['url'];
} elseif (is_string($longurl_data)) {
@@ -872,8 +872,10 @@ function common_linkify($url) {
$f = File::staticGet('url', $longurl);
if (empty($f)) {
- // XXX: this writes to the database. :<
- $f = File::processNew($longurl);
+ if (common_config('attachments', 'process_links')) {
+ // XXX: this writes to the database. :<
+ $f = File::processNew($longurl);
+ }
}
if (!empty($f)) {
diff --git a/plugins/LinkPreview/LinkPreviewPlugin.php b/plugins/LinkPreview/LinkPreviewPlugin.php
index da7981148..39d2c9bf3 100644
--- a/plugins/LinkPreview/LinkPreviewPlugin.php
+++ b/plugins/LinkPreview/LinkPreviewPlugin.php
@@ -50,7 +50,7 @@ class LinkPreviewPlugin extends Plugin
function onEndShowScripts($action)
{
$user = common_current_user();
- if ($user) {
+ if ($user && common_config('attachments', 'process_links')) {
$action->script('plugins/LinkPreview/linkpreview.js');
$data = json_encode(array(
'api' => common_local_url('oembedproxy'),
diff --git a/plugins/TwitterBridge/twitterimport.php b/plugins/TwitterBridge/twitterimport.php
index 498e9b1fc..9e53849d8 100644
--- a/plugins/TwitterBridge/twitterimport.php
+++ b/plugins/TwitterBridge/twitterimport.php
@@ -659,9 +659,11 @@ class TwitterImport
*/
function saveStatusAttachments($notice, $status)
{
- if (!empty($status->entities) && !empty($status->entities->urls)) {
- foreach ($status->entities->urls as $url) {
- File::processNew($url->url, $notice->id);
+ if (common_config('attachments', 'process_links')) {
+ if (!empty($status->entities) && !empty($status->entities->urls)) {
+ foreach ($status->entities->urls as $url) {
+ File::processNew($url->url, $notice->id);
+ }
}
}
}