oracle_ebs_authentication 0.1.1 → 0.1.2
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.
@@ -12,8 +12,32 @@ module OracleEbsAuthentication
|
|
12
12
|
if result[:p_password]
|
13
13
|
@security.decrypt(username + "/" + password, result[:p_password], false)
|
14
14
|
end
|
15
|
-
rescue OCIError
|
16
|
-
|
15
|
+
rescue OCIError => e
|
16
|
+
if e.message.include?("ORA-20001: Your account does not exist or has expired.")
|
17
|
+
nil
|
18
|
+
else
|
19
|
+
raise e
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_fnd_user_id(username)
|
24
|
+
username &&= username.upcase
|
25
|
+
plsql.apps.fnd_security_pkg.fnd_encrypted_pwd(username, nil, nil, nil)[:p_user_id]
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_fnd_responsibilities(username)
|
29
|
+
user_id = get_fnd_user_id(username)
|
30
|
+
if user_id
|
31
|
+
plsql.select(:all, <<-SQL, user_id).map{|row| row[:responsibility_name]}
|
32
|
+
SELECT r.responsibility_name
|
33
|
+
FROM apps.fnd_user_resp_groups_all ur, apps.fnd_responsibility_vl r
|
34
|
+
WHERE ur.user_id = :p_user_id
|
35
|
+
AND TRUNC(SYSDATE) BETWEEN NVL(ur.start_date,TRUNC(SYSDATE)) AND NVL(ur.end_date, TRUNC(SYSDATE))
|
36
|
+
AND ur.responsibility_id = r.responsibility_id
|
37
|
+
SQL
|
38
|
+
else
|
39
|
+
[]
|
40
|
+
end
|
17
41
|
end
|
18
42
|
|
19
43
|
def validate_user_password(username, password)
|
@@ -8,6 +8,45 @@ module OracleEbsAuthentication
|
|
8
8
|
# as similar as possible to Java code to avoid differences in functionality.
|
9
9
|
#
|
10
10
|
class Security
|
11
|
+
if RUBY_VERSION =~ /^1.9/
|
12
|
+
class Bytes < String
|
13
|
+
def initialize(string)
|
14
|
+
super(string.force_encoding('ASCII-8BIT'))
|
15
|
+
end
|
16
|
+
|
17
|
+
def [](*args)
|
18
|
+
if args.length == 1
|
19
|
+
super(*args).ord
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def []=(*args)
|
26
|
+
if args.length == 2
|
27
|
+
super(args[0], args[1].chr)
|
28
|
+
else
|
29
|
+
super
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def bytes(string)
|
35
|
+
Bytes.new(string)
|
36
|
+
end
|
37
|
+
|
38
|
+
else
|
39
|
+
def bytes(string)
|
40
|
+
string
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
def null_bytes(count)
|
46
|
+
bytes("\0") * count
|
47
|
+
end
|
48
|
+
|
49
|
+
|
11
50
|
def initialize
|
12
51
|
end
|
13
52
|
|
@@ -71,7 +110,7 @@ module OracleEbsAuthentication
|
|
71
110
|
s2[0, "ZG_ENCRYPT_FAILED_".length] == "ZG_ENCRYPT_FAILED_")
|
72
111
|
return nil
|
73
112
|
end
|
74
|
-
abyte0 = s1.dup
|
113
|
+
abyte0 = bytes s1.dup
|
75
114
|
l2 = abyte0.length
|
76
115
|
i3 = s2.length
|
77
116
|
i1 = 1
|
@@ -95,11 +134,11 @@ module OracleEbsAuthentication
|
|
95
134
|
end
|
96
135
|
s3 = s2[2..-1]
|
97
136
|
abyte1 = p(s3)
|
98
|
-
abyte2 =
|
99
|
-
abyte3 =
|
137
|
+
abyte2 = null_bytes(abyte1.length - i2)
|
138
|
+
abyte3 = null_bytes i2
|
100
139
|
abyte2[0, abyte1.length - i2] = abyte1[0, abyte1.length - i2]
|
101
140
|
abyte3[0, i2] = abyte1[abyte1.length - i2, i2]
|
102
|
-
abyte4 =
|
141
|
+
abyte4 = null_bytes(i2 + l2)
|
103
142
|
abyte4[0, i2] = abyte3[0, i2]
|
104
143
|
abyte4[i2, l2] = abyte0[0, l2]
|
105
144
|
# puts "<br/>DEBUG new_check: abyte4=#{abyte4.inspect} abyte2=#{abyte2.unpack("H*")[0]}"
|
@@ -116,7 +155,7 @@ module OracleEbsAuthentication
|
|
116
155
|
j3 = k2
|
117
156
|
break
|
118
157
|
end
|
119
|
-
abyte6 =
|
158
|
+
abyte6 = null_bytes(j3 - byte0)
|
120
159
|
abyte6[0, j3 - byte0] = abyte5[byte0, j3 - byte0]
|
121
160
|
s4 = abyte6
|
122
161
|
if (s4 != nil && flag)
|
@@ -145,10 +184,10 @@ module OracleEbsAuthentication
|
|
145
184
|
end
|
146
185
|
|
147
186
|
def e(ai)
|
148
|
-
abyte0 =
|
187
|
+
abyte0 = null_bytes 4
|
149
188
|
abyte1 = nil
|
150
189
|
if (ai != nil)
|
151
|
-
abyte1 =
|
190
|
+
abyte1 = null_bytes(ai.length)
|
152
191
|
for i1 in 0...ai.length
|
153
192
|
abyte0[3] = (ai[i1] & 0xff)
|
154
193
|
abyte0[2] = ( (ai[i1] & 0xff00) >> 8)
|
@@ -181,10 +220,10 @@ module OracleEbsAuthentication
|
|
181
220
|
return nil
|
182
221
|
end
|
183
222
|
i1 = abyte1.length / 8
|
184
|
-
abyte3 =
|
185
|
-
abyte4 =
|
186
|
-
abyte5 =
|
187
|
-
abyte2 =
|
223
|
+
abyte3 = null_bytes 8
|
224
|
+
abyte4 = null_bytes 8
|
225
|
+
abyte5 = null_bytes 8
|
226
|
+
abyte2 = null_bytes 8
|
188
227
|
abyte3[0,8] = abyte0[0, 8]
|
189
228
|
abyte4[0,8] = abyte0[8, 8]
|
190
229
|
abyte5[0,8] = abyte0[16, 8]
|
@@ -192,7 +231,7 @@ module OracleEbsAuthentication
|
|
192
231
|
ai = l(abyte3, false)
|
193
232
|
ai1 = l(abyte4, true)
|
194
233
|
ai2 = l(abyte5, false)
|
195
|
-
abyte6 =
|
234
|
+
abyte6 = null_bytes(abyte1.length)
|
196
235
|
j1 = 0
|
197
236
|
k1 = 0
|
198
237
|
while (j1 < i1)
|
@@ -216,7 +255,7 @@ module OracleEbsAuthentication
|
|
216
255
|
return nil
|
217
256
|
end
|
218
257
|
end
|
219
|
-
abyte7 =
|
258
|
+
abyte7 = null_bytes(abyte1.length - byte0)
|
220
259
|
abyte7[0, abyte1.length - byte0] = abyte6[0, abyte1.length - byte0]
|
221
260
|
# puts "<br/>DEBUG g: abyte7=#{abyte7.unpack("H*")[0]}"
|
222
261
|
return abyte7
|
@@ -241,17 +280,17 @@ module OracleEbsAuthentication
|
|
241
280
|
else
|
242
281
|
ai = a(abyte0, abyte0.length)
|
243
282
|
abyte2 = e(ai)
|
244
|
-
abyte3 =
|
283
|
+
abyte3 = null_bytes 258
|
245
284
|
b_(abyte3, abyte2, nil, 5)
|
246
|
-
abyte4 =
|
285
|
+
abyte4 = null_bytes i1
|
247
286
|
b_(abyte3, abyte1, abyte4, i1)
|
248
287
|
return abyte4
|
249
288
|
end
|
250
289
|
end
|
251
290
|
|
252
291
|
def l(abyte0, flag)
|
253
|
-
abyte1 =
|
254
|
-
abyte2 =
|
292
|
+
abyte1 = null_bytes 56
|
293
|
+
abyte2 = null_bytes 56
|
255
294
|
ai = [nil]*32
|
256
295
|
# TODO: check impact of >>> substitution with >>
|
257
296
|
for j1 in 0...56
|
@@ -315,7 +354,7 @@ module OracleEbsAuthentication
|
|
315
354
|
end
|
316
355
|
abyte1 = e(ai)
|
317
356
|
abyte2 = a_( (s2 + "\0") )
|
318
|
-
abyte3 =
|
357
|
+
abyte3 = null_bytes(k1 + abyte2.length)
|
319
358
|
abyte3[0, abyte2.length] = abyte2[0, abyte2.length]
|
320
359
|
abyte3[abyte2.length, k1] = abyte1[0, k1]
|
321
360
|
abyte4 = k(abyte0, abyte3, i1)
|
@@ -327,7 +366,7 @@ module OracleEbsAuthentication
|
|
327
366
|
if (abyte0 == nil)
|
328
367
|
return nil
|
329
368
|
end
|
330
|
-
ac =
|
369
|
+
ac = null_bytes(abyte0.length)
|
331
370
|
i1 = 0
|
332
371
|
flag = false
|
333
372
|
flag1 = false
|
@@ -378,7 +417,7 @@ module OracleEbsAuthentication
|
|
378
417
|
if break_value == :label0
|
379
418
|
next
|
380
419
|
end
|
381
|
-
ac1 =
|
420
|
+
ac1 = null_bytes i1
|
382
421
|
ac1[0,i1] = ac[0,i1]
|
383
422
|
end
|
384
423
|
return ac1
|
@@ -399,6 +438,7 @@ module OracleEbsAuthentication
|
|
399
438
|
end
|
400
439
|
|
401
440
|
def p(s1)
|
441
|
+
s1 = bytes s1
|
402
442
|
flag = false
|
403
443
|
flag1 = false
|
404
444
|
i1 = 0
|
@@ -409,7 +449,7 @@ module OracleEbsAuthentication
|
|
409
449
|
end
|
410
450
|
k1 = s1.length / 2
|
411
451
|
if (k1 > 0)
|
412
|
-
abyte0 =
|
452
|
+
abyte0 = null_bytes k1
|
413
453
|
while (k1 > 0)
|
414
454
|
#c1 = s1.chars[i1]
|
415
455
|
c1 = s1[i1]
|
@@ -428,7 +468,7 @@ module OracleEbsAuthentication
|
|
428
468
|
def q(abyte0, i1, abyte1, j1, ai,
|
429
469
|
ai1, ai2, abyte2,
|
430
470
|
flag)
|
431
|
-
abyte3 =
|
471
|
+
abyte3 = null_bytes 8
|
432
472
|
abyte3[0, 8] = abyte0[i1, 8]
|
433
473
|
if (!flag)
|
434
474
|
# puts "<br/>DEBUG q: initial abyte3=#{abyte3.unpack("H*")[0]}"
|
@@ -536,18 +576,18 @@ module OracleEbsAuthentication
|
|
536
576
|
end
|
537
577
|
abyte5 = e(ai)
|
538
578
|
ai = nil
|
539
|
-
abyte6 =
|
579
|
+
abyte6 = null_bytes(byte1 + j4 + k3)
|
540
580
|
abyte6[0, byte1] = abyte4[0, byte1]
|
541
581
|
abyte6[byte1, k3] = abyte2[0, k3]
|
542
582
|
abyte6[byte1+k3, j4] = abyte5[0, j4]
|
543
|
-
abyte7 =
|
583
|
+
abyte7 = null_bytes(l2 + j3)
|
544
584
|
abyte7[0, l2] = abyte3[0, l2]
|
545
585
|
abyte7[l2, j3] = abyte0[0, j3]
|
546
586
|
abyte8 = i(nil, abyte7, abyte6)
|
547
587
|
if (abyte8 == nil)
|
548
588
|
return "ZG_ENCRYPT_FAILED_MISC"
|
549
589
|
else
|
550
|
-
abyte9 =
|
590
|
+
abyte9 = null_bytes(abyte8.length + l2)
|
551
591
|
abyte9[0, abyte8.length] = abyte8[0, abyte8.length]
|
552
592
|
abyte9[abyte8.length, l2] = abyte3[0, l2]
|
553
593
|
s3 = z(abyte9)
|
@@ -648,7 +688,7 @@ module OracleEbsAuthentication
|
|
648
688
|
return ""
|
649
689
|
end
|
650
690
|
j1 = s1.length
|
651
|
-
k1 = s1.index("\0")
|
691
|
+
k1 = s1.index(bytes("\0"))
|
652
692
|
if (k1 > -1)
|
653
693
|
j1 = k1
|
654
694
|
end
|
@@ -699,7 +739,7 @@ module OracleEbsAuthentication
|
|
699
739
|
def y(abyte0, abyte1)
|
700
740
|
# puts "<br/>DEBUG y: abyte0=#{abyte0.nil? ? "nil" : abyte0.unpack("H*")[0]}"
|
701
741
|
# puts "<br/>DEBUG y: abyte1=#{abyte1.nil? ? "nil" : abyte1.unpack("H*")[0]}"
|
702
|
-
abyte2 =
|
742
|
+
abyte2 = null_bytes 32
|
703
743
|
messagedigest = Digest::SHA1.new
|
704
744
|
messagedigest.reset
|
705
745
|
byte0 = 20
|
@@ -734,7 +774,7 @@ module OracleEbsAuthentication
|
|
734
774
|
def a_(ac)
|
735
775
|
# RSI: if we receive String then return the same value (as it should already be in UTF-8)
|
736
776
|
return ac if ac.is_a? String
|
737
|
-
abyte0 =
|
777
|
+
abyte0 = null_bytes(ac.length * 3)
|
738
778
|
i1 = 0
|
739
779
|
flag = false
|
740
780
|
for j1 in 0...ac.length
|
@@ -756,7 +796,7 @@ module OracleEbsAuthentication
|
|
756
796
|
i1 += 1
|
757
797
|
end
|
758
798
|
end
|
759
|
-
abyte1 =
|
799
|
+
abyte1 = null_bytes i1
|
760
800
|
abyte1[0, i1] = abyte0[0, i1]
|
761
801
|
abyte1
|
762
802
|
end
|
@@ -941,10 +981,10 @@ module OracleEbsAuthentication
|
|
941
981
|
if (abyte0.length < 32)
|
942
982
|
return nil
|
943
983
|
end
|
944
|
-
abyte3 =
|
945
|
-
abyte4 =
|
946
|
-
abyte5 =
|
947
|
-
abyte2 =
|
984
|
+
abyte3 = null_bytes 8
|
985
|
+
abyte4 = null_bytes 8
|
986
|
+
abyte5 = null_bytes 8
|
987
|
+
abyte2 = null_bytes 8
|
948
988
|
abyte3[0, 8] = abyte0[0, 8]
|
949
989
|
abyte4[0, 8] = abyte0[8, 8]
|
950
990
|
abyte5[0, 8] = abyte0[16, 8]
|
@@ -954,10 +994,10 @@ module OracleEbsAuthentication
|
|
954
994
|
ai2 = l(abyte5, true)
|
955
995
|
i1 = abyte1.length % 8
|
956
996
|
byte0 = (8 - i1)
|
957
|
-
abyte6 =
|
997
|
+
abyte6 = null_bytes(abyte1.length + byte0)
|
958
998
|
j1 = abyte6.length / 8 - 1
|
959
999
|
k1 = 8 * j1
|
960
|
-
abyte7 =
|
1000
|
+
abyte7 = null_bytes 8
|
961
1001
|
abyte7[0, i1] = abyte1[k1, i1]
|
962
1002
|
for l1 in i1...8
|
963
1003
|
abyte7[l1] = byte0
|
data/spec/authenticator_spec.rb
CHANGED
@@ -5,14 +5,14 @@ describe "Authenticator" do
|
|
5
5
|
if DATABASE_NAME && DATABASE_USERNAME && DATABASE_PASSWORD
|
6
6
|
plsql.connect! DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME
|
7
7
|
else
|
8
|
-
|
8
|
+
pending "You need to specify DATABASE_NAME, DATABASE_USERNAME, DATABASE_PASSWORD"
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
12
|
before(:each) do
|
13
13
|
@auth = OracleEbsAuthentication::Authenticator.new
|
14
|
-
@user = "
|
15
|
-
@password = "
|
14
|
+
@user = "OPERATIONS"
|
15
|
+
@password = "welcome"
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "#get_fnd_password" do
|
@@ -34,4 +34,10 @@ describe "Authenticator" do
|
|
34
34
|
@auth.validate_user_password(@user, @password).should be_true
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe "#get_fnd_responsibilities" do
|
39
|
+
it "should return responsibility names for given user" do
|
40
|
+
@auth.get_fnd_responsibilities("OPERATIONS").should include("System Administrator")
|
41
|
+
end
|
42
|
+
end
|
37
43
|
end
|
data/spec/security_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,6 @@ $:.unshift File.dirname(__FILE__) + '/../lib'
|
|
2
2
|
|
3
3
|
require "oracle_ebs_authentication"
|
4
4
|
|
5
|
-
DATABASE_NAME = ENV['DATABASE_NAME']
|
6
|
-
DATABASE_USERNAME = ENV['DATABASE_USERNAME']
|
7
|
-
DATABASE_PASSWORD = ENV['DATABASE_PASSWORD']
|
5
|
+
DATABASE_NAME = ENV['DATABASE_NAME'] || 'VIS'
|
6
|
+
DATABASE_USERNAME = ENV['DATABASE_USERNAME'] || 'APPS'
|
7
|
+
DATABASE_PASSWORD = ENV['DATABASE_PASSWORD'] || 'APPS'
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oracle_ebs_authentication
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Raimonds Simanovskis
|
@@ -16,18 +15,16 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date:
|
18
|
+
date: 2012-06-17 00:00:00 +03:00
|
20
19
|
default_executable:
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
23
22
|
name: activesupport
|
24
23
|
prerelease: false
|
25
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
25
|
requirements:
|
28
26
|
- - ">="
|
29
27
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 7
|
31
28
|
segments:
|
32
29
|
- 2
|
33
30
|
- 2
|
@@ -38,11 +35,9 @@ dependencies:
|
|
38
35
|
name: ruby-plsql
|
39
36
|
prerelease: false
|
40
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
38
|
requirements:
|
43
39
|
- - ">="
|
44
40
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 11
|
46
41
|
segments:
|
47
42
|
- 0
|
48
43
|
- 4
|
@@ -54,11 +49,9 @@ dependencies:
|
|
54
49
|
name: rake
|
55
50
|
prerelease: false
|
56
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
52
|
requirements:
|
59
53
|
- - ">="
|
60
54
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 3
|
62
55
|
segments:
|
63
56
|
- 0
|
64
57
|
version: "0"
|
@@ -68,11 +61,9 @@ dependencies:
|
|
68
61
|
name: rspec
|
69
62
|
prerelease: false
|
70
63
|
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
64
|
requirements:
|
73
65
|
- - ~>
|
74
66
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 27
|
76
67
|
segments:
|
77
68
|
- 2
|
78
69
|
- 5
|
@@ -84,11 +75,9 @@ dependencies:
|
|
84
75
|
name: ruby-oci8
|
85
76
|
prerelease: false
|
86
77
|
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
78
|
requirements:
|
89
79
|
- - ~>
|
90
80
|
- !ruby/object:Gem::Version
|
91
|
-
hash: 7
|
92
81
|
segments:
|
93
82
|
- 2
|
94
83
|
- 0
|
@@ -124,27 +113,23 @@ rdoc_options: []
|
|
124
113
|
require_paths:
|
125
114
|
- lib
|
126
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
116
|
requirements:
|
129
117
|
- - ">="
|
130
118
|
- !ruby/object:Gem::Version
|
131
|
-
hash: 3
|
132
119
|
segments:
|
133
120
|
- 0
|
134
121
|
version: "0"
|
135
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
123
|
requirements:
|
138
124
|
- - ">="
|
139
125
|
- !ruby/object:Gem::Version
|
140
|
-
hash: 3
|
141
126
|
segments:
|
142
127
|
- 0
|
143
128
|
version: "0"
|
144
129
|
requirements: []
|
145
130
|
|
146
131
|
rubyforge_project:
|
147
|
-
rubygems_version: 1.6
|
132
|
+
rubygems_version: 1.3.6
|
148
133
|
signing_key:
|
149
134
|
specification_version: 3
|
150
135
|
summary: This plugin provides Oracle E-Business Suite user authentication functionality.
|