class Slanger::Api::RequestValidation
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/slanger/api/request_validation.rb, line 6 def initialize(*args) super(*args) validate! authenticate! parse_body! end
Public Instance Methods
auth_params()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 22 def auth_params params.except('channel_id', 'app_id') end
body()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 18 def body @body ||= validate_body! end
channels()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 34 def channels @channels ||= Array(body["channels"] || params["channels"]) end
data()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 14 def data @data ||= Oj.strict_load(body["data"] || params["data"]) end
params()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 30 def params @params ||= validate_raw_params! end
socket_id()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 26 def socket_id @socket_id ||= determine_valid_socket_id end
Private Instance Methods
assert_valid_json!(string)
click to toggle source
# File lib/slanger/api/request_validation.rb, line 89 def assert_valid_json!(string) Oj.strict_load(string) rescue Oj::ParserError raise Slanger::InvalidRequest.new("Invalid request body: #{raw_body}") end
authenticate!()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 79 def authenticate! # Raises Signature::AuthenticationError if request does not authenticate. Signature::Request.new('POST', path_info, auth_params). authenticate { |key| Signature::Token.new key, Slanger::Config.secret } end
determine_valid_socket_id()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 95 def determine_valid_socket_id return validate_socket_id!(body["socket_id"]) if body["socket_id"] return validate_socket_id!(params["socket_id"]) if params["socket_id"] end
parse_body!()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 85 def parse_body! assert_valid_json!(raw_body) end
user_params()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 100 def user_params raw_params.reject{|k,_| %w(splat captures).include?(k)} end
validate!()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 44 def validate! raise InvalidRequest.new "no body" unless raw_body.present? raise InvalidRequest.new "invalid params" unless raw_params.is_a? Hash raise InvalidRequest.new "invalid path" unless path_info.is_a? String determine_valid_socket_id channels.each{|id| validate_channel_id!(id)} end
validate_body!()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 40 def validate_body! @body ||= assert_valid_json!(raw_body.tap{ |s| s.force_encoding('utf-8')}) end
validate_channel_id!(channel_id)
click to toggle source
# File lib/slanger/api/request_validation.rb, line 57 def validate_channel_id!(channel_id) validate_with_regex!(/\A[\w@\-;_.=,]{1,164}\z/, channel_id, "channel_id") end
validate_raw_params!()
click to toggle source
# File lib/slanger/api/request_validation.rb, line 67 def validate_raw_params! restricted = user_params.slice "body_md5", "auth_version", "auth_key", "auth_timestamp", "auth_signature", "app_id" invalid_keys = restricted.keys - user_params.keys if invalid_keys.any? raise Slanger::InvalidRequest.new "Invalid params: #{invalid_keys}" end restricted end
validate_socket_id!(socket_id)
click to toggle source
# File lib/slanger/api/request_validation.rb, line 53 def validate_socket_id!(socket_id) validate_with_regex!(/\A\d+\.\d+\z/, socket_id, "socket_id") end
validate_with_regex!(regex, value, name)
click to toggle source
# File lib/slanger/api/request_validation.rb, line 61 def validate_with_regex!(regex, value, name) raise InvalidRequest, "Invalid #{name} #{value.inspect}" unless value =~ regex value end