omniauth-orcid 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source :rubygems
2
+
3
+ # Specify your gem's dependencies in omniauth-github.gemspec
4
+ gemspec
5
+
6
+
7
+
8
+ # These are development dependencies
9
+ gem "rake"
10
+ #gem "rspec", "2.0.0.beta.8"
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License
2
+
3
+ Copyright (C) 2012, Gudmundur A. Thorisson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
data/README.md CHANGED
@@ -2,12 +2,148 @@
2
2
 
3
3
  ORCID OAuth 2.0 Strategy for the wonderful [OmniAuth Ruby authentication framework](http://www.omniauth.org).
4
4
 
5
+ Provides basic support for connecting a client application to the [Open Researcher & Contributor ID registry service](http://about.orcid.org).
6
+
5
7
  Originally created for the [ORCID example client application in Rails](https://github.com/gthorisson/ORCID-example-client-app-rails), then turned into a gem.
6
8
 
7
- *Note: the gem comes configured to connected to the [ORCID sandbox service](http://devsandbox.orcid.org). Please update the parameters in ```:client_options``` to connect to the live service when it launches (see http://dev.orcid.org/launch)*
8
9
 
9
10
 
10
- *...stuff coming, patience plz....*
11
+ ## Installation
12
+
13
+ The usual way with Bundler: add the following to your `Gemfile` to install the current version of the gem:
14
+
15
+ ```ruby
16
+ gem 'omniauth-orcid'
17
+ ```
18
+
19
+ Or, if you're impatient, you can install straight from GitHub
20
+
21
+ ```ruby
22
+ gem 'omniauth-orcid' , :git => 'git://github.com/gthorisson/omniauth-orcid.git'
23
+ ```
24
+
25
+ Then run `bundle install` to install into your environment.
26
+
27
+ You can also install the gem system-wide:
28
+
29
+ ```bash
30
+ [mummi@nfmac07]gem install omniauth-orcid
31
+ ```
32
+
33
+ ## Getting started
34
+
35
+ Like other OmniAuth strategies, `OmniAuth::Strategies::ORCID` is a piece of Rack middleware. Please read the OmniAuth documentation for detailed instructions: https://github.com/intridea/omniauth.
36
+
37
+
38
+ By default the module connects to the live ORCID service. In the very simplest usage, all you have to provide are your client app credentials ([see more here](http://support.orcid.org/knowledgebase/articles/116739)):
39
+
40
+ ```ruby
41
+ use OmniAuth::Builder do
42
+ provider :orcid, ENV['ORCID_KEY'], ENV['ORCID_SECRET']
43
+ end
44
+ ```
45
+
46
+ You also have to implement a callback handler to grab user data after the OAuth handshake has been completed, and then do something cool with those data. Here's how to get going with a couple of popular Rack-based frameworks:
47
+
48
+
49
+ ### Sinatra
50
+
51
+
52
+ Configure the strategy and implement a callback routine in your app:
53
+
54
+ ```ruby
55
+ require 'sinatra'
56
+ require 'sinatra/config_file'
57
+ require 'omniauth-orcid'
58
+ enable :sessions
59
+
60
+ use OmniAuth::Builder do
61
+ provider :orcid, ENV['ORCID_KEY'], ENV['ORCID_SECRET']
62
+ end
63
+ ...
64
+ get '/auth/orcid/callback' do
65
+ session[:omniauth] = request.env['omniauth.auth']
66
+ redirect '/'
67
+ end
68
+
69
+ get '/' do
70
+
71
+ if session[:omniauth]
72
+ @orcid = session[:omniauth][:uid]
73
+ end
74
+ ..
75
+ ```
76
+
77
+ The bundled `demo.rb` file contains an uber-simple working Sinatra example app. Spin it up, point your browser to http://localhost:4567/ and play:
78
+
79
+ ```bash
80
+ gem install sinatra
81
+ ruby demo.rb
82
+ [2012-11-26 21:41:08] INFO WEBrick 1.3.1
83
+ [2012-11-26 21:41:08] INFO ruby 1.9.3 (2012-04-20) [x86_64-darwin11.3.0]
84
+ == Sinatra/1.3.2 has taken the stage on 4567 for development with backup from WEBrick
85
+ [2012-11-26 21:41:08] INFO WEBrick::HTTPServer#start: pid=8383 port=4567
86
+
87
+ ```
88
+
89
+
90
+ ### Rails
91
+
92
+
93
+ Add this to `config/initializers/omniauth.rb` to configure the strategy:
94
+
95
+ ```ruby
96
+ require 'omniauth-orcid'
97
+
98
+ Rails.application.config.middleware.use OmniAuth::Builder do
99
+ provider :orcid, ENV['ORCID_KEY'], ENV['ORCID_SECRET']
100
+ end
101
+ ```
102
+
103
+ Register a callback path in 'config/routes.rb'
104
+
105
+ ```ruby
106
+ ..
107
+ match '/auth/:provider/callback' => 'authentications#create'
108
+ ..
109
+ ```
110
+
111
+ Implement a callback handler method in a controller:
112
+
113
+ ```ruby
114
+ class AuthenticationsController < ApplicationController
115
+ ..
116
+ def create
117
+ omniauth = request.env["omniauth.auth"]
118
+ session[:omniauth] = omniauth
119
+ session[:params] = params
120
+ ..
121
+ end
122
+ ```
123
+
124
+
125
+
126
+ ## Configuration
127
+
128
+ You can also grab parameters from a config file (recommended) and pass to the strategy via the `:client_options` hash. Here's an example from the bundled Sinatra app in `demo.rb`:
129
+
130
+ ```ruby
131
+ config_file 'config.yml'
132
+ use OmniAuth::Builder do
133
+ provider :orcid, settings.client_id, settings.client_secret,
134
+ :client_options => {
135
+ :site => settings.site,
136
+ :authorize_url => settings.authorize_url,
137
+ :token_url => settings.token_url
138
+ }
139
+ end
140
+
141
+ ```
142
+
143
+ Different sets of params from `config.yml` are used for production environment (points to live ORCID service) vs. development environment (points to ORCID sandbox service).
144
+
145
+ You can d something similar with in Rails with the same config file, or something . See a working example here: https://github.com/gthorisson/ORCID-example-client-app-rails
146
+
11
147
 
12
148
 
13
149
  ## More information
data/config.yml ADDED
@@ -0,0 +1,15 @@
1
+ # Default endpoint URLs for the ORCID OAuth API
2
+
3
+ production:
4
+ site: https://api.orcid.org
5
+ authorize_url: https://orcid.org/oauth/authorize
6
+ token_url: https://api.orcid.org/oauth/token
7
+ client_id:
8
+ client_secret:
9
+
10
+ development:
11
+ site: http://api.devsandbox.orcid.org
12
+ authorize_url: http://devsandbox.orcid.org/oauth/authorize
13
+ token_url: http://api.devsandbox.orcid.org/oauth/token
14
+ client_id: 0000-0002-7649-0259
15
+ client_secret: 5a81472f-d318-4823-887a-ea64ac6f680a
data/demo.rb ADDED
@@ -0,0 +1,78 @@
1
+ # ORCID example client application in Sinatra.
2
+ # Modelled after this app: https://github.com/zuzara/jQuery-OAuth-Popup
3
+
4
+ require 'rubygems'
5
+ require 'sinatra'
6
+ require 'sinatra/config_file'
7
+ require 'haml'
8
+ require 'omniauth-orcid'
9
+ require 'json'
10
+
11
+ enable :sessions
12
+ use Rack::Session::Cookie
13
+
14
+ config_file 'config.yml'
15
+ if development?
16
+ puts "Sinatra running in development mode"
17
+ elsif production?
18
+ puts "Sinatra running in production mode"
19
+ end
20
+
21
+ puts "Connecting to ORCID API at " + settings.site + " as client app #{settings.client_id}"
22
+
23
+ # Configure the ORCID strategy
24
+ use OmniAuth::Builder do
25
+ provider :orcid, settings.client_id, settings.client_secret,
26
+ :client_options => {
27
+ :site => settings.site,
28
+ :authorize_url => settings.authorize_url,
29
+ :token_url => settings.token_url
30
+ }
31
+ end
32
+
33
+
34
+ get '/' do
35
+
36
+ @orcid = ''
37
+
38
+ if session[:omniauth]
39
+ @orcid = session[:omniauth][:uid]
40
+ end
41
+ haml <<-HTML
42
+ %html
43
+ %head
44
+ %title ORCID OmniAuth demo app
45
+ %body
46
+ - if session[:omniauth]
47
+ %p
48
+ Signed in with ORCiD <b>#{@orcid}</b>
49
+ %p
50
+ %a(href="/user_info")fetch user info as JSON
51
+ %p
52
+ %a(href="/signout") sign out
53
+ - else
54
+ %p
55
+ %a(href="/auth/orcid") Log in with my ORCiD
56
+ HTML
57
+ end
58
+
59
+
60
+ get '/user_info' do
61
+ content_type :json
62
+ session[:omniauth].to_json
63
+ end
64
+
65
+
66
+ get '/auth/orcid/callback' do
67
+ puts "Adding OmniAuth user info to session: " + request.env['omniauth.auth'].inspect
68
+ session[:omniauth] = request.env['omniauth.auth']
69
+ redirect '/'
70
+ end
71
+
72
+ get '/signout' do
73
+ session.clear
74
+ redirect '/'
75
+ end
76
+
77
+
78
+ __END__
@@ -6,13 +6,13 @@ module OmniAuth
6
6
  module Strategies
7
7
  class ORCID < OmniAuth::Strategies::OAuth2
8
8
 
9
- DEFAULT_SCOPE = '/orcid-bio/read-limited'
9
+ DEFAULT_SCOPE = '/orcid-bio/read-limited'
10
10
 
11
11
  option :client_options, {
12
- :site => 'http://api.devsandbox.orcid.org',
13
- :authorize_url => 'http://devsandbox.orcid.org/oauth/authorize',
12
+ :site => 'http://api.orcid.org',
13
+ :authorize_url => 'http://orcid.org/oauth/authorize',
14
14
  :token_url => 'http://api.devsandbox.orcid.org/oauth/token',
15
- :scope => '/orcid-profile/read-limited',
15
+ :scope => 'http://api.orcid.org/oauth/token',
16
16
  :response_type => 'code',
17
17
  :mode => :header
18
18
  }
@@ -30,7 +30,6 @@ module OmniAuth
30
30
  super.tap do |params|
31
31
  %w[scope].each { |v| params[v.to_sym] = request.params[v] if request.params[v] }
32
32
  params[:scope] ||= DEFAULT_SCOPE # ensure that we're always request *some* default scope
33
- Rails.logger.debug "Customizing authz params: " + params.inspect
34
33
  end
35
34
  end
36
35
  end
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module ORCID
3
- VERSION = "0.3"
3
+ VERSION = "0.4"
4
4
  end
5
5
  end
@@ -0,0 +1,22 @@
1
+ require File.expand_path("../lib/omniauth-orcid/version", __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.authors = ["Gudmundur A. Thorisson"]
5
+ s.email = %q{gthorisson@gmail.com}
6
+ s.name = "omniauth-orcid"
7
+ s.homepage = %q{https://github.com/gthorisson/omniauth-orcid}
8
+ s.summary = %q{ORCID OAuth 2.0 Strategy for OmniAuth 1.0}
9
+ s.date = Date.today
10
+ s.description = %q{Enables third-party client apps to connect to the ORCID API and access/update protected profile data }
11
+ s.files = Dir["{lib}/**/*.rb", "bin/*", "LICENSE.txt", "*.md", "Rakefile", "Gemfile", "demo.rb", "config.yml", "omniauth-orcid.gemspec"]
12
+ s.require_paths = ["lib"]
13
+ s.version = OmniAuth::ORCID::VERSION
14
+ s.extra_rdoc_files = ["README.md"]
15
+
16
+
17
+ # Declary dependencies here, rather than in the Gemfile
18
+ s.add_dependency 'omniauth', '~> 1.0'
19
+ s.add_dependency 'omniauth-oauth2', '~> 1.1'
20
+
21
+ end
22
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-orcid
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.4'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-06 00:00:00.000000000 Z
12
+ date: 2012-11-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: omniauth
@@ -44,7 +44,7 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  version: '1.1'
46
46
  description: ! 'Enables third-party client apps to connect to the ORCID API and access/update
47
- protected profiledata '
47
+ protected profile data '
48
48
  email: gthorisson@gmail.com
49
49
  executables: []
50
50
  extensions: []
@@ -54,8 +54,13 @@ files:
54
54
  - lib/omniauth/strategies/orcid.rb
55
55
  - lib/omniauth-orcid/version.rb
56
56
  - lib/omniauth-orcid.rb
57
+ - LICENSE.txt
57
58
  - README.md
58
59
  - Rakefile
60
+ - Gemfile
61
+ - demo.rb
62
+ - config.yml
63
+ - omniauth-orcid.gemspec
59
64
  homepage: https://github.com/gthorisson/omniauth-orcid
60
65
  licenses: []
61
66
  post_install_message: