openstax_api 5.4.1 → 5.4.2
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe4d093b6653d00d111551c80f7da820b55c26b2
|
4
|
+
data.tar.gz: 565ebe49772bf335c96888b845b79a350729d653
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b63f46064aba41549ba4da1c313105f9a183ee48b77798c3e126912e37309c9e455ceff695f0b467c0a5bce7db3a12030c4261b70520d1099fdd9767c24269df
|
7
|
+
data.tar.gz: 5eaa288ed181f73230f274c71783827fc0a055af6a52c3907091f4778a82f0424e7eda89a1a7618edbf88d39932959f2079b2c4694c4fa1da4c8b7234e771f43
|
@@ -8,25 +8,29 @@ module OpenStax
|
|
8
8
|
include OpenStax::Api::Roar
|
9
9
|
include OpenStax::Api::Apipie
|
10
10
|
|
11
|
-
before_action :doorkeeper_authorize!, :unless => :session_user?
|
12
|
-
skip_before_filter :verify_authenticity_token, :unless => :session_user?
|
13
|
-
|
14
11
|
respond_to :json
|
15
12
|
|
13
|
+
# Always force JSON requests and send the Date header in the response
|
16
14
|
before_filter :force_json_content_type
|
17
15
|
after_filter :set_date_header
|
18
16
|
|
17
|
+
# Doorkeeper is used and CSRF protection is disabled only if a token is present
|
18
|
+
before_filter :doorkeeper_authorize!, if: :token_user?
|
19
|
+
skip_before_filter :verify_authenticity_token, if: :token_user?
|
20
|
+
|
21
|
+
# CORS is enabled unless the user is logged in via a cookie
|
22
|
+
before_filter :set_cors_preflight_headers, unless: :session_user?
|
23
|
+
after_filter :set_cors_headers, unless: :session_user?
|
24
|
+
|
19
25
|
# Keep old current_user method so we can use it
|
20
|
-
alias_method :current_session_user,
|
21
|
-
OpenStax::Api.configuration.current_user_method
|
26
|
+
alias_method :current_session_user, OpenStax::Api.configuration.current_user_method
|
22
27
|
|
23
28
|
# Ensure we will never again confuse human users and api users
|
24
29
|
undef_method OpenStax::Api.configuration.current_user_method
|
25
30
|
|
26
31
|
# Always return an ApiUser
|
27
32
|
def current_api_user
|
28
|
-
@current_api_user ||= ApiUser.new(doorkeeper_token,
|
29
|
-
lambda { current_session_user })
|
33
|
+
@current_api_user ||= ApiUser.new(doorkeeper_token, lambda { current_session_user })
|
30
34
|
end
|
31
35
|
|
32
36
|
def current_application
|
@@ -40,11 +44,14 @@ module OpenStax
|
|
40
44
|
protected
|
41
45
|
|
42
46
|
def session_user?
|
43
|
-
|
47
|
+
!current_session_user.nil? && \
|
48
|
+
(!current_session_user.respond_to?(:is_anonymous?) || \
|
49
|
+
!current_session_user.is_anonymous?) && \
|
50
|
+
doorkeeper_token.nil?
|
44
51
|
end
|
45
52
|
|
46
|
-
def
|
47
|
-
|
53
|
+
def token_user?
|
54
|
+
!doorkeeper_token.nil?
|
48
55
|
end
|
49
56
|
|
50
57
|
def force_json_content_type
|
@@ -53,6 +60,24 @@ module OpenStax
|
|
53
60
|
request.env['action_dispatch.request.content_type'] = 'application/json'
|
54
61
|
end
|
55
62
|
|
63
|
+
def set_date_header
|
64
|
+
response.date = Time.now unless response.date?
|
65
|
+
end
|
66
|
+
|
67
|
+
def set_cors_preflight_headers
|
68
|
+
if request.method == 'OPTIONS'
|
69
|
+
headers['Access-Control-Allow-Origin'] = '*'
|
70
|
+
headers['Access-Control-Allow-Methods'] = 'GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS'
|
71
|
+
headers['Access-Control-Max-Age'] = '1728000'
|
72
|
+
|
73
|
+
render :text => '', :content_type => 'text/plain'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def set_cors_headers
|
78
|
+
headers['Access-Control-Allow-Origin'] = '*'
|
79
|
+
end
|
80
|
+
|
56
81
|
end
|
57
82
|
|
58
83
|
end
|
data/lib/openstax/api/version.rb
CHANGED
@@ -106,11 +106,29 @@ module OpenStax
|
|
106
106
|
get 'dummy'
|
107
107
|
expect(Time.parse(response.headers['Date'])).to be_within(1.second).of(Time.now)
|
108
108
|
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'cors' do
|
112
|
+
before(:each) do
|
113
|
+
instance_variable_set('@controller', dummy_controller)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'sets the CORS headers for anonymous users' do
|
117
|
+
get 'dummy'
|
118
|
+
expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'sets the CORS headers for token users' do
|
122
|
+
token = Doorkeeper::AccessToken.create!.token
|
123
|
+
@request.headers['Authorization'] = "Bearer #{token}"
|
124
|
+
get 'dummy'
|
125
|
+
expect(response.headers['Access-Control-Allow-Origin']).to eq '*'
|
126
|
+
end
|
109
127
|
|
110
|
-
it 'does not set the
|
128
|
+
it 'does not set the CORS headers for session users' do
|
129
|
+
@controller.present_user = user
|
111
130
|
get 'dummy'
|
112
|
-
expect(response.headers['
|
113
|
-
expect(response.headers).not_to have_key('Date')
|
131
|
+
expect(response.headers['Access-Control-Allow-Origin']).to be_nil
|
114
132
|
end
|
115
133
|
end
|
116
134
|
|
data/spec/dummy/db/test.sqlite3
CHANGED
Binary file
|