model_driven_api 2.2.9 → 2.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/commands/authenticate_user.rb +2 -2
- data/app/controllers/api/v2/application_controller.rb +31 -4
- data/lib/model_driven_api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3732e187808e98168a540463302b48f5c790b636ec3058d8fe1d1368fe8d00c
|
4
|
+
data.tar.gz: e3cc94ae51641832ad46712014fd5519937d1d2533e1c8866e1fd04a9372f57a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cb118e13b3362bd98396a5cf639ba3de1f8e5e161c36e21f04f9bbfacb7c722a985aef6baf5a249fe12fc6ba4572c62277905cdeb148c4b42742abf069b0726
|
7
|
+
data.tar.gz: 3dddb43d8f95f6203523ef3d770867682179e5d8abc04838bd42ef5809c91b1f458093c799ddee7d3758a008560f6802315b90fce0d9b83b71ff3272849cdea5
|
data/README.md
CHANGED
@@ -422,7 +422,7 @@ Once loaded the tests inside the insomnia application, please right click on the
|
|
422
422
|
|
423
423
|
## TODO
|
424
424
|
|
425
|
-
*
|
425
|
+
* Document the new feature (from version 2.3.3) to add Authentication methods which override the JWT described above. Useful for Webhooks and machine2machine trusted dialogues.
|
426
426
|
|
427
427
|
## References
|
428
428
|
Thanks to all these people for ideas:
|
@@ -21,7 +21,7 @@ class Api::V2::ApplicationController < ActionController::API
|
|
21
21
|
|
22
22
|
# Normal Index Action with Ransack querying
|
23
23
|
@q = (@model.column_names.include?("user_id") ? @model.where(user_id: current_user.id) : @model).ransack(@query.presence|| params[:q])
|
24
|
-
@records_all = @q.result(distinct: true)
|
24
|
+
@records_all = @q.result # (distinct: true) Removing, but I'm not sure, with it I cannot sort in postgres for associated records (throws an exception on misuse of sort with distinct)
|
25
25
|
page = (@page.presence || params[:page])
|
26
26
|
per = (@per.presence || params[:per])
|
27
27
|
pages_info = (@pages_info.presence || params[:pages_info])
|
@@ -107,15 +107,34 @@ class Api::V2::ApplicationController < ActionController::API
|
|
107
107
|
# call an unwanted method in the AR Model.
|
108
108
|
resource = "custom_action_#{params[:do]}"
|
109
109
|
raise NoMethodError unless @model.respond_to?(resource)
|
110
|
-
return true, MultiJson.dump(params[:id].blank? ? @model.send(resource, params) : @model.send(resource, params[:id].to_i, params))
|
110
|
+
# return true, MultiJson.dump(params[:id].blank? ? @model.send(resource, params) : @model.send(resource, params[:id].to_i, params))
|
111
|
+
return true, MultiJson.dump(@model.send(resource, params))
|
111
112
|
end
|
112
113
|
# if it's here there is no custom action in the request querystring
|
113
114
|
return false
|
114
115
|
end
|
116
|
+
|
117
|
+
def class_exists?(class_name)
|
118
|
+
klass = Module.const_get(class_name)
|
119
|
+
return klass.is_a?(Class)
|
120
|
+
rescue NameError
|
121
|
+
return false
|
122
|
+
end
|
115
123
|
|
116
124
|
def authenticate_request
|
117
|
-
|
118
|
-
|
125
|
+
# puts request.headers.inspect
|
126
|
+
@current_user = nil
|
127
|
+
# puts "Are there wbehooks headers to check for? #{Settings.ns(:security).allowed_authorization_headers}"
|
128
|
+
Settings.ns(:security).allowed_authorization_headers.split(",").each do |header|
|
129
|
+
# puts "Found header #{header}: #{request.headers[header.underscore.dasherize]}"
|
130
|
+
check_authorization("Authorize#{header}".constantize.call(request.headers, request.raw_post)) if request.headers[header.underscore.dasherize]
|
131
|
+
end
|
132
|
+
return unauthenticated!(OpenStruct.new({message: @auth_errors})) unless @current_user
|
133
|
+
|
134
|
+
# This is the default one, if the header doesn't have a valid form for one of the other Auth methods, then use this Auth Class
|
135
|
+
check_authorization AuthorizeApiRequest.call(request.headers) unless @current_user
|
136
|
+
return unauthenticated!(OpenStruct.new({message: @auth_errors})) unless @current_user
|
137
|
+
|
119
138
|
current_user = @current_user
|
120
139
|
params[:current_user_id] = @current_user.id
|
121
140
|
# Now every time the user fires off a successful GET request,
|
@@ -147,6 +166,14 @@ class Api::V2::ApplicationController < ActionController::API
|
|
147
166
|
return not_found! if (!@model.new.is_a? ActiveRecord::Base rescue false)
|
148
167
|
end
|
149
168
|
|
169
|
+
def check_authorization cmd
|
170
|
+
if cmd.success?
|
171
|
+
@current_user = cmd.result
|
172
|
+
else
|
173
|
+
@auth_errors = cmd.errors
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
150
177
|
# Nullifying strong params for API
|
151
178
|
def params
|
152
179
|
request.parameters
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: model_driven_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriele Tassoni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thecore_backend_commons
|