Class: Orthrus::SSH::RackApp
- Inherits:
-
Object
- Object
- Orthrus::SSH::RackApp
- Defined in:
- lib/orthrus/ssh/rack_app.rb
Instance Attribute Summary collapse
-
#sessions ⇒ Object
readonly
Returns the value of attribute sessions.
Instance Method Summary collapse
- #call(env) ⇒ Object
- #find(req) ⇒ Object
- #form(body) ⇒ Object
-
#initialize(sessions) ⇒ RackApp
constructor
A new instance of RackApp.
- #verify(req) ⇒ Object
Constructor Details
#initialize(sessions) ⇒ RackApp
Returns a new instance of RackApp.
6 7 8 |
# File 'lib/orthrus/ssh/rack_app.rb', line 6 def initialize(sessions) @sessions = sessions end |
Instance Attribute Details
#sessions ⇒ Object (readonly)
Returns the value of attribute sessions.
10 11 12 |
# File 'lib/orthrus/ssh/rack_app.rb', line 10 def sessions @sessions end |
Instance Method Details
#call(env) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/orthrus/ssh/rack_app.rb', line 12 def call(env) req = Rack::Request.new(env) case req.params['state'] when 'find' find req when 'signed' verify req else [500, {}, ["unknown state"]] end end |
#find(req) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/orthrus/ssh/rack_app.rb', line 32 def find(req) user = req.params['user'] id = req.params["id"] unless pub = @sessions.find_key(user, id) return form :code => "unknown" end session, nonce = @sessions.new_session(user, pub) nonce = Utils.sha1_hash(nonce) form :code => 'check', :session_id => session, :nonce => nonce end |
#form(body) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/orthrus/ssh/rack_app.rb', line 25 def form(body) [200, { "Content-Type" => "application/x-www-form-urlencoded" }, [Rack::Utils.build_query(body)] ] end |
#verify(req) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/orthrus/ssh/rack_app.rb', line 47 def verify(req) id = req.params["session_id"].to_i nonce, pub = @sessions.find_session(id) nonce = Utils.sha1_hash(nonce) sig = req.params['sig'] token = @sessions.new_access_token(id) if pub.verify(sig, nonce, true) form :code => 'verified', :access_token => token else form :code => "fail" end end |