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)