From de48efcf2a6b5fb096fd209b1efea482f743c19c Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 22 Jan 2013 12:02:18 +0100 Subject: some basic webfinger routes, controller, presenters, views --- users/lib/.webfinger.rb.swp | Bin 0 -> 12288 bytes users/lib/leap_web_users/engine.rb | 2 ++ users/lib/webfinger.rb | 6 ++++++ users/lib/webfinger/host_meta_presenter.rb | 17 +++++++++++++++++ users/lib/webfinger/user_presenter.rb | 16 ++++++++++++++++ 5 files changed, 41 insertions(+) create mode 100644 users/lib/.webfinger.rb.swp create mode 100644 users/lib/webfinger.rb create mode 100644 users/lib/webfinger/host_meta_presenter.rb create mode 100644 users/lib/webfinger/user_presenter.rb (limited to 'users/lib') diff --git a/users/lib/.webfinger.rb.swp b/users/lib/.webfinger.rb.swp new file mode 100644 index 0000000..09528c6 Binary files /dev/null and b/users/lib/.webfinger.rb.swp differ diff --git a/users/lib/leap_web_users/engine.rb b/users/lib/leap_web_users/engine.rb index 7033576..f8ed71c 100644 --- a/users/lib/leap_web_users/engine.rb +++ b/users/lib/leap_web_users/engine.rb @@ -7,6 +7,8 @@ require "ruby-srp" require "warden/session_serializer" require "warden/strategies/secure_remote_password" +require "webfinger" + module LeapWebUsers class Engine < ::Rails::Engine diff --git a/users/lib/webfinger.rb b/users/lib/webfinger.rb new file mode 100644 index 0000000..dd49b41 --- /dev/null +++ b/users/lib/webfinger.rb @@ -0,0 +1,6 @@ +module Webfinger + + autoload :HostMetaPresenter, 'webfinger/host_meta_presenter' + autoload :UserPresenter, 'webfinger/user_presenter' + +end diff --git a/users/lib/webfinger/host_meta_presenter.rb b/users/lib/webfinger/host_meta_presenter.rb new file mode 100644 index 0000000..3901a28 --- /dev/null +++ b/users/lib/webfinger/host_meta_presenter.rb @@ -0,0 +1,17 @@ +require 'uri' + +class Webfinger::HostMetaPresenter + def initialize(request) + @request = request + end + + def subject + url = URI.parse(@request.url) + url.path = '' + url.to_s + end + + def webfinger_template(path = 'webfinger', query_param='q') + "#{subject}/#{path}?#{query_param}={uri}" + end +end diff --git a/users/lib/webfinger/user_presenter.rb b/users/lib/webfinger/user_presenter.rb new file mode 100644 index 0000000..bbfc908 --- /dev/null +++ b/users/lib/webfinger/user_presenter.rb @@ -0,0 +1,16 @@ +class Webfinger::UserPresenter + attr_accessor :subject + + def initialize(subject, request) + @subject = subject + @request = request + end + + def email_identifier + "#{@subject.username}@#{@request.host}" + end + + def key + Base64.encode64(@subject.public_key.to_s) + end +end -- cgit v1.2.3 From 31d18779fe1af0c55b72be7bc554302322025ee5 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 22 Jan 2013 15:46:47 +0100 Subject: adding json jrd responses to webfinger --- users/lib/webfinger/user_presenter.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'users/lib') diff --git a/users/lib/webfinger/user_presenter.rb b/users/lib/webfinger/user_presenter.rb index bbfc908..8184c52 100644 --- a/users/lib/webfinger/user_presenter.rb +++ b/users/lib/webfinger/user_presenter.rb @@ -1,4 +1,5 @@ class Webfinger::UserPresenter + include Rails.application.routes.url_helpers attr_accessor :subject def initialize(subject, request) @@ -13,4 +14,15 @@ class Webfinger::UserPresenter def key Base64.encode64(@subject.public_key.to_s) end + + def to_json(options) + { + subject: "acct:#{email_identifier}", + aliases: [ user_url(@subject, :host => @request.host) ], + links: { + public_key: { type: 'PGP', href: key } + } + }.to_json(options) + end + end -- cgit v1.2.3 From 40edf176142bd6092f13bd9f9fb72a2c69d4b052 Mon Sep 17 00:00:00 2001 From: Azul Date: Tue, 22 Jan 2013 16:45:01 +0100 Subject: fixing xml and adding json representation for host_meta --- users/lib/.webfinger.rb.swp | Bin 12288 -> 0 bytes users/lib/webfinger/host_meta_presenter.rb | 9 +++++++++ 2 files changed, 9 insertions(+) delete mode 100644 users/lib/.webfinger.rb.swp (limited to 'users/lib') diff --git a/users/lib/.webfinger.rb.swp b/users/lib/.webfinger.rb.swp deleted file mode 100644 index 09528c6..0000000 Binary files a/users/lib/.webfinger.rb.swp and /dev/null differ diff --git a/users/lib/webfinger/host_meta_presenter.rb b/users/lib/webfinger/host_meta_presenter.rb index 3901a28..b48729c 100644 --- a/users/lib/webfinger/host_meta_presenter.rb +++ b/users/lib/webfinger/host_meta_presenter.rb @@ -14,4 +14,13 @@ class Webfinger::HostMetaPresenter def webfinger_template(path = 'webfinger', query_param='q') "#{subject}/#{path}?#{query_param}={uri}" end + + def to_json(options) + { + subject: subject, + links: { + lrdd: { type: 'application/xrd+xml', template: webfinger_template } + } + }.to_json(options) + end end -- cgit v1.2.3 From b530279a144ad5fb35070952898c8e6ae3ba68ea Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 23 Jan 2013 09:39:50 +0100 Subject: not inluding link to key if there is none --- users/lib/webfinger/user_presenter.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'users/lib') diff --git a/users/lib/webfinger/user_presenter.rb b/users/lib/webfinger/user_presenter.rb index 8184c52..8288bff 100644 --- a/users/lib/webfinger/user_presenter.rb +++ b/users/lib/webfinger/user_presenter.rb @@ -12,16 +12,22 @@ class Webfinger::UserPresenter end def key - Base64.encode64(@subject.public_key.to_s) + if @subject.public_key.present? + Base64.encode64(@subject.public_key.to_s) + end + end + + def links + links = {} + links[:public_key] = { type: 'PGP', href: key } if key + return links end def to_json(options) { subject: "acct:#{email_identifier}", aliases: [ user_url(@subject, :host => @request.host) ], - links: { - public_key: { type: 'PGP', href: key } - } + links: links }.to_json(options) end -- cgit v1.2.3 From 30f406de954bac1da5fef7cdd753c0af16f11051 Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 23 Jan 2013 13:13:41 +0100 Subject: added unit tests for user presenter changed the way the presenter works. Will need functional testing --- users/lib/webfinger/host_meta_presenter.rb | 2 +- users/lib/webfinger/user_presenter.rb | 36 +++++++++++++++++------------- 2 files changed, 22 insertions(+), 16 deletions(-) (limited to 'users/lib') diff --git a/users/lib/webfinger/host_meta_presenter.rb b/users/lib/webfinger/host_meta_presenter.rb index b48729c..6a6235f 100644 --- a/users/lib/webfinger/host_meta_presenter.rb +++ b/users/lib/webfinger/host_meta_presenter.rb @@ -15,7 +15,7 @@ class Webfinger::HostMetaPresenter "#{subject}/#{path}?#{query_param}={uri}" end - def to_json(options) + def to_json(options = {}) { subject: subject, links: { diff --git a/users/lib/webfinger/user_presenter.rb b/users/lib/webfinger/user_presenter.rb index 8288bff..41153a8 100644 --- a/users/lib/webfinger/user_presenter.rb +++ b/users/lib/webfinger/user_presenter.rb @@ -1,20 +1,26 @@ class Webfinger::UserPresenter include Rails.application.routes.url_helpers - attr_accessor :subject + attr_accessor :user - def initialize(subject, request) - @subject = subject + def initialize(user, request) + @user = user @request = request end - def email_identifier - "#{@subject.username}@#{@request.host}" + def to_json(options = {}) + { + subject: subject, + aliases: aliases, + links: links + }.to_json(options) end - def key - if @subject.public_key.present? - Base64.encode64(@subject.public_key.to_s) - end + def subject + "acct:#{@user.email_address}" + end + + def aliases + [ user_url(@user, :host => @request.host) ] end def links @@ -23,12 +29,12 @@ class Webfinger::UserPresenter return links end - def to_json(options) - { - subject: "acct:#{email_identifier}", - aliases: [ user_url(@subject, :host => @request.host) ], - links: links - }.to_json(options) + protected + + def key + if @user.public_key.present? + Base64.encode64(@user.public_key.to_s) + end end end -- cgit v1.2.3 From efb9f511f426b9d6f3af63608e77f80c4b823fb0 Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 23 Jan 2013 15:52:38 +0100 Subject: added a small test for HostMetaPresenter and using links hash in xml view --- users/lib/webfinger/host_meta_presenter.rb | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'users/lib') diff --git a/users/lib/webfinger/host_meta_presenter.rb b/users/lib/webfinger/host_meta_presenter.rb index 6a6235f..84ab7a9 100644 --- a/users/lib/webfinger/host_meta_presenter.rb +++ b/users/lib/webfinger/host_meta_presenter.rb @@ -5,22 +5,26 @@ class Webfinger::HostMetaPresenter @request = request end + def to_json(options = {}) + { + subject: subject, + links: links + }.to_json(options) + end + def subject url = URI.parse(@request.url) url.path = '' url.to_s end - def webfinger_template(path = 'webfinger', query_param='q') - "#{subject}/#{path}?#{query_param}={uri}" + def links + { lrdd: { type: 'application/xrd+xml', template: webfinger_template } } end - def to_json(options = {}) - { - subject: subject, - links: { - lrdd: { type: 'application/xrd+xml', template: webfinger_template } - } - }.to_json(options) + protected + + def webfinger_template(path = 'webfinger', query_param='q') + "#{subject}/#{path}?#{query_param}={uri}" end end -- cgit v1.2.3 From 9d053b6c9b61c68bf11f95bcb37631a518f1fba4 Mon Sep 17 00:00:00 2001 From: jessib Date: Thu, 24 Jan 2013 11:38:11 -0800 Subject: Removing aliases from webfinger as the link wouldn't work anyway, and don't want to leak ID information. --- users/lib/webfinger/user_presenter.rb | 5 ----- 1 file changed, 5 deletions(-) (limited to 'users/lib') diff --git a/users/lib/webfinger/user_presenter.rb b/users/lib/webfinger/user_presenter.rb index 41153a8..329f477 100644 --- a/users/lib/webfinger/user_presenter.rb +++ b/users/lib/webfinger/user_presenter.rb @@ -10,7 +10,6 @@ class Webfinger::UserPresenter def to_json(options = {}) { subject: subject, - aliases: aliases, links: links }.to_json(options) end @@ -19,10 +18,6 @@ class Webfinger::UserPresenter "acct:#{@user.email_address}" end - def aliases - [ user_url(@user, :host => @request.host) ] - end - def links links = {} links[:public_key] = { type: 'PGP', href: key } if key -- cgit v1.2.3