Feature #4640 » base64_hash.patch
| app/models/user.rb | ||
|---|---|---|
| 109 | 109 |
return nil unless user.auth_source.authenticate(login, password) |
| 110 | 110 |
else |
| 111 | 111 |
# authentication with local password |
| 112 | ||
| 113 |
# Backwards compatibility: if the stored password is |
|
| 114 |
# hex-encoded, convert it to base64 prepended with '{SHA}'
|
|
| 115 |
# to make it compatible with Apache. |
|
| 116 |
if user.hashed_password[0,5] != '{SHA}'
|
|
| 117 |
pw_s = "" |
|
| 118 |
user.hashed_password.unpack( |
|
| 119 |
'a2'*(user.hashed_password.length / 2)).collect do |x| |
|
| 120 |
pw_s << x.hex |
|
| 121 |
end |
|
| 122 |
user.hashed_password = '{SHA}' + Base64.encode64(pw_s).chomp
|
|
| 123 |
end |
|
| 124 | ||
| 112 | 125 |
return nil unless User.hash_password(password) == user.hashed_password |
| 113 | 126 |
end |
| 114 | 127 |
else |
| ... | ... | |
| 391 | 404 |
|
| 392 | 405 |
# Return password digest |
| 393 | 406 |
def self.hash_password(clear_password) |
| 394 |
Digest::SHA1.hexdigest(clear_password || "") |
|
| 407 |
# Prefix with {SHA} and use base64 encoding to be compatible with
|
|
| 408 |
# Apache basic authentication with mod_authn_dbd. |
|
| 409 |
'{SHA}' + Base64.encode64(Digest::SHA1.digest(clear_password || "")).chomp
|
|
| 395 | 410 |
end |
| 396 | 411 |
end |
| 397 | 412 | |
| db/migrate/20100130000000_pw_hash_apache_compat.rb | ||
|---|---|---|
| 1 |
class PwHashApacheCompat < ActiveRecord::Migration |
|
| 2 |
def self.up |
|
| 3 |
users = User.find(:all) |
|
| 4 |
users.each do |user| |
|
| 5 |
next if user.hashed_password.blank? or |
|
| 6 |
(user.hashed_password[0,5] == '{SHA}')
|
|
| 7 | ||
| 8 |
# If the stored password is hex-encoded, convert it to base64 |
|
| 9 |
# prepended with '{SHA}' to make it compatible with Apache.
|
|
| 10 |
pw_s = "" |
|
| 11 |
user.hashed_password.unpack( |
|
| 12 |
'a2'*(user.hashed_password.length / 2)).collect do |x| |
|
| 13 |
pw_s << x.hex |
|
| 14 |
end |
|
| 15 |
user.hashed_password = '{SHA}' + Base64.encode64(pw_s).chomp
|
|
| 16 |
user.save |
|
| 17 | ||
| 18 |
end |
|
| 19 |
end |
|
| 20 | ||
| 21 |
def self.down |
|
| 22 |
users = User.find(:all) |
|
| 23 |
users.each do |user| |
|
| 24 |
next if user.hashed_password.blank? or |
|
| 25 |
(user.hashed_password[0,5] != '{SHA}')
|
|
| 26 |
pw_s = Base64.decode64(user.hashed_password[5..-1]) |
|
| 27 |
user.hashed_password = pw_s.unpack('H*').to_s
|
|
| 28 |
user.save |
|
| 29 |
end |
|
| 30 |
end |
|
| 31 |
end |
|
- « Previous
- 1
- 2
- Next »