class Rots::ServerApp
Attributes
openid_request[RW]
openid_response[RW]
request[RW]
response[RW]
server[RW]
Public Class Methods
new(config, server_options)
click to toggle source
# File lib/rots/server_app.rb, line 19 def initialize(config, server_options) @server_options = server_options @sreg_fields = config['sreg'] end
Public Instance Methods
call(env)
click to toggle source
# File lib/rots/server_app.rb, line 24 def call(env) on_openid_request(env) do if !is_checkid_request? @openid_response = @server.handle_request(@openid_request) reply_consumer elsif is_checkid_immediate? process_immediate_checkid_request else process_checkid_request end end end
Protected Instance Methods
bad_request()
click to toggle source
# File lib/rots/server_app.rb, line 130 def bad_request() [ 400, {'Content-Type'=>'text/plain', 'Content-Length'=>'0'}, [] ] end
checkid_immediate_is_valid?()
click to toggle source
# File lib/rots/server_app.rb, line 84 def checkid_immediate_is_valid? @request.params['openid.success'] == 'true' end
checkid_request_is_valid?()
click to toggle source
# File lib/rots/server_app.rb, line 80 def checkid_request_is_valid? @request.params['openid.success'] == 'true' end
create_wrappers(env)
click to toggle source
# File lib/rots/server_app.rb, line 49 def create_wrappers(env) @request = Rack::Request.new(env) @server = OpenID::Server::Server.new(storage, op_endpoint) @openid_request = @server.decode_request(@request.params) @openid_sreg_request = OpenID::SReg::Request.from_openid_request(@openid_request) unless @openid_request.nil? end
is_checkid_immediate?()
click to toggle source
# File lib/rots/server_app.rb, line 60 def is_checkid_immediate? @openid_request && @openid_request.immediate end
is_checkid_request?()
click to toggle source
# File lib/rots/server_app.rb, line 56 def is_checkid_request? @openid_request.is_a?(OpenID::Server::CheckIDRequest) end
on_openid_request(env) { || ... }
click to toggle source
# File lib/rots/server_app.rb, line 39 def on_openid_request(env) create_wrappers(env) if @openid_request.nil? [200, {'Content-Type' => 'text/html'}, ["<html><body><h1>ROTS => This is an OpenID endpoint</h1></body></html>"] ] else yield end end
op_endpoint()
click to toggle source
# File lib/rots/server_app.rb, line 145 def op_endpoint if @request.url =~ /(.*\?openid.success=true)/ $1 elsif @request.url =~ /([^?]*)/ $1 else nil end end
process_checkid_request()
click to toggle source
# File lib/rots/server_app.rb, line 72 def process_checkid_request if checkid_request_is_valid? return_successful_openid_response else return_cancel_openid_response end end
process_immediate_checkid_request()
click to toggle source
# File lib/rots/server_app.rb, line 64 def process_immediate_checkid_request if checkid_immediate_is_valid? return_successful_openid_response else return_setup_needed_openid_response end end
process_sreg_extension()
click to toggle source
# File lib/rots/server_app.rb, line 96 def process_sreg_extension return if @openid_sreg_request.nil? response = OpenID::SReg::Response.extract_response(@openid_sreg_request, @sreg_fields) @openid_response.add_extension(response) end
redirect(uri)
click to toggle source
# File lib/rots/server_app.rb, line 124 def redirect(uri) [ 303, {'Content-Length'=>'0', 'Content-Type'=>'text/plain', 'Location' => uri}, [] ] end
reply_consumer()
click to toggle source
# File lib/rots/server_app.rb, line 112 def reply_consumer web_response = @server.encode_response(@openid_response) case web_response.code when OpenID::Server::HTTP_OK success(web_response.body) when OpenID::Server::HTTP_REDIRECT redirect(web_response.headers['location']) else bad_request end end
return_cancel_openid_response()
click to toggle source
# File lib/rots/server_app.rb, line 102 def return_cancel_openid_response redirect(@openid_request.cancel_url) end
return_setup_needed_openid_response()
click to toggle source
# File lib/rots/server_app.rb, line 106 def return_setup_needed_openid_response setup_needed_args = @request.params.merge('openid.mode' => 'setup_needed', 'user_setup_url' => '') url = OpenID::Util.append_args(@openid_request.return_to, setup_needed_args) redirect(url) end
return_successful_openid_response()
click to toggle source
# File lib/rots/server_app.rb, line 88 def return_successful_openid_response @openid_response = @openid_request.answer(true) process_sreg_extension # TODO: Add support for SREG extension @server.signatory.sign(@openid_response) if @openid_response.needs_signing reply_consumer end
storage()
click to toggle source
# File lib/rots/server_app.rb, line 135 def storage # create the folder if it doesn't exist FileUtils.mkdir_p(@server_options[:storage]) unless File.exist?(@server_options[:storage]) OpenID::Store::Filesystem.new(@server_options[:storage]) end
success(text="")
click to toggle source
# File lib/rots/server_app.rb, line 141 def success(text="") Rack::Response.new(text).finish end