Skip to content

Instantly share code, notes, and snippets.

@jordandobson
Created April 26, 2010 01:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jordandobson/378899 to your computer and use it in GitHub Desktop.
Save jordandobson/378899 to your computer and use it in GitHub Desktop.
def start( port = 24842 )
server = TCPServer.new( port )
log "[server log] Server started on localhost: #{port}"
while @session = server.accept
# 1) get the username
username = @session.gets.chomp
log "[server log] Received Client's Username: #{username}"
# 2) send the salt
salt = generate_salt
@session.puts(salt)
log "[server log] Sent Client Salt: #{salt}"
log "[server log] Awaiting Client's Salted Password..."
# 3) get auth string
client_salted_pwd = @session.gets.chomp
log "[server log] Received Salted Password: #{client_salted_pwd}"
# 4) Check Auth String & Return Results
if authenticated( username, salt, client_salted_pwd )
@session.puts("AUTHORIZED")
log "[server log] SUCCESSFUL Authentication for Username: #{username}"
else
@session.puts( "NOT AUTHORIZED" )
log "[server log] FAILED Authentication for Username: #{username}"
end
log "[server log] Closing Session..."
# 5) Disconnect Session
@session.close
end
end
class TestServer < Test::Unit::TestCase
KNOWN_CREDS = { "alice" => "foo" }
def setup
YAML.expects( :load_file ).with( 'passwd' ).returns( KNOWN_CREDS )
@server = Server.new
@tcp_server = mock( 'fake_tcp' )
@session = mock( 'session' )
@salt = "salt"
@user = "user"
@salt_pass = "pass"
@while_loop = sequence('while_loop')
end
def test_valid_user
@tcp_server.expects( :accept ).returns( @session ).in_sequence( @while_loop )
@tcp_server.expects( :accept ).returns( false ).in_sequence( @while_loop )
@session.expects( :gets ).returns( @user )
@server.expects( :generate_salt ).returns( @salt )
@session.expects( :puts ).with( @salt )
@session.expects( :gets ).returns( @salt_pass )
###
# Should I be testing passing @username, @salt, @salt_pass here?
###
@server.expects( :authenticated ).returns( true )
@session.expects( :puts ).with( "AUTHORIZED" )
@session.expects( :close )
TCPServer.expects( :new ).returns( @tcp_server )
@server.start
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment