]>
git.mxchange.org Git - quix0rs-gnu-social.git/log
mmn [Mon, 14 Dec 2015 21:10:57 +0000 (21:10 +0000)]
Merge branch 'send-twitter-replies-to-twitter' into 'master'
Always send Twitter replies to Twitter
If is_twitter_notice($notice->reply_to) then send it to Twitter, even
if twitter import is off. It's a reply to a Twitter notice, it should
go there!
(Also retweets.)
See merge request !42
mmn [Mon, 14 Dec 2015 21:09:56 +0000 (21:09 +0000)]
Merge branch 'direct-feed-sub' into 'master'
If we are given a direct URL to a feed, use that
See merge request !54
mmn [Mon, 14 Dec 2015 21:09:08 +0000 (21:09 +0000)]
Merge branch 'twitter-show-rel-syndication' into 'master'
Include rel-syndication link for tweets
As per: <http://microformats.org/wiki/rel-syndication>
This allows some services to find a post in Twitter.
See merge request !44
mmn [Mon, 14 Dec 2015 21:08:22 +0000 (21:08 +0000)]
Merge branch 'firefox-sub-link' into 'master'
Link to add to Firefox as feedreader
This allows easily subscribing to any feed firefox detects in your GNU Social instance.
See merge request !55
mmn [Mon, 14 Dec 2015 21:07:48 +0000 (21:07 +0000)]
Merge branch 'fix-twitter-uri' into 'master'
Twitter URIs have changed
The #! was deprecated ages ago, and Twitter forces HTTPS these days.
See merge request !43
mmn [Mon, 14 Dec 2015 21:05:25 +0000 (21:05 +0000)]
Merge branch 'inbound-linkback' into 'master'
Accept mentions/replies/rsvps/likes via pingback and webmention
This makes the Linkback plugin bidirectional, allowing reply/mention federation between GNU Social and any pingback-enabled service (including any Wordpress site).
See merge request !41
mmn [Mon, 14 Dec 2015 21:04:22 +0000 (21:04 +0000)]
Merge branch 'twitter-check-dupe-by-uri' into 'master'
TwitterBridge also check for dupe by uri
In case a twitter item came in from some other source (such as linkback).
See merge request !45
mmn [Mon, 14 Dec 2015 21:03:38 +0000 (21:03 +0000)]
Merge branch 'repost-of-uf2' into 'master'
Mark up link to original as a repost for repeats
http://indiewebcamp.com/repost
See merge request !46
mmn [Mon, 14 Dec 2015 21:01:42 +0000 (21:01 +0000)]
Merge branch 'at-mention-url' into 'master'
MentionURL Plugin
This plugin enables users to use the syntax `@twitter.com/singpolyma` to mention users the system does not know about, or to be more specific when a nickname is ambiguous.
See merge request !53
Mikael Nordfeldth [Mon, 14 Dec 2015 20:29:39 +0000 (21:29 +0100)]
We have to print/echo when outputting json (thanks hannes)
Mikael Nordfeldth [Sun, 22 Nov 2015 23:42:13 +0000 (00:42 +0100)]
bump beta version number
Mikael Nordfeldth [Sun, 22 Nov 2015 23:40:28 +0000 (00:40 +0100)]
allow form ->li() to set $class
Mikael Nordfeldth [Sun, 22 Nov 2015 23:39:49 +0000 (00:39 +0100)]
Managed_DataObject::newUri was called improperly
Mikael Nordfeldth [Fri, 20 Nov 2015 17:50:26 +0000 (18:50 +0100)]
Merge branch 'nightly' of git.gnu.io:gnu/gnu-social into nightly
mmn [Fri, 20 Nov 2015 17:50:01 +0000 (17:50 +0000)]
Merge branch 'refactor-file-processNew' into 'nightly'
Refactor on File::processNew
The code was so involved there was even a comment asking for a refactor.
Now, File_redirection::where always returns a nice File_redirection
object instead of an array or string or nothing. The object is
either one which already existed or else a new, unsaved object.
Instead of duplicating "does it exist" checks everywhere, do it in
File_redirection::where. You either get what exists or something to save.
An unsaved File_redirection may be paired with an unsaved File.
You will want to save the File first (using ->saveFile()) and put the
id in File_redirection#file_id before saving.
See merge request !57
Mikael Nordfeldth [Fri, 20 Nov 2015 17:47:21 +0000 (18:47 +0100)]
Merge request #59 which was directed at master
mmn [Fri, 20 Nov 2015 17:46:53 +0000 (17:46 +0000)]
Merge branch 'master' into 'master'
block check can't be done inside the same try-expression as Subscription::getSub…
…scription(), since if that throws a NoResultException, the block check will not be done. and if you're blocking someone you are not subscribing to them.
See merge request !59
hannes [Thu, 19 Nov 2015 15:55:11 +0000 (15:55 +0000)]
block check can't be done inside the same try-expression as Subscription::getSubscription(), since if that throws a NoResultException, the block check will not be done. and if you're blocking someone you are not subscribing to them.
Stephen Paul Weber [Tue, 27 Oct 2015 17:13:11 +0000 (17:13 +0000)]
Show better source for linback items
Stephen Paul Weber [Tue, 27 Oct 2015 03:15:38 +0000 (03:15 +0000)]
Update conversation when we update reply_to
Or repeat_of
Stephen Paul Weber [Sun, 25 Oct 2015 18:42:14 +0000 (18:42 +0000)]
Autodiscovery header for webmention
Stephen Paul Weber [Sun, 25 Oct 2015 17:30:51 +0000 (17:30 +0000)]
Ignore self pings
Stephen Paul Weber [Sun, 25 Oct 2015 16:50:59 +0000 (16:50 +0000)]
That never was meant to be in that if
Stephen Paul Weber [Fri, 23 Oct 2015 18:41:00 +0000 (18:41 +0000)]
Use author-declared URL as URI
Will make brid.gy work better, for example.
Stephen Paul Weber [Thu, 22 Oct 2015 20:15:44 +0000 (20:15 +0000)]
Add pingback frontend
Stephen Paul Weber [Thu, 22 Oct 2015 19:29:04 +0000 (19:29 +0000)]
Search in sub-items for links to the target as well
Stephen Paul Weber [Thu, 22 Oct 2015 19:13:56 +0000 (19:13 +0000)]
Catch exception that this generates when there is no result
Stephen Paul Weber [Thu, 22 Oct 2015 19:13:16 +0000 (19:13 +0000)]
Fix duplicate detection
Stephen Paul Weber [Thu, 22 Oct 2015 18:21:46 +0000 (18:21 +0000)]
Update on duplicate linkback
This especially allows mentioning mulitple users, etc.
Stephen Paul Weber [Thu, 22 Oct 2015 17:39:15 +0000 (17:39 +0000)]
Linkback to user should work
Stephen Paul Weber [Thu, 22 Oct 2015 17:20:03 +0000 (17:20 +0000)]
Ignore non-local notices as targets
Stephen Paul Weber [Thu, 22 Oct 2015 17:18:20 +0000 (17:18 +0000)]
Webmention frontend
Stephen Paul Weber [Thu, 22 Oct 2015 17:17:14 +0000 (17:17 +0000)]
Initial helpers for verification and microformats
This will form the backend of all incoming linkbacks.
We verify the linkback is real and then try to form a rich notice
out of it.
Mikael Nordfeldth [Sun, 8 Nov 2015 22:31:45 +0000 (23:31 +0100)]
Make it clearer that we're handling group IDs
Mikael Nordfeldth [Sun, 8 Nov 2015 22:31:23 +0000 (23:31 +0100)]
Fix federation issue with groups (bad list order)
Mikael Nordfeldth [Sun, 8 Nov 2015 22:24:20 +0000 (23:24 +0100)]
Ooops, copypasted something into the wrong place.
Mikael Nordfeldth [Sun, 8 Nov 2015 09:33:41 +0000 (10:33 +0100)]
OStatus usage of static Validate::* calls fixed
Mikael Nordfeldth [Fri, 6 Nov 2015 12:39:17 +0000 (13:39 +0100)]
Merge branch 'master' of git.gnu.io:gnu/gnu-social into nightly
mmn [Fri, 6 Nov 2015 12:39:02 +0000 (12:39 +0000)]
Merge branch 'in-reply-to-uf2' into 'master'
Add direct link to parent notice
This is partly for usability, and partly to make Linkbacks for replies work (when the plugin is enabled).
See merge request !37
Mikael Nordfeldth [Fri, 6 Nov 2015 12:35:45 +0000 (13:35 +0100)]
separate classes into files in DirectMessage plugin
Mikael Nordfeldth [Fri, 6 Nov 2015 12:33:24 +0000 (13:33 +0100)]
Merge branch 'nightly' of git.gnu.io:gnu/gnu-social into nightly
mmn [Fri, 6 Nov 2015 12:28:00 +0000 (12:28 +0000)]
Merge branch 'nightly' into 'nightly'
getParent() method will fail if the parent notice does not exist in the notice table
getParent() method will fail if the parent notice does not exist in the notice table. See https://quitter.no/notice/709400
There are situations where a user delete his notice which could be a parent notice to a reply.
The user which replied to this deleted notice will then have broken timeline.
This is caused by the Notice.getParent() method which tries to return the selection of non existing parent notice.
I've tried this code on quitter.no and it seems to work.
See merge request !35
abjectio [Thu, 5 Nov 2015 16:34:34 +0000 (17:34 +0100)]
Merge branch 'nightly' of git.gnu.io:gnu/gnu-social into nightly
Mikael Nordfeldth [Thu, 5 Nov 2015 15:16:02 +0000 (16:16 +0100)]
Merge branch 'master' of git.gnu.io:gnu/gnu-social into nightly
Conflicts:
plugins/OStatus/OStatusPlugin.php
master vs. nightly thing
mmn [Thu, 5 Nov 2015 15:13:16 +0000 (15:13 +0000)]
Merge branch 'renew-pshb' into 'master'
Actually use the renew code
We have the code to check once a day and renew, but currently it's
just in a script directory. This change adds an event listener
hook to check and renew subscriptions daily.
Closes #83
See merge request !38
mmn [Thu, 5 Nov 2015 15:12:41 +0000 (15:12 +0000)]
Merge branch 'object-types-are-absolute' into 'master'
Stop incorrecly changing object_type to relative URI
All other data is using absolute URI for object_type.
See merge request !40
mmn [Thu, 5 Nov 2015 15:12:10 +0000 (15:12 +0000)]
Merge branch 'fix-webfinger-link-header' into 'master'
Add all link headers, not just the last one
Given the way Link headers work, it does not make any sense to
just replace all other ones. Especially when we ourselves are adding
in a loop.
See merge request !47
mmn [Thu, 5 Nov 2015 15:11:29 +0000 (15:11 +0000)]
Merge branch 'pings-interop' into 'master'
Clean up Linkback plugin and add Webmention support
Closes #82
Fixes Pingback, adds Webmention, makes linkbacks opt-out-able for users (at request of quitter.se admin)
See merge request !36
Mikael Nordfeldth [Thu, 5 Nov 2015 15:07:42 +0000 (16:07 +0100)]
Merge branch 'nightly' of git.gnu.io:gnu/gnu-social into nightly
Mikael Nordfeldth [Thu, 5 Nov 2015 15:07:05 +0000 (16:07 +0100)]
Merge branch 'master' into nightly
Some merge requests that were aimed at master
mmn [Thu, 5 Nov 2015 15:05:55 +0000 (15:05 +0000)]
Merge branch 'master' into 'master'
update URL
bugz.foocorp.net and gitorious.net are outdated
git.gnu.io is current
See merge request !58
mmn [Thu, 5 Nov 2015 15:03:42 +0000 (15:03 +0000)]
Merge branch 'status-204' into 'master'
Accept 204 for PuSH subscription
Some hubs (notably, pushpress, used by wordpress.com) return 204 to mean success.
This used to be allowed by the spec, so no harm in accepting it.
See merge request !48
mmn [Thu, 5 Nov 2015 15:02:20 +0000 (15:02 +0000)]
Merge branch 'handle-rss-guid' into 'master'
Respect isPermalLink=false on RSS guid
See merge request !49
mmn [Thu, 5 Nov 2015 15:01:07 +0000 (15:01 +0000)]
Merge branch 'twitter-verb' into 'nightly'
TwitterBridge: Add $notice->verb on import
Since /plugins/ActivityModeration::onStartNotieSave expects it to be there when calling ActivityUtils::compareVerbs. Otherwise, the following exception is unhandled:
2015-10-26 15:33:03 LOG_ERR: [sn.chromic.org:queuedaemon.php:25931] Unhandled exception: No URI to resolve in ActivityUtils::resolveUri
0: /lib/activityutils.php(353): ActivityUtils::resolveUri(NULL)
1: /lib/activityutils.php(364): ActivityUtils::compareTypes(NULL, Array)
2: /plugins/ActivityModeration/ActivityModerationPlugin.php(113): ActivityUtils::compareVerbs(NULL, Array)
3: [internal function]: ActivityModerationPlugin->onStartNoticeSave(Object(Notice))
4: /lib/event.php(105): call_user_func_array(Array, Array)
5: /plugins/TwitterBridge/lib/twitterimport.php(173): Event::handle('StartNoticeSave', Array)
6: /plugins/TwitterBridge/lib/twitterimport.php(72): TwitterImport->saveStatus(Object(stdClass))
7: /plugins/TwitterBridge/lib/tweetinqueuehandler.php(52): TwitterImport->importStatus(Object(stdClass))
8: /lib/dbqueuemanager.php(94): TweetInQueueHandler->handle(Array)
9: /lib/iomaster.php(287): DBQueueManager->poll()
10: /lib/iomaster.php(161): IoMaster->poll()
11: /scripts/queuedaemon.php(111): IoMaster->service()
12: /lib/spawningdaemon.php(189): QueueDaemon->runThread()
13: /lib/spawningdaemon.php(118): SpawningDaemon->initAndRunChild(2)
14: /lib/daemon.php(168): SpawningDaemon->run()
15: /scripts/queuedaemon.php(181): Daemon->runOnce()
16: {main}
See merge request !50
mmn [Thu, 5 Nov 2015 15:00:35 +0000 (15:00 +0000)]
Merge branch 'correct-author-for-repeat' into 'master'
Markup correct author for a repeat
The original author is not the author of this entry, but of the original entry.
See merge request !51
mmn [Thu, 5 Nov 2015 15:00:07 +0000 (15:00 +0000)]
Merge branch 'support-atom-namespaces-in-rss-author' into 'master'
Support more author types on RSS
Specifically, any ActivityStreams or ATOM namespaces being used on
an rss channel.
See merge request !52
mmn [Thu, 5 Nov 2015 14:57:29 +0000 (14:57 +0000)]
Merge branch 'group-join' into 'nightly'
Add User_group::getObjectType
Since
174586bd512 , I'm unable to join groups with the logs complaining
about getObjectType not existing on the User_group object.
Note: I'm not sure if this is the correct value to return here, but I
was able to joing groups successfully using this. Let me know if it needs
to be changed and I'll update the Merge Request!
See merge request !56
Matthias Fritzsche [Wed, 4 Nov 2015 11:31:23 +0000 (12:31 +0100)]
update URL
bugz.foocorp.net and gitorious.net are outdated
git.gnu.io is current
Stephen Paul Weber [Mon, 2 Nov 2015 05:15:08 +0000 (05:15 +0000)]
Refactor on File::processNew
The code was so involved there was even a comment asking for a refactor.
Now, File_redirection::where always returns a nice File_redirection
object instead of an array or string or nothing. The object is
either one which already existed or else a new, unsaved object.
Instead of duplicating "does it exist" checks everywhere, do it in
File_redirection::where. You either get what exists or something to save.
An unsaved File_redirection may be paired with an unsaved File.
You will want to save the File first (using ->saveFile()) and put the
id in File_redirection#file_id before saving.
Chimo [Fri, 30 Oct 2015 00:11:57 +0000 (20:11 -0400)]
Add User_group::getObjectType
Since
174586bd512 , I'm unable to join groups with the logs complaining
about getObjectType not existing on the User_group object.
Stephen Paul Weber [Wed, 28 Oct 2015 01:46:08 +0000 (01:46 +0000)]
Use mb_strlen
Stephen Paul Weber [Wed, 28 Oct 2015 01:45:51 +0000 (01:45 +0000)]
Improvements inspired by the OStatus code
Stephen Paul Weber [Wed, 28 Oct 2015 01:24:58 +0000 (01:24 +0000)]
Replace text with nickname if shorter
Stephen Paul Weber [Wed, 28 Oct 2015 01:24:42 +0000 (01:24 +0000)]
Allow mentioning bare domains with OStatus
Stephen Paul Weber [Wed, 28 Oct 2015 01:24:29 +0000 (01:24 +0000)]
Add length argument to plugin
Stephen Paul Weber [Wed, 28 Oct 2015 01:10:28 +0000 (01:10 +0000)]
Link to add to Firefox as feedreader
Stephen Paul Weber [Wed, 28 Oct 2015 00:54:20 +0000 (00:54 +0000)]
If we are given a direct URL to a feed, use that
Stephen Paul Weber [Wed, 28 Oct 2015 00:15:08 +0000 (00:15 +0000)]
New length format for other kinds of mentions
Stephen Paul Weber [Wed, 28 Oct 2015 00:11:54 +0000 (00:11 +0000)]
Move the functionality to a plugin
Use an associated model to prevent race conditions on creating the
profile object.
Mikael Nordfeldth [Tue, 27 Oct 2015 23:13:17 +0000 (00:13 +0100)]
Shared notices didn't save the URL
Stephen Paul Weber [Tue, 27 Oct 2015 18:43:57 +0000 (18:43 +0000)]
Support more author types on RSS
Specifically, any ActivityStreams or ATOM namespaces being used on
an rss channel.
Mikael Nordfeldth [Tue, 27 Oct 2015 18:05:07 +0000 (19:05 +0100)]
Bad HTML in translation.
Stephen Paul Weber [Tue, 27 Oct 2015 17:19:03 +0000 (17:19 +0000)]
Morkup correct author for a repeat
The original author is not the author of this entry, but of the original entry.
Chimo [Tue, 27 Oct 2015 14:12:33 +0000 (10:12 -0400)]
TwitterBridge: Add $notice->verb on import
Since /plugins/ActivityModeration::onStartNotieSave expects it to be there when calling ActivityUtils::compareVerbs. Otherwise, the following exception is unhandled:
2015-10-26 15:33:03 LOG_ERR: [sn.chromic.org:queuedaemon.php:25931] Unhandled exception: No URI to resolve in ActivityUtils::resolveUri
#0 /lib/activityutils.php(353): ActivityUtils::resolveUri(NULL)
#1 /lib/activityutils.php(364): ActivityUtils::compareTypes(NULL, Array)
#2 /plugins/ActivityModeration/ActivityModerationPlugin.php(113): ActivityUtils::compareVerbs(NULL, Array)
#3 [internal function]: ActivityModerationPlugin->onStartNoticeSave(Object(Notice))
#4 /lib/event.php(105): call_user_func_array(Array, Array)
#5 /plugins/TwitterBridge/lib/twitterimport.php(173): Event::handle('StartNoticeSave', Array)
#6 /plugins/TwitterBridge/lib/twitterimport.php(72): TwitterImport->saveStatus(Object(stdClass))
#7 /plugins/TwitterBridge/lib/tweetinqueuehandler.php(52): TwitterImport->importStatus(Object(stdClass))
#8 /lib/dbqueuemanager.php(94): TweetInQueueHandler->handle(Array)
#9 /lib/iomaster.php(287): DBQueueManager->poll()
#10 /lib/iomaster.php(161): IoMaster->poll()
#11 /scripts/queuedaemon.php(111): IoMaster->service()
#12 /lib/spawningdaemon.php(189): QueueDaemon->runThread()
#13 /lib/spawningdaemon.php(118): SpawningDaemon->initAndRunChild(2)
#14 /lib/daemon.php(168): SpawningDaemon->run()
#15 /scripts/queuedaemon.php(181): Daemon->runOnce()
#16 {main}
Stephen Paul Weber [Tue, 27 Oct 2015 03:18:04 +0000 (03:18 +0000)]
Respect isPermalLink=false on RSS guid
Stephen Paul Weber [Tue, 27 Oct 2015 03:16:39 +0000 (03:16 +0000)]
Accept 204 for PuSH subscription
Some hubs (notably, pushpress, used by wordpress.com) return 204 to mean success.
This used to be allowed by the spec, so no harm in accepting it.
Stephen Paul Weber [Sun, 25 Oct 2015 18:42:37 +0000 (18:42 +0000)]
Add all link headers, not just the last one
Given the way Link headers work, it does not make any sense to
just replace all other ones. Especially when we ourselves are adding
in a loop.
Stephen Paul Weber [Sun, 25 Oct 2015 17:22:15 +0000 (17:22 +0000)]
Linkback to mentioned profiles
Stephen Paul Weber [Fri, 23 Oct 2015 21:15:40 +0000 (21:15 +0000)]
Allow users to @mention URLs
Because inferring who you mean (especially in the presence of remotes) can suck
Stephen Paul Weber [Fri, 23 Oct 2015 19:00:08 +0000 (19:00 +0000)]
Mark up link to original as a repost for repeats
http://indiewebcamp.com/repost
Stephen Paul Weber [Fri, 23 Oct 2015 18:51:33 +0000 (18:51 +0000)]
Only show parent wrapper if there are some
Stephen Paul Weber [Fri, 23 Oct 2015 18:03:44 +0000 (18:03 +0000)]
TwitterBridge also check for dupe by uri
In case a twitter item came in from some other source (such as linkback).
Stephen Paul Weber [Fri, 23 Oct 2015 17:56:02 +0000 (17:56 +0000)]
Include rel-syndication link for tweets
As per: <http://microformats.org/wiki/rel-syndication>
This allows some services to find a post in Twitter.
Stephen Paul Weber [Fri, 23 Oct 2015 16:26:35 +0000 (16:26 +0000)]
Reduce duplication by handling both cases in find
Stephen Paul Weber [Fri, 23 Oct 2015 16:24:04 +0000 (16:24 +0000)]
Use HTTPS for links to Twitter profiles as well
Stephen Paul Weber [Fri, 23 Oct 2015 16:19:54 +0000 (16:19 +0000)]
Twitter URIs have changed
The #! was deprecated ages ago, and Twitter forces HTTPS these days.
Stephen Paul Weber [Fri, 23 Oct 2015 15:37:11 +0000 (15:37 +0000)]
Always send Twitter replies to Twitter
If is_twitter_notice($notice->reply_to) then send it to Twitter, even
if twitter import is off. It's a reply to a Twitter notice, it should
go there!
Stephen Paul Weber [Thu, 22 Oct 2015 17:14:59 +0000 (17:14 +0000)]
Stop incorrecly changing object_type to relative URI
All other data is using absolute URI for object_type.
Stephen Paul Weber [Wed, 21 Oct 2015 01:50:03 +0000 (01:50 +0000)]
Enqueue renewals
Better for request times, etc
Stephen Paul Weber [Wed, 21 Oct 2015 01:49:26 +0000 (01:49 +0000)]
Renew 1 day *before* the end, not 1 day *after*
Stephen Paul Weber [Wed, 21 Oct 2015 01:10:48 +0000 (01:10 +0000)]
Actually use the renew code
We have the code to check once a day and renew, but currently it's
just in a script directory. This change adds an event listener
hook to check and renew subscriptions daily.
Stephen Paul Weber [Mon, 19 Oct 2015 18:40:40 +0000 (18:40 +0000)]
Add direct link to parent notice
This is partly for usability, and partly to make Linkbacks for replies
work (when the plugin is enabled).
Stephen Paul Weber [Sun, 18 Oct 2015 21:28:55 +0000 (21:28 +0000)]
Allow users to opt out of sending linkbacks
abjectio [Sun, 18 Oct 2015 15:34:36 +0000 (17:34 +0200)]
Removed inboxmessagelist.php - seems to be not needed. Ref. Issue #77
Stephen Paul Weber [Sat, 17 Oct 2015 13:39:46 +0000 (13:39 +0000)]
Fix Pingback
This code was using the HTTPRequest helpers wrong. This commit sets the body directly instead of jamming the XML in as a POST param.
Stephen Paul Weber [Sat, 17 Oct 2015 13:38:13 +0000 (13:38 +0000)]
Send URL we publish
Webmention and Pingback both need the exact URL we are going to claim to link to to be present in our HTML source, so send them our actual original link.
Webmention clients are supposed to resolve this link. Pingback clients may still fail on shortened links.
abjectio [Fri, 16 Oct 2015 21:48:05 +0000 (23:48 +0200)]
Bug in catch(Exception) - parameter wrongly written
Stephen Paul Weber [Wed, 14 Oct 2015 21:13:58 +0000 (16:13 -0500)]
Add webmention support
Stephen Paul Weber [Wed, 14 Oct 2015 21:13:25 +0000 (16:13 -0500)]
Note that we should handle relative URIs
Stephen Paul Weber [Wed, 14 Oct 2015 20:54:47 +0000 (15:54 -0500)]
Normalize detection helpers
Will make it easier to see what's happening when we add a third one.