Custom password hashing for migrating data
This commit is contained in:
parent
1aee8c09da
commit
7a768068ec
@ -48,6 +48,10 @@ table#translations {
|
||||
}
|
||||
|
||||
.grid.links {
|
||||
&.inactive li > a {
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
li > a {
|
||||
display: block;
|
||||
background-color: $color-5;
|
||||
@ -55,8 +59,17 @@ table#translations {
|
||||
padding: 1em;
|
||||
min-height: 7em;
|
||||
|
||||
&.complete {
|
||||
background-color: $color-2;
|
||||
}
|
||||
|
||||
&.needs-work {
|
||||
background-color: $color-4;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $color-1;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
h3 {
|
||||
@ -85,4 +98,4 @@ ul.tags,
|
||||
float: left;
|
||||
color: lighten($body-font-color, 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -389,3 +389,9 @@ table {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media #{$medium-up} {
|
||||
.top-bar-section li a:not(.button) {
|
||||
background: transparent !important;
|
||||
}
|
||||
}
|
||||
|
@ -6,9 +6,6 @@ include ApplicationHelper
|
||||
class PagesController < ApplicationController
|
||||
|
||||
def home
|
||||
#password = ""
|
||||
#hash = ""
|
||||
#@testResult = RubyDrupalHash::verify(password, hash)
|
||||
end
|
||||
|
||||
def translate
|
||||
@ -91,4 +88,5 @@ class PagesController < ApplicationController
|
||||
end
|
||||
I18n.backend.reload!
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -7,10 +7,10 @@
|
||||
- @language_codes.each do |code|
|
||||
- if code && @completeness.has_key?(code.to_s)
|
||||
%li.text-center
|
||||
%a{:href => "/translations/#{code}/"}
|
||||
- completeness = @completeness[code.to_s]
|
||||
- percent = @total_translations ? ((completeness / @total_translations.to_f) * 100).to_i : 0
|
||||
%a{:href => "/translations/#{code}/", :class => (percent > 99 ? 'complete' : percent > 67 ? 'needs-work' : nil)}
|
||||
%h3=_"languages.#{code}"
|
||||
- completeness = @completeness[code.to_s]
|
||||
- percent = @total_translations ? ((completeness / @total_translations.to_f) * 100).round() : 0
|
||||
.completeness
|
||||
= "#{completeness} / #{@total_translations} (#{percent}%)"
|
||||
%h2= _ 'languages.inactive'
|
||||
|
1636835
config/bike_bike.yml
Normal file
1636835
config/bike_bike.yml
Normal file
File diff suppressed because one or more lines are too long
118
config/initializers/drupal_hash.rb
Normal file
118
config/initializers/drupal_hash.rb
Normal file
@ -0,0 +1,118 @@
|
||||
#require 'sorcery/lib/sorcery/crypto_providers/common'
|
||||
#require 'ruby_drupal_hash'
|
||||
|
||||
module Sorcery
|
||||
module CryptoProviders
|
||||
class DrupalPassword # < Sorcery::CryptoProviders::Common
|
||||
include Common
|
||||
class << self
|
||||
#def join_token
|
||||
# @join_token ||= "--"
|
||||
#end
|
||||
|
||||
# Turns your raw password into a Sha1 hash.
|
||||
def encrypt(*tokens)
|
||||
#puts tokens
|
||||
#x
|
||||
#tokens = tokens.flatten
|
||||
#digest = tokens.shift
|
||||
#stretches.times { digest = secure_digest([digest, *tokens].join(join_token)) }
|
||||
#digest
|
||||
hash(tokens.first())
|
||||
end
|
||||
|
||||
#def secure_digest(digest)
|
||||
# #Digest::SHA1.hexdigest(digest)
|
||||
# hash(digest)
|
||||
#end
|
||||
|
||||
DRUPAL_MIN_HASH_COUNT = 7
|
||||
DRUPAL_MAX_HASH_COUNT = 30
|
||||
DRUPAL_HASH_LENGTH = 55
|
||||
ITOA64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
|
||||
|
||||
HASH = Digest::SHA2.new(512)
|
||||
|
||||
def hash(password)
|
||||
return false if password.nil?
|
||||
|
||||
setting = '$S$DXHwLLD9k'
|
||||
|
||||
count_log2 = ITOA64.index(setting[3])
|
||||
|
||||
if count_log2 < DRUPAL_MIN_HASH_COUNT or count_log2 > DRUPAL_MAX_HASH_COUNT
|
||||
return false
|
||||
end
|
||||
|
||||
salt = setting[4..4+7]
|
||||
|
||||
if salt.length != 8
|
||||
return false
|
||||
end
|
||||
|
||||
count = 2 ** count_log2
|
||||
|
||||
pass_hash = HASH.digest(salt + password)
|
||||
|
||||
1.upto(count) do |i|
|
||||
pass_hash = HASH.digest(pass_hash + password)
|
||||
end
|
||||
|
||||
hash_length = pass_hash.length
|
||||
|
||||
output = setting + _password_base64_encode(pass_hash, hash_length)
|
||||
|
||||
if output.length != 98
|
||||
return false
|
||||
end
|
||||
|
||||
return output[0..(DRUPAL_HASH_LENGTH - 1)]
|
||||
end
|
||||
|
||||
def _password_base64_encode(to_encode, count)
|
||||
output = ''
|
||||
i = 0
|
||||
while true
|
||||
value = (to_encode[i]).ord
|
||||
|
||||
i += 1
|
||||
|
||||
output = output + ITOA64[value & 0x3f]
|
||||
if i < count
|
||||
value |= (to_encode[i].ord) << 8
|
||||
end
|
||||
|
||||
output = output + ITOA64[(value >> 6) & 0x3f]
|
||||
|
||||
if i >= count
|
||||
break
|
||||
end
|
||||
|
||||
i += 1
|
||||
|
||||
if i < count
|
||||
value |= (to_encode[i].ord) << 16
|
||||
end
|
||||
|
||||
output = output + ITOA64[(value >> 12) & 0x3f]
|
||||
|
||||
if i >= count
|
||||
break
|
||||
end
|
||||
|
||||
i += 1
|
||||
|
||||
output = output + ITOA64[(value >> 18) & 0x3f]
|
||||
|
||||
if i >= count
|
||||
break
|
||||
end
|
||||
|
||||
end
|
||||
puts "\nHASH:\t#{output}\n"
|
||||
return output
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -203,13 +203,13 @@ Rails.application.config.sorcery.configure do |config|
|
||||
# use an external encryption class.
|
||||
# Default: `nil`
|
||||
#
|
||||
# user.custom_encryption_provider =
|
||||
user.custom_encryption_provider = Sorcery::CryptoProviders::DrupalPassword
|
||||
|
||||
|
||||
# encryption algorithm name. See 'encryption_algorithm=' for available options.
|
||||
# Default: `:bcrypt`
|
||||
#
|
||||
user.encryption_algorithm = :sha512
|
||||
user.encryption_algorithm = :custom#:sha512
|
||||
|
||||
|
||||
# make this configuration inheritable for subclasses. Useful for ActiveRecord's STI.
|
||||
|
@ -129,9 +129,6 @@ is:
|
||||
it:
|
||||
- one
|
||||
- other
|
||||
iw:
|
||||
- one
|
||||
- other
|
||||
ja:
|
||||
- other
|
||||
jv:
|
||||
|
Loading…
x
Reference in New Issue
Block a user