openstax_connect 0.0.10 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +26 -9
- data/Rakefile +12 -39
- data/app/controllers/openstax/connect/application_controller.rb +15 -4
- data/app/controllers/openstax/connect/dev/dev_controller.rb +1 -4
- data/app/controllers/openstax/connect/dev/users_controller.rb +5 -0
- data/app/controllers/openstax/connect/sessions_controller.rb +9 -19
- data/app/handlers/openstax/connect/sessions_omniauth_authenticated.rb +4 -1
- data/app/views/openstax/connect/dev/users/login.html.erb +2 -2
- data/app/views/openstax/connect/dev/users/search.js.erb +1 -1
- data/config/initializers/{02_extend_builtins.rb → extend_builtins.rb} +0 -0
- data/config/routes.rb +11 -6
- data/db/migrate/20140410194004_add_fields_to_openstax_connect_users.rb +7 -0
- data/lib/omniauth/strategies/openstax.rb +15 -6
- data/lib/openstax/connect/current_user_manager.rb +3 -3
- data/lib/openstax/connect/engine.rb +1 -4
- data/lib/openstax/connect/inflections.rb +3 -0
- data/lib/openstax/connect/version.rb +1 -1
- data/lib/openstax_connect.rb +52 -6
- data/spec/controllers/openstax/connect/dev/users_controller_spec.rb +20 -0
- data/spec/controllers/openstax/connect/sessions_controller_spec.rb +21 -7
- data/spec/dummy/README.md +1 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/api/application_users_controller.rb +7 -0
- data/spec/dummy/app/controllers/api/dummy_controller.rb +11 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +53 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +69 -0
- data/spec/dummy/config/environments/test.rb +35 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/openstax_connect.rb +11 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +11 -0
- data/spec/dummy/db/schema.rb +31 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/lib/openstax_connect_spec.rb +24 -0
- data/spec/models/openstax/connect/user_spec.rb +7 -1
- data/spec/spec_helper.rb +7 -4
- metadata +109 -17
- data/app/assets/javascripts/openstax/connect/sessions.js +0 -2
- data/app/assets/stylesheets/openstax/connect/sessions.css +0 -4
- data/app/helpers/openstax/connect/sessions_helper.rb +0 -4
- data/config/initializers/01_requires.rb +0 -1
- data/lib/openstax/connect/exceptions.rb +0 -3
- data/lib/tasks/connect-rails_tasks.rake +0 -4
- data/spec/helpers/openstax/connect/sessions_helper_spec.rb +0 -17
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
connect-rails
|
2
2
|
=============
|
3
3
|
|
4
|
-
A rails engine for interfacing with OpenStax's common
|
4
|
+
A rails engine for interfacing with OpenStax's common accounts server.
|
5
5
|
|
6
6
|
Usage
|
7
7
|
-----
|
@@ -21,13 +21,13 @@ You can use whatever path you want instead of `/connect`, just make sure to make
|
|
21
21
|
Create an `openstax_connect.rb` initializer in `config/initializers`, with the following contents:
|
22
22
|
|
23
23
|
OpenStax::Connect.configure do |config|
|
24
|
-
config.openstax_application_id = '
|
25
|
-
config.openstax_application_secret = '
|
24
|
+
config.openstax_application_id = 'value_from_openstax_accounts_here'
|
25
|
+
config.openstax_application_secret = 'value_from_openstax_accounts_here'
|
26
26
|
end
|
27
27
|
|
28
|
-
If you're running OpenStax
|
28
|
+
If you're running OpenStax Accounts in a dev instance on your machine, you can specify that instance's local URL with:
|
29
29
|
|
30
|
-
config.
|
30
|
+
config.openstax_accounts_url = 'http://localhost:2999/'
|
31
31
|
|
32
32
|
To have users login, direct them to `/connect/sessions/new`. This is also available through the `openstax_connect.login` route helper, e.g. `<%= link_to 'Sign in!', openstax_connect.login_path %>`.
|
33
33
|
|
@@ -75,13 +75,30 @@ Make sure to install the engine's migrations:
|
|
75
75
|
|
76
76
|
rake openstax_connect:install:migrations
|
77
77
|
|
78
|
+
Accounts API
|
79
|
+
------------
|
80
|
+
|
81
|
+
OpenStax::Connect provides convenience methods for accessing the OpenStax Accounts API.
|
82
|
+
|
83
|
+
`OpenStax::Connect.create_application_user(user, version = nil)` takes
|
84
|
+
an OpenStax::Connect::User and, optionally, an API version argument, and creates
|
85
|
+
an ApplicationUser for the configured application and the given user. Call this method
|
86
|
+
when users finish the registration process in your app.
|
87
|
+
|
88
|
+
`OpenStax::Connect.api_call(http_method, url, options = {})` provides a generic
|
89
|
+
convenience method capable of making API calls to Accounts. `http_method` can be
|
90
|
+
any valid HTTP method, and `url` is the desired API URL, without the 'api/' prefix.
|
91
|
+
Options is a hash that can contain any option that OAuth2 requests accept, such
|
92
|
+
as :headers, :params, :body, etc, plus the optional values :api_version (to specify
|
93
|
+
an API version) and :access_token (to specify an OAuth access token).
|
94
|
+
|
78
95
|
Example Application
|
79
96
|
-------------------
|
80
97
|
|
81
98
|
There is an example application included in the gem in the `example` folder. Here are steps
|
82
99
|
to follow:
|
83
100
|
|
84
|
-
1. Download (clone) the OpenStax
|
101
|
+
1. Download (clone) the OpenStax Accounts site from github.com/openstax/accounts.
|
85
102
|
1. In the site's `config` folder put a `secret_settings.yml` file that has values for the
|
86
103
|
following keys: `facebook_app_id`, `facebook_app_secret`, `twitter_consumer_key`, `twitter_consumer_secret`. If you
|
87
104
|
don't have access to these values, you can always make dummy apps on facebook and twitter.
|
@@ -89,7 +106,7 @@ don't have access to these values, you can always make dummy apps on facebook an
|
|
89
106
|
1. Run `bundle install --without production`
|
90
107
|
2. Run `bundle exec rake db:migrate`
|
91
108
|
3. Run `bundle exec rails server`
|
92
|
-
2. Open this
|
109
|
+
2. Open this accounts site in a web browser (defaults to http://localhost:2999)
|
93
110
|
3. Navigate to http://localhost:2999/oauth/applications
|
94
111
|
4. Click `New application`
|
95
112
|
5. Set the callback URL to `http://localhost:4000/connect/auth/openstax/callback`.
|
@@ -98,9 +115,9 @@ Port 4000 is where you'll be running the example application.
|
|
98
115
|
2. Click the `Trusted?` checkbox.
|
99
116
|
3. Click `Submit`.
|
100
117
|
4. Keep this window open so you can copy the application ID and secret into the example app
|
101
|
-
5. Leave the
|
118
|
+
5. Leave the accounts app running
|
102
119
|
6. Download (clone) the OpenStax Connect gem from github.com/openstax/connect-rails. The
|
103
120
|
example application is in the `example` folder. In that folder's config folder, create a `secret_settings.yml` file
|
104
121
|
according to the instructions in `secret_settings.yml.example`. Run the example server in the normal way (bundle install..., migrate db, rails server).
|
105
|
-
7. Navigate to the home page, http://localhost:4000. Click log in and play around. You can also refresh the
|
122
|
+
7. Navigate to the home page, http://localhost:4000. Click log in and play around. You can also refresh the accounts site and see yourself logged in, log out, etc.
|
106
123
|
8. For fun, change example/config/openstax_connect.rb to set `enable_stubbing` to `true`. Now when you click login you'll be taken to a developer-only page where you can login as other users, generate new users, create new users, etc.
|
data/Rakefile
CHANGED
@@ -1,49 +1,22 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
|
3
|
-
|
3
|
+
begin
|
4
|
+
require 'bundler/setup'
|
5
|
+
rescue LoadError
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
# rescue LoadError
|
8
|
-
# puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
9
|
-
# end
|
10
|
-
# begin
|
11
|
-
# require 'rdoc/task'
|
12
|
-
# rescue LoadError
|
13
|
-
# require 'rdoc/rdoc'
|
14
|
-
# require 'rake/rdoctask'
|
15
|
-
# RDoc::Task = Rake::RDocTask
|
16
|
-
# end
|
9
|
+
APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
|
10
|
+
load 'rails/tasks/engine.rake'
|
17
11
|
|
18
|
-
|
19
|
-
# rdoc.rdoc_dir = 'rdoc'
|
20
|
-
# rdoc.title = 'OpenstaxConnect'
|
21
|
-
# rdoc.options << '--line-numbers'
|
22
|
-
# rdoc.rdoc_files.include('README.rdoc')
|
23
|
-
# rdoc.rdoc_files.include('lib/**/*.rb')
|
24
|
-
# end
|
12
|
+
Bundler::GemHelper.install_tasks
|
25
13
|
|
26
|
-
|
27
|
-
# load 'rails/tasks/engine.rake'
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# Bundler::GemHelper.install_tasks
|
32
|
-
|
33
|
-
# require 'rake/testtask'
|
34
|
-
|
35
|
-
# Rake::TestTask.new(:test) do |t|
|
36
|
-
# t.libs << 'lib'
|
37
|
-
# t.libs << 'test'
|
38
|
-
# t.pattern = 'test/**/*_test.rb'
|
39
|
-
# t.verbose = false
|
40
|
-
# end
|
41
|
-
|
42
|
-
|
43
|
-
# task :default => :test
|
14
|
+
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
|
44
15
|
|
16
|
+
require 'rspec/core'
|
45
17
|
require 'rspec/core/rake_task'
|
46
18
|
|
47
|
-
|
19
|
+
desc 'Run all specs in spec directory (excluding plugin specs)'
|
20
|
+
RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
|
48
21
|
|
49
22
|
task :default => :spec
|
@@ -1,12 +1,23 @@
|
|
1
|
-
# References:
|
2
|
-
# http://edgeguides.rubyonrails.org/engines.html#using-a-class-provided-by-the-application
|
3
|
-
|
4
1
|
module OpenStax
|
5
2
|
module Connect
|
6
3
|
|
7
|
-
# Inherit from the applications ApplicationController to share some methods
|
8
4
|
class ApplicationController < ActionController::Base
|
9
5
|
include Lev::HandleWith
|
6
|
+
|
7
|
+
# Override current_user to always return an OpenStax::Connect::User
|
8
|
+
def current_user
|
9
|
+
current_user_manager.connect_current_user
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def return_url(include_referrer=false)
|
15
|
+
referrer = include_referrer ? request.referrer : nil
|
16
|
+
# Always clear the session
|
17
|
+
session_return_to = session.delete(:return_to)
|
18
|
+
params[:return_to] || session_return_to || referrer || main_app.root_url
|
19
|
+
end
|
20
|
+
|
10
21
|
end
|
11
22
|
|
12
23
|
end
|
@@ -5,11 +5,8 @@ module OpenStax
|
|
5
5
|
module Dev
|
6
6
|
class DevController < ApplicationController
|
7
7
|
|
8
|
-
skip_before_filter :authenticate_user!
|
9
|
-
|
10
8
|
before_filter Proc.new{
|
11
|
-
raise SecurityTransgression
|
12
|
-
current_user.is_administrator?
|
9
|
+
raise SecurityTransgression if Rails.env.production?
|
13
10
|
}
|
14
11
|
|
15
12
|
end
|
@@ -4,29 +4,32 @@ module OpenStax
|
|
4
4
|
module Connect
|
5
5
|
class SessionsController < ApplicationController
|
6
6
|
|
7
|
-
skip_before_filter :authenticate_user!
|
8
|
-
|
9
7
|
def new
|
8
|
+
session[:return_to] ||= request.referrer
|
10
9
|
redirect_to RouteHelper.get_path(:login)
|
11
10
|
end
|
12
11
|
|
13
12
|
def omniauth_authenticated
|
14
13
|
handle_with(SessionsOmniauthAuthenticated,
|
15
|
-
|
14
|
+
success: lambda {
|
16
15
|
sign_in(@handler_result.outputs[:connect_user_to_sign_in])
|
17
|
-
|
16
|
+
# referrer is in Accounts, so don't include it
|
17
|
+
redirect_to return_url
|
18
|
+
},
|
19
|
+
failure: lambda {
|
20
|
+
failure
|
18
21
|
})
|
19
22
|
end
|
20
23
|
|
21
24
|
def destroy
|
22
25
|
sign_out!
|
23
26
|
|
24
|
-
# If we're using the
|
27
|
+
# If we're using the Accounts server, need to sign out of it so can't
|
25
28
|
# log back in automagically
|
26
29
|
redirect_to OpenStax::Connect.configuration.enable_stubbing? ?
|
27
30
|
return_url :
|
28
31
|
OpenStax::Utilities.generate_url(
|
29
|
-
OpenStax::Connect.configuration.
|
32
|
+
OpenStax::Connect.configuration.openstax_accounts_url + "/logout",
|
30
33
|
return_to: return_url
|
31
34
|
)
|
32
35
|
end
|
@@ -35,19 +38,6 @@ module OpenStax
|
|
35
38
|
redirect_to return_url, alert: "Authentication failed, please try again."
|
36
39
|
end
|
37
40
|
|
38
|
-
def become
|
39
|
-
raise SecurityTransgression unless !Rails.env.production? || current_user.is_administrator?
|
40
|
-
sign_in(User.find(params[:user_id]))
|
41
|
-
redirect_to return_url(true)
|
42
|
-
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
|
46
|
-
def return_url(include_referrer=false)
|
47
|
-
referrer = include_referrer ? request.referrer : nil
|
48
|
-
params[:return_to] || session.delete(:return_to) || referrer || main_app.root_url
|
49
|
-
end
|
50
|
-
|
51
41
|
end
|
52
42
|
end
|
53
43
|
end
|
@@ -28,9 +28,12 @@ module OpenStax::Connect
|
|
28
28
|
|
29
29
|
new_user = User.create do |user|
|
30
30
|
user.openstax_uid = @auth_data.uid
|
31
|
-
user.username = @auth_data.info.
|
31
|
+
user.username = @auth_data.info.nickname
|
32
32
|
user.first_name = @auth_data.info.first_name
|
33
33
|
user.last_name = @auth_data.info.last_name
|
34
|
+
user.full_name = @auth_data.info.name
|
35
|
+
user.title = @auth_data.info.title
|
36
|
+
user.access_token = @auth_data.credentials.token
|
34
37
|
end
|
35
38
|
|
36
39
|
transfer_errors_from(new_user, {type: :verbatim})
|
@@ -7,10 +7,10 @@
|
|
7
7
|
|
8
8
|
<%= osu.section_block "Development Login" do %>
|
9
9
|
|
10
|
-
<p>You need to login, but we're not connected to the
|
10
|
+
<p>You need to login, but we're not connected to the Accounts server. Search for a user below
|
11
11
|
and click the sign in link next to him or her.</p>
|
12
12
|
|
13
|
-
<%= render 'openstax/connect/users/action_search', action_search_path:
|
13
|
+
<%= render 'openstax/connect/users/action_search', action_search_path: search_dev_users_path %>
|
14
14
|
|
15
15
|
<% end %>
|
16
16
|
|
File without changes
|
data/config/routes.rb
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
OpenStax::Connect::Engine.routes.draw do
|
2
2
|
match '/auth/openstax/callback', to: 'sessions#omniauth_authenticated' #omniauth route
|
3
3
|
get '/auth/openstax', :as => 'openstax_login'
|
4
|
+
|
4
5
|
get 'sessions/new', :as => 'login'
|
5
|
-
post 'sessions/become'
|
6
|
-
|
7
6
|
# See https://github.com/plataformatec/devise/commit/f3385e96abf50e80d2ae282e1fb9bdad87a83d3c
|
8
|
-
match 'sessions/destroy', :as => 'logout',
|
7
|
+
match 'sessions/destroy', :as => 'logout',
|
8
|
+
:via => OpenStax::Connect.configuration.logout_via
|
9
9
|
|
10
10
|
if OpenStax::Connect.configuration.enable_stubbing?
|
11
11
|
namespace :dev do
|
12
|
-
|
13
|
-
|
12
|
+
resources :users, :only => [] do
|
13
|
+
collection do
|
14
|
+
get 'login'
|
15
|
+
post 'search'
|
16
|
+
post 'become'
|
17
|
+
end
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
@@ -20,7 +25,7 @@ module OpenStax
|
|
20
25
|
module Connect
|
21
26
|
hh = Engine.routes.url_helpers
|
22
27
|
|
23
|
-
RouteHelper.register_path(:login, hh.openstax_login_path) { hh.
|
28
|
+
RouteHelper.register_path(:login, hh.openstax_login_path) { hh.login_dev_users_path }
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
@@ -7,18 +7,27 @@ module OmniAuth
|
|
7
7
|
option :name, "openstax"
|
8
8
|
|
9
9
|
option :client_options, {
|
10
|
-
:site => OpenStax::Connect.configuration.
|
10
|
+
:site => OpenStax::Connect.configuration.openstax_accounts_url,
|
11
11
|
:authorize_url => "/oauth/authorize"
|
12
12
|
}
|
13
13
|
|
14
|
-
uid
|
14
|
+
uid { raw_info["id"] }
|
15
15
|
|
16
16
|
info do
|
17
|
+
username = raw_info["username"]
|
18
|
+
title = raw_info["title"]
|
19
|
+
first_name = raw_info["first_name"]
|
20
|
+
last_name = raw_info["last_name"]
|
21
|
+
full_name = raw_info["full_name"] || "#{first_name} #{last_name}"
|
22
|
+
full_name = username if full_name.blank?
|
23
|
+
|
24
|
+
# Changed to conform to the omniauth schema
|
17
25
|
{
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
26
|
+
name: full_name,
|
27
|
+
nickname: username,
|
28
|
+
first_name: first_name,
|
29
|
+
last_name: last_name,
|
30
|
+
title: title
|
22
31
|
}
|
23
32
|
end
|
24
33
|
|
@@ -34,13 +34,13 @@ module OpenStax::Connect
|
|
34
34
|
!connect_current_user.is_anonymous?
|
35
35
|
end
|
36
36
|
|
37
|
-
protected
|
38
|
-
|
39
37
|
# Returns the current connect user
|
40
38
|
def connect_current_user
|
41
39
|
load_current_users
|
42
40
|
@connect_current_user
|
43
|
-
end
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
44
|
|
45
45
|
# If they are nil (unset), sets the current users based on the session state
|
46
46
|
def load_current_users
|
data/lib/openstax_connect.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
+
require "lev"
|
1
2
|
require "openstax/connect/version"
|
2
|
-
require "openstax/connect/exceptions"
|
3
3
|
require "openstax/connect/engine"
|
4
4
|
require "openstax/connect/utilities"
|
5
5
|
require "openstax/connect/route_helper"
|
@@ -25,7 +25,7 @@ module OpenStax
|
|
25
25
|
# end
|
26
26
|
#
|
27
27
|
# Set enable_stubbing to true iff you want this engine to fake all
|
28
|
-
# interaction with the
|
28
|
+
# interaction with the accounts site.
|
29
29
|
#
|
30
30
|
|
31
31
|
def configure
|
@@ -40,7 +40,7 @@ module OpenStax
|
|
40
40
|
attr_accessor :openstax_application_id
|
41
41
|
attr_accessor :openstax_application_secret
|
42
42
|
attr_accessor :enable_stubbing
|
43
|
-
attr_reader :
|
43
|
+
attr_reader :openstax_accounts_url
|
44
44
|
attr_accessor :logout_via
|
45
45
|
attr_accessor :default_errors_partial
|
46
46
|
attr_accessor :default_errors_html_id
|
@@ -50,16 +50,16 @@ module OpenStax
|
|
50
50
|
# See the "user_provider" discussion in the README
|
51
51
|
attr_accessor :user_provider
|
52
52
|
|
53
|
-
def
|
53
|
+
def openstax_accounts_url=(url)
|
54
54
|
url.gsub!(/https|http/,'https') if !(url =~ /localhost/)
|
55
55
|
url = url + "/" if url[url.size-1] != '/'
|
56
|
-
@
|
56
|
+
@openstax_accounts_url = url
|
57
57
|
end
|
58
58
|
|
59
59
|
def initialize
|
60
60
|
@openstax_application_id = 'SET ME!'
|
61
61
|
@openstax_application_secret = 'SET ME!'
|
62
|
-
@
|
62
|
+
@openstax_accounts_url = 'https://accounts.openstax.org/'
|
63
63
|
@enable_stubbing = true
|
64
64
|
@logout_via = :get
|
65
65
|
@default_errors_partial = 'openstax/connect/shared/attention'
|
@@ -75,6 +75,52 @@ module OpenStax
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
# Executes an OpenStax Accounts API call, using the given HTTP method,
|
79
|
+
# API url and request options.
|
80
|
+
# Any options accepted by OAuth2 requests can be used, such as
|
81
|
+
# :params, :body, :headers, etc, plus the :access_token option, which can
|
82
|
+
# be used to manually specify an OAuth access token.
|
83
|
+
# On failure, it can throw Faraday::ConnectionFailed for connection errors
|
84
|
+
# or OAuth2::Error if Accounts returns an HTTP 400 error,
|
85
|
+
# such as 422 Unprocessable Entity.
|
86
|
+
# On success, returns an OAuth2::Response object.
|
87
|
+
def api_call(http_method, url, options = {})
|
88
|
+
version = options.delete(:api_version)
|
89
|
+
unless version.blank?
|
90
|
+
options[:headers] ||= {}
|
91
|
+
options[:headers].merge!({ 'Accept' => "application/vnd.accounts.openstax.#{version.to_s}" })
|
92
|
+
end
|
93
|
+
|
94
|
+
token_string = options.delete(:access_token)
|
95
|
+
token = token_string.blank? ? client.client_credentials.get_token :
|
96
|
+
OAuth2::AccessToken.new(client, token_string)
|
97
|
+
|
98
|
+
api_url = URI.join(configuration.openstax_accounts_url, 'api/', url)
|
99
|
+
|
100
|
+
token.request(http_method, api_url, options)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Creates an ApplicationUser in Accounts for this app and the given
|
104
|
+
# OpenStax::Connect::User.
|
105
|
+
# Also takes an optional API version parameter. Defaults to :v1.
|
106
|
+
# On failure, throws an Exception, just like api_call.
|
107
|
+
# On success, returns an OAuth2::Response object.
|
108
|
+
def create_application_user(user, version = nil)
|
109
|
+
options = {:access_token => user.access_token,
|
110
|
+
:api_version => (version.nil? ? :v1 : version)}
|
111
|
+
api_call(:post, 'application_users', options)
|
112
|
+
end
|
113
|
+
|
114
|
+
protected
|
115
|
+
|
116
|
+
def client
|
117
|
+
@client ||= OAuth2::Client.new(
|
118
|
+
configuration.openstax_application_id,
|
119
|
+
configuration.openstax_application_secret,
|
120
|
+
:site => configuration.openstax_accounts_url
|
121
|
+
)
|
122
|
+
end
|
123
|
+
|
78
124
|
end
|
79
125
|
|
80
126
|
end
|