hideous 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/hideous.rb +22 -8
- data/lib/hideous/version.rb +1 -1
- data/lib/hideous/xor_knuth_hash.rb +8 -7
- metadata +2 -8
data/lib/hideous.rb
CHANGED
|
@@ -6,35 +6,39 @@ module Hideous
|
|
|
6
6
|
require 'hideous/xor_knuth_hash'
|
|
7
7
|
extend ClassMethods
|
|
8
8
|
include InstanceMethods
|
|
9
|
+
|
|
9
10
|
cattr_accessor :hideous_prime
|
|
10
11
|
cattr_accessor :hideous_prime_inverse
|
|
11
12
|
cattr_accessor :hideous_rndxor
|
|
12
13
|
cattr_accessor :hideous_enabled
|
|
14
|
+
cattr_accessor :hideous_base
|
|
15
|
+
|
|
13
16
|
self.hideous_prime = (options[:prime] || hideous_default_prime)
|
|
14
17
|
self.hideous_prime_inverse = (options[:prime_inverse] || hideous_default_prime_inverse)
|
|
15
18
|
self.hideous_rndxor = (options[:rndxor] || hideous_default_rndxor)
|
|
16
19
|
self.hideous_enabled = (options[:auto].nil? ? true : options[:auto])
|
|
20
|
+
self.hideous_base = (options[:base] || hideous_default_base)
|
|
17
21
|
end
|
|
18
22
|
|
|
19
|
-
def self.hide(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
|
|
20
|
-
XorKnuthHash.hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
|
|
23
|
+
def self.hide(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
|
|
24
|
+
XorKnuthHash.hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
|
|
21
25
|
end
|
|
22
26
|
|
|
23
|
-
def self.show(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
|
|
24
|
-
XorKnuthHash.reverse_hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor)
|
|
27
|
+
def self.show(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
|
|
28
|
+
XorKnuthHash.reverse_hash(id, hideous_prime, hideous_prime_inverse, hideous_rndxor, base)
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
|
|
28
32
|
module ClassMethods
|
|
29
33
|
def find(*args)
|
|
30
34
|
if has_obfuscated_id?
|
|
31
|
-
args[0] = Hideous.show(args[0], self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor)
|
|
35
|
+
args[0] = Hideous.show(args[0], self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor, self.hideous_base)
|
|
32
36
|
end
|
|
33
37
|
super(*args)
|
|
34
38
|
end
|
|
35
39
|
|
|
36
40
|
def find_by_obfuscated_id(*args)
|
|
37
|
-
args[0] = Hideous.show(args[0].to_s, self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor)
|
|
41
|
+
args[0] = Hideous.show(args[0].to_s, self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor, self.hideous_base)
|
|
38
42
|
find(*args)
|
|
39
43
|
end
|
|
40
44
|
|
|
@@ -42,6 +46,8 @@ module Hideous
|
|
|
42
46
|
self.hideous_enabled
|
|
43
47
|
end
|
|
44
48
|
|
|
49
|
+
private
|
|
50
|
+
|
|
45
51
|
def hideous_default_prime
|
|
46
52
|
413_158_511
|
|
47
53
|
end
|
|
@@ -53,12 +59,20 @@ module Hideous
|
|
|
53
59
|
def hideous_default_rndxor
|
|
54
60
|
652_109_907
|
|
55
61
|
end
|
|
62
|
+
|
|
63
|
+
def hideous_default_base
|
|
64
|
+
16
|
|
65
|
+
end
|
|
56
66
|
end
|
|
57
67
|
|
|
58
68
|
module InstanceMethods
|
|
69
|
+
def obfuscated_id
|
|
70
|
+
Hideous.hide(self.id, self.hideous_prime, self.hideous_prime_inverse, self.hideous_rndxor, self.hideous_base)
|
|
71
|
+
end
|
|
72
|
+
|
|
59
73
|
def to_param
|
|
60
74
|
if self.hideous_enabled
|
|
61
|
-
|
|
75
|
+
obfuscated_id
|
|
62
76
|
else
|
|
63
77
|
super
|
|
64
78
|
end
|
|
@@ -68,4 +82,4 @@ module Hideous
|
|
|
68
82
|
|
|
69
83
|
end
|
|
70
84
|
|
|
71
|
-
ActiveRecord::Base.extend Hideous
|
|
85
|
+
ActiveRecord::Base.extend Hideous
|
data/lib/hideous/version.rb
CHANGED
|
@@ -1,34 +1,35 @@
|
|
|
1
1
|
class XorKnuthHash
|
|
2
2
|
MAXID = 2147483647
|
|
3
3
|
# Convience class method pointing to the instance method
|
|
4
|
-
def self.hash(record_id, prime, prime_inverse, rndxor)
|
|
5
|
-
new(record_id, prime, prime_inverse, rndxor).hash
|
|
4
|
+
def self.hash(record_id, prime, prime_inverse, rndxor, base)
|
|
5
|
+
new(record_id, prime, prime_inverse, rndxor, base).hash
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
# Convience class method pointing to the instance method
|
|
9
|
-
def self.reverse_hash(hash, prime, prime_inverse, rndxor)
|
|
10
|
-
new(hash, prime, prime_inverse, rndxor).reverse_hash
|
|
9
|
+
def self.reverse_hash(hash, prime, prime_inverse, rndxor, base)
|
|
10
|
+
new(hash, prime, prime_inverse, rndxor, base).reverse_hash
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def self.calculate_prime_inverse(prime)
|
|
14
14
|
self.modinv(prime, MAXID+1)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def initialize(id_or_hash, prime, prime_inverse, rndxor)
|
|
17
|
+
def initialize(id_or_hash, prime, prime_inverse, rndxor, base)
|
|
18
18
|
@id_or_hash = id_or_hash
|
|
19
19
|
@prime = prime
|
|
20
20
|
@prime_inverse = prime_inverse
|
|
21
21
|
@rndxor = rndxor
|
|
22
|
+
@base = base
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
# obfuscates an integer
|
|
25
26
|
def hash
|
|
26
|
-
(((@id_or_hash * @prime) & MAXID) ^ @rndxor).to_s(
|
|
27
|
+
(((@id_or_hash * @prime) & MAXID) ^ @rndxor).to_s(@base)
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
# de-obfuscates an integer
|
|
30
31
|
def reverse_hash
|
|
31
|
-
((@id_or_hash.to_i(
|
|
32
|
+
((@id_or_hash.to_i(@base) ^ @rndxor) * @prime_inverse) & MAXID
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
private
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hideous
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-
|
|
12
|
+
date: 2012-08-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies: []
|
|
14
14
|
description: Hide/Obfuscate ActiveRecord IDs in a url using a modified Knuth hash
|
|
15
15
|
email:
|
|
@@ -39,18 +39,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
39
39
|
- - ! '>='
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
41
|
version: '0'
|
|
42
|
-
segments:
|
|
43
|
-
- 0
|
|
44
|
-
hash: -1057310556346039001
|
|
45
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
46
43
|
none: false
|
|
47
44
|
requirements:
|
|
48
45
|
- - ! '>='
|
|
49
46
|
- !ruby/object:Gem::Version
|
|
50
47
|
version: '0'
|
|
51
|
-
segments:
|
|
52
|
-
- 0
|
|
53
|
-
hash: -1057310556346039001
|
|
54
48
|
requirements: []
|
|
55
49
|
rubyforge_project:
|
|
56
50
|
rubygems_version: 1.8.23
|