projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '16850-s3-keycount'
[arvados.git]
/
services
/
api
/
app
/
controllers
/
application_controller.rb
diff --git
a/services/api/app/controllers/application_controller.rb
b/services/api/app/controllers/application_controller.rb
index fbf177b01f4cf42be2678808fb28327d845b46e8..2644a06579787082d8e1c7421a5288a085450684 100644
(file)
--- a/
services/api/app/controllers/application_controller.rb
+++ b/
services/api/app/controllers/application_controller.rb
@@
-53,6
+53,7
@@
class ApplicationController < ActionController::Base
before_action :reload_object_before_update, :only => :update
before_action(:render_404_if_no_object,
except: [:index, :create] + ERROR_ACTIONS)
before_action :reload_object_before_update, :only => :update
before_action(:render_404_if_no_object,
except: [:index, :create] + ERROR_ACTIONS)
+ before_action :only_admin_can_bypass_federation
attr_writer :resource_attrs
attr_writer :resource_attrs
@@
-62,7
+63,6
@@
class ApplicationController < ActionController::Base
:with => :render_error)
rescue_from(ActiveRecord::RecordNotFound,
ActionController::RoutingError,
:with => :render_error)
rescue_from(ActiveRecord::RecordNotFound,
ActionController::RoutingError,
- ActionController::UnknownController,
AbstractController::ActionNotFound,
:with => :render_not_found)
end
AbstractController::ActionNotFound,
:with => :render_not_found)
end
@@
-139,6
+139,12
@@
class ApplicationController < ActionController::Base
render_not_found "Object not found" if !@object
end
render_not_found "Object not found" if !@object
end
+ def only_admin_can_bypass_federation
+ unless !params[:bypass_federation] || current_user.andand.is_admin
+ send_error("The bypass_federation parameter is only permitted when current user is admin", status: 403)
+ end
+ end
+
def render_error(e)
logger.error e.inspect
if e.respond_to? :backtrace and e.backtrace
def render_error(e)
logger.error e.inspect
if e.respond_to? :backtrace and e.backtrace
@@
-354,7
+360,7
@@
class ApplicationController < ActionController::Base
%w(created_at modified_by_client_uuid modified_by_user_uuid modified_at).each do |x|
@attrs.delete x.to_sym
end
%w(created_at modified_by_client_uuid modified_by_user_uuid modified_at).each do |x|
@attrs.delete x.to_sym
end
- @attrs = @attrs.symbolize_keys if @attrs.is_a? HashWithIndifferentAccess
+ @attrs = @attrs.symbolize_keys if @attrs.is_a?
ActiveSupport::
HashWithIndifferentAccess
@attrs
end
@attrs
end
@@
-486,12
+492,20
@@
class ApplicationController < ActionController::Base
# Go code may send empty values (ie: empty string instead of NULL) that
# should be translated to NULL on the database.
def set_nullable_attrs_to_null
# Go code may send empty values (ie: empty string instead of NULL) that
# should be translated to NULL on the database.
def set_nullable_attrs_to_null
- (resource_attrs.keys & nullable_attributes).each do |attr|
- val = resource_attrs[attr]
+ nullify_attrs(resource_attrs.to_hash).each do |k, v|
+ resource_attrs[k] = v
+ end
+ end
+
+ def nullify_attrs(a = {})
+ new_attrs = a.to_hash.symbolize_keys
+ (new_attrs.keys & nullable_attributes).each do |attr|
+ val = new_attrs[attr]
if (val.class == Integer && val == 0) || (val.class == String && val == "")
if (val.class == Integer && val == 0) || (val.class == String && val == "")
-
resource
_attrs[attr] = nil
+
new
_attrs[attr] = nil
end
end
end
end
+ return new_attrs
end
def reload_object_before_update
end
def reload_object_before_update
@@
-648,6
+662,11
@@
class ApplicationController < ActionController::Base
location: "query",
required: false,
},
location: "query",
required: false,
},
+ bypass_federation: {
+ type: 'boolean',
+ required: false,
+ description: 'bypass federation behavior, list items from local instance database only'
+ }
}
end
}
end