app/controllers/faalis/#api_controller.rb# in faalis-0.25.0 vs app/controllers/faalis/#api_controller.rb# in faalis-0.25.1
- old
+ new
@@ -17,128 +17,35 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
# -----------------------------------------------------------------------------
require_dependency "faalis/api_controller"
-# This class is the base class of all API controllers in any **Faalis**
-# host applications. Each host Rails application should have an `APIController`
-# which inherit from this class.
class Faalis::APIController < Faalis::ApplicationController
-
- @@allowed_fields = []
-
- # Only support `json` format
respond_to :json
- # Authenticate user before any action take place
- before_filter :authenticate_filter
+ before_filter :authenticate_user!
- # Check for any presence of filtering query, In querystring and load
- # resource using them
- before_filter :load_resource_by_query, :only => [:index]
-
-
protect_from_forgery
- # Set csrf cookie after any action
after_filter :set_csrf_cookie_for_ng
- # Rescue from any access denied exception raised from cancan and
- # returns a useful error message in json
+ def set_csrf_cookie_for_ng
+ cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
+ end
+
rescue_from CanCan::AccessDenied do |exception|
render :status => 403, :json => {
:error => _("You don't have access to this page"),
:orig_msg => exception.message,
:action => exception.action,
}
end
- def set_csrf_cookie_for_ng
- cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
- end
-
- # User authentication for API services take place here. By default
- # **Faalis** uses the authentication method of **Devise** to authenticate
- # access to API service.
- #
- # If you want to change authentication method ? just override this method
- # in you **APIController**
- def authenticate_filter
- authenticate_user!
- end
-
- # Load resource by using parameters specified in querystring.
- def load_resource_by_query
- # If any query string parameter provided and allow fields specified
- if not request.query_parameters.empty? and not allowed_fields.empty?
-
- logger.info ("Load resource by query parameters")
- # Iterate over parameters in query string
- request.query_parameters.each do |key, value|
- # each key can be like filename[__querytype]=value
- # which `querytype` is string that specify the query type scope
- # to use in model. For example these is a query type scope called
- # `gt` which mean the mentioned field should be greater than the
- # value
- field, query_type = key.split("__")
-
- if allowed_fields.include? field
- # If field name is in the allowed list
- # If no query type specified we will use assignment scope.
- if query_type.nil?
- query_type = "assignment"
- end
-
- # If model have an scope with the "#{query_type}_query" name.
- # Otherwise skip
- if model_class.respond_to? "#{query_type}_query"
-
- # If resource already loaded. If there was a instnace variable
- # with the plural name of the resource exists then resource
- # already loaded and we should chain new conditions
- if instance_variable_defined? "@#{controller_name}"
- instance_variable_get("@#{controller_name}").send("#{query_type}_query".to_sym, field, value)
- else
- # Resource did not loaded we make first query
- # (without touching database) and set the corresponding
- # instance variables
- relation_object = model_class.send("#{query_type}_query".to_sym, field, value)
- instance_variable_set("@#{controller_name}", relation_object)
- end
-
- else
- logger.info "There is no `#{query_type}_query` in `#{model_class.to_s}` model."
- end
- else
- logger.warn "`#{field}` in not in allowed list for `#{self.class.to_s}`."
- end
- end
- else
- logger.info("Load resource using `load_resource`")
- #self.class.load_resource
- end
- end
-
- # An array of allowed fields for query loading
- def allowed_fields
- @@allowed_fields
- end
-
- # Using this query you can activate the query loading system
- # and specify fields which you want to use in query loading
- def self.allow_query_on(*args)
- @@allowed_fields = args.to_a.collect { |x| x.to_s }
- end
-
protected
- # Model class related to this controller.
- def model_class
- controller_name.singularize.classify.constantize
- end
-
def verified_request?
super || form_authenticity_token == request.headers['X-XSRF-TOKEN']
end
+ :
end