Author: dylan
Date: 2005-07-17 18:59:03 -0400 (Sun, 17 Jul 2005)
New Revision: 861

Added:
   trunk/clients/ravish/digest/
   trunk/clients/ravish/digest/best.rb
Modified:
   trunk/
   trunk/clients/ravish/ravish2.rb
Log:
 [EMAIL PROTECTED]:  dylan | 2005-07-17 18:58:44 -0400
 Added a /register email password command,
 and made it so ravish can login with passwords if one is set in the config 
file.
 



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43089
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:1253
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
   + 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43089
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:1254
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238

Added: trunk/clients/ravish/digest/best.rb
===================================================================
--- trunk/clients/ravish/digest/best.rb 2005-07-17 22:59:01 UTC (rev 860)
+++ trunk/clients/ravish/digest/best.rb 2005-07-17 22:59:03 UTC (rev 861)
@@ -0,0 +1,66 @@
+require 'digest/md5'
+require 'digest/sha1'
+require 'digest/sha2'
+require 'digest/rmd160'
+require 'base64'
+
+
+module Digest
+       class Base
+               def b64digest
+                       Base64.encode64(self.digest).gsub(/\n/, '').gsub(/=+$/, 
'')
+               end
+       end
+end
+
+module Digest
+       class Best
+               Digests = {
+                       'md5'    => {
+                               'level' => -1,
+                               'class' => Digest::MD5,
+                       },
+                       'sha1'   => {
+                               'level' => 1,
+                               'class' => Digest::SHA1,
+                       },
+                       'sha256' => {
+                               'level' => 2,
+                               'class' => Digest::SHA256,
+                       },
+                       'sha384' => {
+                               'level' => 3,
+                               'class' => Digest::SHA384,
+                       },
+                       'sha512' => {
+                               'level' => 4,
+                               'class' => Digest::SHA512,
+                       },
+                       'rmd160' => {
+                               'level' => 5,
+                               'class' => Digest::RMD160,
+                       }
+               }
+               for key in Digests.keys
+                       Digests[key]['name'] = key
+               end
+               
+               def initialize types
+                       types   = types.reject { |k| not(Digests.has_key? k)}
+                       digests = types.map { |k| Digests[k] }
+                       digest  = digests.max { |a, b| a['level'] <=> 
b['level'] }
+                       @digest = digest['class'].new
+                       @info   = digest
+               end
+
+               attr :info
+
+               def method_missing method, *args
+                       @digest.send method, *args
+               end
+
+               def to_s
+                       self.b64digest
+               end
+       end
+end

Modified: trunk/clients/ravish/ravish2.rb
===================================================================
--- trunk/clients/ravish/ravish2.rb     2005-07-17 22:59:01 UTC (rev 860)
+++ trunk/clients/ravish/ravish2.rb     2005-07-17 22:59:03 UTC (rev 861)
@@ -7,6 +7,7 @@
 require 'term/visual'
 require 'yaml'
 require 'haver'
+require 'digest/best'
 
 Thread.abort_on_exception = true
 
@@ -53,7 +54,8 @@
        ConfDefaults = {
                'server'        => 'hardison.net',
                'port'          => 7575,
-               'nick'          => 'RavishUser',
+               'nick'          => ENV['USER'] || 'RavishUser',
+               'password'  => '',
        }
 
        ConfFile = '.ravishrc'
@@ -115,8 +117,12 @@
                when :connecting
                        srvmsg "Connecting to [EMAIL 
PROTECTED]'server']}:[EMAIL PROTECTED]'port']}..."
                when :connected
+                       auth = 'auth'
+                       if @conf['password'].length > 0
+                               auth = 'auth'
+                       end
                        srvmsg 'Connected.'
-                       @haver.msg 'HAVER', 'Ravish/0.1.2'
+                       @haver.msg 'HAVER', 'Ravish/0.1.2', auth
                when :link_failed
                        srvmsg "Link failed: #{args[0]}"
                when :message_sent
@@ -125,16 +131,19 @@
                        srvmsg "%(smesg)S: #{args[0].inspect}"
                else
                        if type.to_s =~ /^ev_([A-Z:]+)$/
-                               if self.respond_to?(type)
+                               cmd = $1
+                               method = type.to_s.gsub(/:/, '_')
+                               
+                               if self.respond_to?(method)
                                        begin
-                                               self.send type, *args[0]
+                                               self.send method, *args[0]
                                        rescue ArgumentError
                                                srvmsg $!.inspect
                                                srvmsg type.inspect
                                                srvmsg args[0].inspect
                                        end
                                else
-                                       self.send 'unknown_ev', $1, args[0]
+                                       self.send 'unknown_ev', cmd, args[0]
                                end
                        end
                end
@@ -259,10 +268,30 @@
 
        def ev_HAVER server, version
                srvmsg "Server #{server} running #{version}"
+               @host = server
                @haver.msg 'IDENT', @conf['nick']
                activity @servwin, 2
        end
 
+       def ev_AUTH_TYPES *cmds
+               if cmds.grep(/^AUTH:BASIC$/)
+                       @haver.msg 'AUTH:TYPE', 'AUTH:BASIC'
+               else
+                       srvmsg "Can't do basic authentication"
+               end
+       end
+
+       def passcode password
+               Digest::SHA1.new(password + @host + @conf['nick']).b64digest
+       end
+       
+       def ev_AUTH_BASIC nonce, *digests       
+               dig = Digest::Best.new digests
+               dig.update(nonce + passcode(@conf['password']))
+
+               @haver.msg 'AUTH:BASIC', dig.info['name'], dig.b64digest
+       end
+       
        def ev_HELLO nick
                srvmsg "Server accepted uid #{nick}"
                @nick = nick
@@ -386,6 +415,11 @@
                        @haver.msg args.shift.upcase, *args
                end
        end
+
+       def user_REGISTER line
+               email, password = line
+               @haver.msg 'AUTH:REGISTER', email, passcode(password)
+       end
        
        def user_SAY line
                win = find_window(@term.current_window)


Reply via email to