aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/routing.py4
-rw-r--r--mediagoblin/templates/mediagoblin/webfinger/host-meta.xml27
-rw-r--r--mediagoblin/templates/mediagoblin/webfinger/xrd.xml26
-rw-r--r--mediagoblin/webfinger/__init__.py15
-rw-r--r--mediagoblin/webfinger/routing.py25
-rw-r--r--mediagoblin/webfinger/views.py46
6 files changed, 143 insertions, 0 deletions
diff --git a/mediagoblin/routing.py b/mediagoblin/routing.py
index ae56f8cb..bd727db5 100644
--- a/mediagoblin/routing.py
+++ b/mediagoblin/routing.py
@@ -21,6 +21,8 @@ from mediagoblin.submit.routing import submit_routes
from mediagoblin.user_pages.routing import user_routes
from mediagoblin.edit.routing import edit_routes
from mediagoblin.listings.routing import tag_routes
+from mediagoblin.webfinger.routing import webfinger_well_known_routes, \
+ webfinger_routes
def get_mapper():
@@ -36,5 +38,7 @@ def get_mapper():
mapping.extend(user_routes, '/u')
mapping.extend(edit_routes, '/edit')
mapping.extend(tag_routes, '/tag')
+ mapping.extend(webfinger_well_known_routes, '/.well-known')
+ mapping.extend(webfinger_routes, '/api/webfinger')
return mapping
diff --git a/mediagoblin/templates/mediagoblin/webfinger/host-meta.xml b/mediagoblin/templates/mediagoblin/webfinger/host-meta.xml
new file mode 100644
index 00000000..dff2c9aa
--- /dev/null
+++ b/mediagoblin/templates/mediagoblin/webfinger/host-meta.xml
@@ -0,0 +1,27 @@
+{# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+#
+# 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 <http://www.gnu.org/licenses/>.
+-#}
+<?xml version='1.0' encoding='UTF-8'?>
+<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'
+ xmlns:hm='http://host-meta.net/xrd/1.0'>
+
+ <hm:Host>{{ request.host }}</hm:Host>
+
+ <Link rel='lrdd'
+ template='{{ lrdd_template }}'>
+ <Title>{{ llrd_title }}</Title>
+ </Link>
+</XRD>
diff --git a/mediagoblin/templates/mediagoblin/webfinger/xrd.xml b/mediagoblin/templates/mediagoblin/webfinger/xrd.xml
new file mode 100644
index 00000000..2ef9b814
--- /dev/null
+++ b/mediagoblin/templates/mediagoblin/webfinger/xrd.xml
@@ -0,0 +1,26 @@
+{# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+#
+# 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 <http://www.gnu.org/licenses/>.
+-#}
+<?xml version='1.0' encoding='UTF-8'?>
+<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>
+
+ <Subject>{{ uri }}</Subject>
+ <Alias>http://{{ request.host }}/u/{{ username }}</Alias>
+
+ <Link rel="http://schemas.google.com/g/2010#updates-from"
+ type="application/atom+xml"
+ href="http://{{ request.host }}/u/{{ username }}/atom/" />
+</XRD>
diff --git a/mediagoblin/webfinger/__init__.py b/mediagoblin/webfinger/__init__.py
new file mode 100644
index 00000000..ba347c69
--- /dev/null
+++ b/mediagoblin/webfinger/__init__.py
@@ -0,0 +1,15 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+#
+# 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 <http://www.gnu.org/licenses/>.
diff --git a/mediagoblin/webfinger/routing.py b/mediagoblin/webfinger/routing.py
new file mode 100644
index 00000000..effb2bf2
--- /dev/null
+++ b/mediagoblin/webfinger/routing.py
@@ -0,0 +1,25 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+from routes.route import Route
+
+webfinger_well_known_routes = [
+ Route('mediagoblin.webfinger.host_meta', '/host-meta',
+ controller='mediagoblin.webfinger.views:host_meta')]
+
+webfinger_routes = [
+ Route('mediagoblin.webfinger.xrd', '/xrd',
+ controller='mediagoblin.webfinger.views:xrd')]
diff --git a/mediagoblin/webfinger/views.py b/mediagoblin/webfinger/views.py
new file mode 100644
index 00000000..f6294da9
--- /dev/null
+++ b/mediagoblin/webfinger/views.py
@@ -0,0 +1,46 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+import re
+import mediagoblin.mg_globals as mg_globals
+
+from mediagoblin.tools.response import render_to_response
+
+LRDD_TEMPLATE = '{protocol}://{host}/api/webfinger/xrd?uri={{uri}}'
+
+def host_meta(request):
+ '''
+ Webfinger host-meta
+ '''
+ return render_to_response(
+ request,
+ 'mediagoblin/webfinger/host-meta.xml',
+ {'request': request,
+ 'lrdd_template': LRDD_TEMPLATE.format(
+ protocol='http',
+ host=request.host)})
+
+def xrd(request):
+ '''
+ Find user data based on a webfinger URI
+ '''
+ return render_to_response(
+ request,
+ 'mediagoblin/webfinger/xrd.xml',
+ {'request': request,
+ 'username': re.search(
+ r'^acct:([^@]*)',
+ request.GET.get('uri')).group(1)})