1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
module Rack
module OAuth2
module Server
module Abstract
class Error < StandardError
attr_accessor :status, :error, :description, :uri, :realm, :resource_metadata
def initialize(status, error, description = nil, options = {})
@status = status
@error = error
@description = description
@uri = options[:uri]
@realm = options[:realm]
@resource_metadata = options[:resource_metadata]
super [error, description].compact.join(' :: ')
end
def protocol_params
{
error: error,
error_description: description,
error_uri: uri
}
end
def finish
response = Rack::Response.new
response.status = status
yield response if block_given?
unless response.redirect?
response.headers['Content-Type'] = 'application/json'
response.write Util.compact_hash(protocol_params).to_json
end
response.finish
end
end
class BadRequest < Error
def initialize(error = :bad_request, description = nil, options = {})
super 400, error, description, options
end
end
class Unauthorized < Error
def initialize(error = :unauthorized, description = nil, options = {})
@skip_www_authenticate = options[:skip_www_authenticate]
super 401, error, description, options
end
end
class Forbidden < Error
def initialize(error = :forbidden, description = nil, options = {})
super 403, error, description, options
end
end
class ServerError < Error
def initialize(error = :server_error, description = nil, options = {})
super 500, error, description, options
end
end
class TemporarilyUnavailable < Error
def initialize(error = :temporarily_unavailable, description = nil, options = {})
super 503, error, description, options
end
end
end
end
end
end
|