omniauth-indieauth 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'omniauth'
|
2
|
+
require 'faraday'
|
3
|
+
require 'cgi'
|
4
|
+
require 'microformats2'
|
5
|
+
|
6
|
+
module OmniAuth
|
7
|
+
module Strategies
|
8
|
+
class IndieAuth
|
9
|
+
include OmniAuth::Strategy
|
10
|
+
|
11
|
+
option :name, 'indieauth'
|
12
|
+
option :server, 'https://indieauth.com'
|
13
|
+
option :client_id
|
14
|
+
|
15
|
+
attr_accessor :me
|
16
|
+
|
17
|
+
def redirect_uri
|
18
|
+
full_host + script_name + callback_path
|
19
|
+
end
|
20
|
+
|
21
|
+
def request_phase
|
22
|
+
puts redirect_uri
|
23
|
+
redirect "#{options.server}/sign-in?redirect_uri=#{URI.encode_www_form_component(redirect_uri)}&client_id=#{URI.encode_www_form_component(options.client_id)}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def callback_phase
|
27
|
+
puts request.params.inspect
|
28
|
+
|
29
|
+
conn = Faraday.new(:url => "#{options.server}/auth") do |faraday|
|
30
|
+
faraday.request :url_encoded # form-encode POST params
|
31
|
+
end
|
32
|
+
response = Faraday.post "#{options.server}/auth", {
|
33
|
+
:code => request.params['code'],
|
34
|
+
:client_id => options.client_id,
|
35
|
+
:redirect_uri => redirect_uri
|
36
|
+
}
|
37
|
+
puts response.body
|
38
|
+
|
39
|
+
data = CGI::parse response.body
|
40
|
+
|
41
|
+
if data['me'].length > 0
|
42
|
+
@me = data['me'][0]
|
43
|
+
else
|
44
|
+
fail!(data['error'][0].to_sym, CallbackError.new(data['error'][0].to_sym, data['error_description'][0]))
|
45
|
+
end
|
46
|
+
|
47
|
+
super
|
48
|
+
end
|
49
|
+
|
50
|
+
uid do
|
51
|
+
@me
|
52
|
+
end
|
53
|
+
|
54
|
+
info do
|
55
|
+
data = {
|
56
|
+
:url => @me,
|
57
|
+
:name => @me.gsub(/https?:\/\//, '')
|
58
|
+
}
|
59
|
+
|
60
|
+
# Parse the url and look for an h-card to fill out the profile info
|
61
|
+
begin
|
62
|
+
src = Faraday.get @me
|
63
|
+
m = Microformats2.parse src.body
|
64
|
+
|
65
|
+
if m.card
|
66
|
+
data[:name] = m.card.name.to_s if m.card.name
|
67
|
+
data[:image] = m.card.photo.to_s if m.card.photo
|
68
|
+
end
|
69
|
+
rescue
|
70
|
+
# Ignore errors
|
71
|
+
end
|
72
|
+
|
73
|
+
data
|
74
|
+
end
|
75
|
+
|
76
|
+
class CallbackError < StandardError
|
77
|
+
attr_accessor :error, :error_reason, :error_uri
|
78
|
+
|
79
|
+
def initialize(error, error_reason = nil, error_uri = nil)
|
80
|
+
self.error = error
|
81
|
+
self.error_reason = error_reason
|
82
|
+
self.error_uri = error_uri
|
83
|
+
end
|
84
|
+
|
85
|
+
def message
|
86
|
+
[error, error_reason, error_uri].compact.join(' | ')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
OmniAuth.config.add_camelization 'indieauth', 'IndieAuth'
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: omniauth-indieauth
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Aaron Parecki
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-06-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: microformats2
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.0.1
|
30
|
+
description: IndieAuth adapter for OmniAuth
|
31
|
+
email:
|
32
|
+
- aaron@parecki.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- lib/omniauth-indieauth.rb
|
38
|
+
- lib/omniauth/strategies/indieauth.rb
|
39
|
+
- lib/omniauth-indieauth/version.rb
|
40
|
+
homepage: https://github.com/aaronpk/omniauth-indieauth
|
41
|
+
licenses:
|
42
|
+
- Apache 2.0
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.8.23
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: IndieAuth adapter for OmniAuth
|
65
|
+
test_files: []
|