Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 rsolanki 1
<%
2
'=============================================================
3
'//
5299 dpurdie 4
'//                  Access Control
5
'//     This class is agnostic of the appliaction and could be common
6
'//     to all Manager Suite tools
2 rsolanki 7
'//
8
'=============================================================
9
%>
5299 dpurdie 10
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="../common/DictDump.vbs"></SCRIPT> 
2 rsolanki 11
<%
12
'--------------- Global Constants ----------------
5299 dpurdie 13
Const enumSESSION_TIMEOUT = 600      ' Minutes
14
Const enumSESSION_LAST_REQUEST = "AM_SESSION_LAST_REQUEST"
2 rsolanki 15
Const enumLOGIN_TOKEN_SESSION = "AM_LOGIN_TOKEN"
16
Const enumUSER_ID_SESSION = "AM_USER_ID"
17
Const enumUSER_DETAILS_SESSION = "AM_USER_DETAILS"
18
Const enumUSER_APPLICATIONS_SESSION = "AM_USER_APPLICATIONS"
5299 dpurdie 19
Const enumUSER_STATIC_PERMISSIONS = "AM_USER_STATIC_PERMISSIONS"
20
Const enumUSER_DATA_PERMISSIONS = "AM_USER_DATA_PERMISSIONS"
21
Const enumUSER_TEMP_VARIABLE = "AM_USER_TEMP_VARIABLE"
2 rsolanki 22
Const enumACCESS_MANAGER_EVENT_LOGON_SUCCESS  = 1
5299 dpurdie 23
Const enumACCESS_MANAGER_EVENT_LOGON_FAIL     = -1
24
Const enumACCESS_MANAGER_EVENT_LOGOFF         = 0
2 rsolanki 25
Const enumACCESS_MANAGER_EVENT_SESSION_EXPIRE = 2
26
'-------------------------------------------------
27
 
28
Class AccessControl
5299 dpurdie 29
   Private moOraSession
30
   Private moOraDatabase
31
   Private mobjStaticControl
32
   Private mobjRowPermissions
33
   Private mobjTablePermissions
34
   Private sSEPARATOR
35
   Private mbIsApplicationRunning
36
   Public  bDebug
37
 
38
   Public Property Let objOraDatabase ( ByRef oOraDatabase )
39
      Set moOraDatabase = oOraDatabase
40
   End Property
41
 
42
   Public Property Let objOraSession ( ByRef oOraSession )
43
      Set moOraSession = oOraSession
44
   End Property
45
 
46
   Public Property Get UserLogedIn ()
47
      UserLogedIn = FALSE
48
 
49
      ' Check for Session Token
50
      If (Session(enumLOGIN_TOKEN_SESSION) <> "") AND NOT IsNull(Session(enumLOGIN_TOKEN_SESSION)) Then
51
         UserLogedIn = TRUE
52
      End If
53
 
54
   End Property
55
 
56
   Public Property Get UserId ()
57
      UserId = Session(enumUSER_ID_SESSION)
58
   End Property
59
 
60
   Public Property Get UserName ()
61
      UserName = Extract( "user_name", Session(enumUSER_DETAILS_SESSION) )
62
   End Property
63
 
64
   Public Property Get FullName ()
65
      FullName = Extract( "full_name", Session(enumUSER_DETAILS_SESSION) )
66
   End Property
67
 
68
   Public Property Get UserEmail ()
69
      UserEmail = Extract( "user_email", Session(enumUSER_DETAILS_SESSION) )
70
   End Property
71
 
72
   Public Property Get LastVisit ()
73
      LastVisit = Extract( "last_visit", Session(enumUSER_DETAILS_SESSION) )
74
   End Property
75
 
3943 dpurdie 76
   Public Property Get Domain ()
77
      Domain = Extract( "domain", Session(enumUSER_DETAILS_SESSION) )
78
   End Property
79
 
5299 dpurdie 80
   Public Property Get IsApplicationRunning()
81
      If IsNull(mbIsApplicationRunning) Then
82
         Call GetApplicationRunningLevel ()
83
 
84
      End If
85
 
86
      IsApplicationRunning = mbIsApplicationRunning
87
   End Property
88
 
3943 dpurdie 89
   Public Property Get isDevSystem()
5153 dpurdie 90
      isDevSystem = InStr(OraDatabase.DatabaseName,"RELMANU1") > 0
3943 dpurdie 91
   End Property
92
 
5299 dpurdie 93
   '-----------------------------------------------------------------------------------------------------------------
94
   Public Function UserApplication ( nAppId )
95
      UserApplication = FALSE
3943 dpurdie 96
 
5299 dpurdie 97
      If InStr( sSEPARATOR & Session(enumUSER_APPLICATIONS_SESSION) & sSEPARATOR,  sSEPARATOR & nAppId & sSEPARATOR)  Then
98
         UserApplication = TRUE
99
      End If
100
 
101
   End Function
102
   '-----------------------------------------------------------------------------------------------------------------
103
   Public Sub dumpAll()
104
    Response.Write "<br>Pretty Dictionary mobjStaticControl<pre>"
105
    Response.Write DICToutput(mobjStaticControl)
106
    Response.Write "</pre><br>Pretty Dictionary mobjRowPermissions<pre>"
107
    Response.Write DICToutput(mobjRowPermissions)
108
    Response.Write "</pre><br>Pretty Dictionary mobjTablePermissions<pre>"
109
    Response.Write DICToutput(mobjTablePermissions)
110
    Response.Write "</pre><br>End"
111
   End Sub
112
 
113
   Private Sub RR(txt)
114
      If  bDebug Then
115
        Response.Write "<br>" & txt
116
      End If
117
   End Sub
118
   '-----------------------------------------------------------------------------------------------------------------
119
   Public Function BeginRegion ( sControlObjName )
120
      Response.write "<table width='100%'  border='0' cellspacing='0' cellpadding='1'>"
121
      Response.write "  <tr>"
122
      Response.write "    <td bgcolor='#FF0000'>&nbsp;<a href='#' class='body_linkw'><b>"& sControlObjName &"</b></a>&nbsp;</td>"
123
      Response.write "  </tr>"
124
      Response.write "  <tr>"
125
      Response.write "    <td bgcolor='#FF0000'>"
126
      Response.write "      <table width='100%'  border='0' cellspacing='0' cellpadding='0'>"
127
      Response.write "           <tr><td bgcolor='#FFFFFF'>"
128
   End Function
129
   '-----------------------------------------------------------------------------------------------------------------
130
   Public Function EndRegion ( sControlObjName )
131
      Response.write "    </td></tr></table>"
132
      Response.write " </td></tr>"
133
      Response.write "</table>"
134
   End Function
135
   '-----------------------------------------------------------------------------------------------------------------
136
   Private Function Extract( sField, sString )
137
      Dim tempArr, tempSTR
138
 
139
      tempArr = Split( sString, sSEPARATOR )
140
      tempSTR = Join( Filter( tempArr, sField &"=" ) )   ' Append "=" to field name to get e.g. "user_name="
141
      If tempSTR <> "" Then
142
        Extract = Right( tempSTR, Len(tempSTR) - Len( sField &"=" ))   ' Strip the fieled name from value
143
      Else
144
        Extract = ""
145
      End If
146
 
147
   End Function
148
   '-----------------------------------------------------------------------------------------------------------------
149
   Private Function GetDataPermission ( sTableName, nRowId, nPermissionType, sControlObjName )
150
      Dim cPermissionValue
151
      Dim key : key = Cstr( sTableName &"_"& nRowId &"_"& sControlObjName &"_"& nPermissionType )
152
 
153
      '--- Get Row Permission ---
154
      cPermissionValue = ""
155
      If mobjRowPermissions.Exists( key ) Then
156
        cPermissionValue = mobjRowPermissions.Item ( key )
157
      End If
158
 
159
      If IsNull( cPermissionValue )  OR  ( cPermissionValue = "" ) Then
160
         '--- Get Default Table Permission ---
161
          Dim pkey : pkey = Cstr( sTableName &"_"& sControlObjName &"_"& nPermissionType )
162
          cPermissionValue = ""
163
          If mobjTablePermissions.Exists( pkey ) Then
164
            cPermissionValue = mobjTablePermissions.Item ( pkey )
165
          End If
166
      End If
167
 
168
      '--- Return TRUE / FALSE ---
169
      GetDataPermission = FALSE
170
      If cPermissionValue = enumDB_YES Then
171
         GetDataPermission = TRUE
172
      End If
173
 
174
   End Function
175
   '-----------------------------------------------------------------------------------------------------------------
176
   Public Function IsDataVisible ( sTableName, nRowId, sControlObjName )
177
      IsDataVisible = FALSE
178
      If IsVisible ( sControlObjName ) OR GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_VISIBLE, sControlObjName ) Then
179
          IsDataVisible = TRUE
180
      End If
181
   End Function
182
   '-----------------------------------------------------------------------------------------------------------------
183
   Public Function IsDataActive ( sTableName, nRowId, sControlObjName )
184
      IsDataActive = FALSE
185
      If IsActive ( sControlObjName ) OR GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_ACTIVE, sControlObjName ) Then
186
          IsDataActive = TRUE
187
      End If
188
   End Function
189
   '-----------------------------------------------------------------------------------------------------------------
190
   Public Function IsActive ( sControlObjName )
191
      Dim key : key = Cstr( sControlObjName &"_"&  enumDB_PERMISSION_TYPE_ACTIVE )
192
      IsActive = FALSE
193
      If mobjStaticControl.Exists(key) Then
194
          If ( mobjStaticControl.Item (key) = enumDB_YES )   OR   ( IsNull(sControlObjName) )Then
195
             IsActive = TRUE
196
          End If
197
      End If
198
 
199
   End Function
200
   '-----------------------------------------------------------------------------------------------------------------
201
   Public Function IsVisible ( sControlObjName )
202
      Dim key : key = Cstr( sControlObjName &"_"& enumDB_PERMISSION_TYPE_VISIBLE )
203
         IsVisible = FALSE
204
      If mobjStaticControl.Exists(key) Then
205
          If mobjStaticControl.Item (key) = enumDB_YES Then
206
             IsVisible = TRUE
207
        End If
208
      End If
209
   End Function
210
   '-----------------------------------------------------------------------------------------------------------------
211
   ' This function is used for HTML conponents that support attribute "disabled". i.e. Button, dropdown, etc.
212
   Public Function IsComponentDisabled ( sControlObjName )
213
      If IsVisible ( sControlObjName ) Then
214
         IsComponentDisabled = ""
215
      Else
216
         IsComponentDisabled = " disabled "
217
      End If
218
   End Function
219
   '-----------------------------------------------------------------------------------------------------------------
220
   Public Sub LoadDataPermissions ( aRows )
221
      Dim numOfRows, rowNum
222
      Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission, InxControl
223
      Dim TableName, RefColumnVal, PermissionType, Permission, Control
224
      Dim key
225
 
226
      InxTableName      = 0
227
      InxRefColumnVal   = 1
228
      InxPermissionType = 2
229
      InxPermission     = 3
230
      InxControl        = 4
231
 
232
      ' Nothing to do ifthere is no data
233
      If IsNull(aRows) OR IsEmpty(aRows) Then
234
          Exit Sub
235
      End If
236
 
237
      numOfRows = UBound( aRows, 2 )
238
 
239
      For rowNum = 0 To numOfRows
240
 
241
          TableName         =  aRows( InxTableName, rowNum )
242
          RefColumnVal      =  aRows( InxRefColumnVal, rowNum )
243
          PermissionType    =  aRows( InxPermissionType, rowNum )
244
          Permission        =  aRows( InxPermission, rowNum )
245
          Control           =  aRows( InxControl, rowNum )
246
 
247
         If RefColumnVal = 0 Then
248
            '--- Set Table Default Permission (i.e. "0" wildcard for "all records") ---
249
            key = TableName  & "_" & Control & "_" & PermissionType 
250
            '
251
            ' Data appears to be wrong and useless
252
            ' Don't populate this table
253
            'mobjTablePermissions.Item ( key ) = Permission
254
 
255
         Else
256
            '--- Set Row Permission ---
257
            key = TableName  & "_" & RefColumnVal & "_" & Control & "_" & PermissionType 
258
            mobjRowPermissions.Item ( key ) = Permission
259
 
260
         End If
261
 
262
 
263
      Next
264
 
265
    'Response.Write "</pre><br>Pretty Dictionary mobjRowPermissions<pre>"
266
    'Response.Write DICToutput(mobjRowPermissions)
267
    'Response.Write "</pre><br>Pretty Dictionary mobjTablePermissions<pre>"
268
    'Response.Write DICToutput(mobjTablePermissions)
269
    'Response.write "</pre>"
270
   End Sub
271
   '-----------------------------------------------------------------------------------------------------------------
272
   Public Sub LoadDataPermissionVariations ( aRows )
273
      Dim numOfRows, rowNum
274
      Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission
275
 
276
      InxTableName      = 0
277
      InxRefColumnVal      = 1
278
      InxPermissionType   = 2
279
      InxPermission      = 3
280
 
281
      numOfRows = UBound( aRows, 2 )
282
 
283
      For rowNum = 0 To numOfRows
284
         If mobjRowPermissions.Exists ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) )Then
285
            mobjRowPermissions.Remove ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) )
286
         End If
287
 
288
         mobjRowPermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxRefColumnVal, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = CStr( aRows( InxPermission, rowNum ) )
289
 
290
         If aRows( InxPermission, rowNum ) = enumDB_NO Then
291
            mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) =  enumDB_YES
292
         Else
293
            mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) =  enumDB_NO
294
 
295
         End If
296
 
297
 
298
      Next
299
      'Response.write "mobjRowPermissions.Keys="& Join ( mobjRowPermissions.Keys, ", ")
300
   End Sub
301
   '-----------------------------------------------------------------------------------------------------------------
302
   Public Sub LoadStaticPermissions ( aRows )
303
      Dim numOfRows, rowNum
304
      Dim InxObjName, InxPermissionType, InxPermission
305
      Dim dKey, dValue
306
 
307
      InxObjName          = 0
308
      InxPermissionType   = 1
309
      InxPermission       = 2
310
 
311
      numOfRows = UBound( aRows, 2 )
312
 
313
      For rowNum = 0 To numOfRows
314
        dKey = aRows( InxObjName, rowNum ) &"_"&  aRows( InxPermissionType, rowNum )
315
        dValue = CStr( aRows( InxPermission, rowNum ) )  
316
        mobjStaticControl.Add ( dKey ), dValue
317
      Next
318
 
319
      'Response.Write "<br>Pretty Dictionary LoadStaticPermissions mobjStaticControl<pre>"
320
      'Response.Write DICToutput(mobjStaticControl)
321
      'Response.Write "</pre>"    
322
 
323
   End Sub
324
   '-----------------------------------------------------------------------------------------------------------------
325
   Private Function AutoLogonUser ( sUserId )
326
      Dim rsQry, query, is_Online
327
      AutoLogonUser = FALSE
328
 
329
      '-- Kill Any pervious User Permissions stored in session --
330
      Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
331
      Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
332
 
333
      '--- Get if user is logged on from DB ---
334
      moOraDatabase.Parameters.Add "USER_ID",  sUserId, ORAPARM_INPUT, ORATYPE_NUMBER
335
 
336
      query = "SELECT usr.IS_ONLINE  FROM USERS usr  WHERE usr.USER_ID = :USER_ID"
337
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
338
 
339
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
340
         is_Online = rsQry("is_online")
341
      End If
342
 
343
      moOraDatabase.Parameters.Remove "USER_ID"
344
      rsQry.Close
345
      Set rsQry = Nothing
346
 
347
 
348
      '--- Check if User is still Loged on ---
349
      If is_Online = "Y" Then
350
         Call SessionsAndCookieSetup ( sUserId )
351
 
352
      End If
353
 
354
 
355
   End Function
356
   '-----------------------------------------------------------------------------------------------------------------
357
   Public Sub LogonUser ( sUserName, sUserPassword )
358
      Dim rsQry, query, sMessage
359
      sMessage = NULL
360
 
361
      '-- Kill Any pervious User Permissions stored in session --
362
      Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
363
      Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
364
 
365
      moOraDatabase.Parameters.Add "USER_NAME",      sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
366
 
367
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
368
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
369
 
370
      moOraDatabase.Parameters.Remove "USER_NAME"
371
 
372
      '--- Try Authenticating ---
373
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
374
         ' User Found !
375
 
376
         If rsQry("is_disabled") = enumDB_YES  Then
377
            ' User Disabled !
378
            sMessage = "Account <b>"& sUserName &"</b> is Disabled!"
379
 
380
            '-- Login Trail --
381
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
382
 
383
            '-- Raise Exception --
384
            Err.Raise 8, sMessage, ""
385
 
386
         Else
387
 
388
            ' Proceed with authentication
389
            If Authenticated( sUserName, sUserPassword, rsQry("user_password"), rsQry("domain") ) Then
390
               ' Login OK.
391
               Call SessionsAndCookieSetup ( rsQry("user_id") )
392
 
393
               ' Tag user login
394
               Call TagLogon ( rsQry )
395
 
396
            End If
397
 
398
 
399
         End If
400
 
401
      Else
402
         ' User Not Found !
403
         sMessage = "Account <b>"& sUserName &"</b> Not Found!"
404
 
405
         '-- Login Trail --
406
         Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
407
 
408
         '-- Raise Exception --
409
         Err.Raise 8, sMessage, "Make sure your Username is correct <br>OR <br>Please go back and register if you are new user. "
410
 
411
      End If
412
      '--------------------------
413
 
414
 
415
 
416
 
417
      rsQry.Close()
418
      Set rsQry = Nothing
419
   End Sub
420
   '-----------------------------------------------------------------------------------------------------------------
421
   Public Function RequiresPasswordUpdate ( sUserName )
422
      Dim rsQry, query, sMessage
423
      sMessage = NULL
424
 
425
      moOraDatabase.Parameters.Add "USER_NAME",      sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
426
 
427
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
428
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
429
 
430
 
431
      '--- Try Authenticating ---
432
      RequiresPasswordUpdate = FALSE
433
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
434
         If IsNull(rsQry("user_password")) AND IsNull(rsQry("domain")) Then
435
            RequiresPasswordUpdate = TRUE
436
         End If
437
 
438
      End If
439
      '--------------------------
440
 
441
 
442
      moOraDatabase.Parameters.Remove "USER_NAME"
443
 
444
      rsQry.Close()
445
      Set rsQry = Nothing
446
   End Function
447
   '-----------------------------------------------------------------------------------------------------------------
448
   Public Sub LogoffUser ()
449
      '-- Login Trail --
450
      Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGOFF, UserName, NULL )
451
 
452
      '-- Kill User Session --
453
      Session.Abandon
454
 
455
   End Sub
456
   '-----------------------------------------------------------------------------------------------------------------
457
   Private Sub SessionsAndCookieSetup ( nUserId )
458
      ' Store User details in session
459
      Call SetUserEnvironment ( nUserId )
460
 
461
      ' Aquire Login Token for Single Application
462
      Session(enumLOGIN_TOKEN_SESSION) = Session.SessionID
463
 
464
      Session.Timeout = enumSESSION_TIMEOUT
465
   End Sub
466
   '-----------------------------------------------------------------------------------------------------------------
467
   Private Function Authenticated ( ByRef sUserName, ByRef sUserPassword, sDBUserPassword, sDBdomain )
468
      Dim objLoginAuth, return, sMessage
469
      sMessage = NULL
470
 
471
      Authenticated = FALSE
472
 
3943 dpurdie 473
      ' Hook for testing access control features
474
      ' Any login allowed to the Test Database
475
      '
476
      If isDevSystem() Then
477
        Authenticated = TRUE
478
 
479
        '-- Login Trail --
480
        Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
481
 
482
      ElseIf NOT IsNull(sDBdomain) Then
5299 dpurdie 483
         ' DOMAIN auth.
484
 
485
         Set objLoginAuth = Server.CreateObject("LoginAdmin.ImpersonateUser")
486
 
487
         return = -1
488
         return = objLoginAuth.AuthenticateUser ( sUserName, sUserPassword, sDBdomain )
489
 
490
         ' From MSDN System Error Codes
491
         ' 0 - The operation completed successfully.
492
         ' 1326 - Logon failure: unknown user name or bad password.
493
         ' 1385 - Logon failure: the user has not been granted the requested logon type at this computer.
494
         ' 1909 - The referenced account is currently locked out and may not be used to log on.
495
 
496
         Select Case return
497
            Case 0, 1385
498
               'Login ok
499
               Authenticated = TRUE
500
 
501
               '-- Login Trail --
502
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
503
 
504
            Case 1909
505
               sMessage = "Account <b>"& sUserName &"</b> at "& sDBdomain &" domain is currently locked!"
506
 
507
               '-- Login Trail --
508
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
509
 
510
               '-- Raise Exception --
511
               Err.Raise 8, sMessage, ""
512
 
513
 
514
            Case Else
515
               sMessage = "Password is incorrect for <b>"& sUserName &"</b> at "& sDBdomain &" domain!"
516
 
517
               '-- Login Trail --
518
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
519
 
520
               '-- Raise Exception --
521
               Err.Raise 8, sMessage, sDBdomain &" domain returns system error code "& return
522
 
523
         End Select
524
 
525
         Set objLoginAuth = Nothing
526
 
527
      Else
528
         ' LOCAL auth.
529
         If IsLocaPasswordCorrect ( sUserName, sUserPassword ) Then
530
            'Login ok
531
            Authenticated = TRUE
532
 
533
            '-- Login Trail --
534
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
535
 
536
         Else
537
            sMessage = "Password is incorrect for <b>"& sUserName &"</b>!"
538
 
539
            '-- Login Trail --
540
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
541
 
542
            '-- Raise Exception --
543
            Err.Raise 8, sMessage, "Please try again and make sure you do not have Caps Lock on."
544
 
545
         End If
546
 
547
      End If
548
 
549
 
550
 
551
   End Function
552
   '-----------------------------------------------------------------------------------------------------------------
553
   Private Function IsLocaPasswordCorrect ( sUserName, sPassword )
554
 
555
      moOraDatabase.Parameters.Add "USER_NAME",   sUserName,    ORAPARM_INPUT, ORATYPE_VARCHAR2
556
      moOraDatabase.Parameters.Add "PASSWORD",    sPassword,    ORAPARM_INPUT, ORATYPE_VARCHAR2
557
      moOraDatabase.Parameters.Add "RETURN_CODE", 0,            ORAPARM_OUTPUT, ORATYPE_NUMBER
558
 
559
      moOraDatabase.ExecuteSQL _
560
      "BEGIN   :RETURN_CODE := PK_SECURITY.IS_LOCAL_PASSWORD_CORRECT ( :USER_NAME, :PASSWORD );   END;"
561
 
562
      If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = 1 Then
563
         IsLocaPasswordCorrect = TRUE
564
      Else
565
         IsLocaPasswordCorrect = FALSE
566
      End If
567
 
568
      moOraDatabase.Parameters.Remove "USER_NAME"
569
      moOraDatabase.Parameters.Remove "PASSWORD"
570
      moOraDatabase.Parameters.Remove "RETURN_CODE"
571
 
572
   End Function
573
   '-----------------------------------------------------------------------------------------------------------------
574
   Public Sub SetPassword ( sUserName, sPasswordA, sPasswordB )
575
      If (sUserName = "")  OR  (sPasswordA = "")  OR  (sPasswordB = "") Then
576
         Err.Raise 8, "Username and both Passwords are required !", ""
577
         Exit Sub
578
      End If
579
 
580
 
581
      moOraDatabase.Parameters.Add "USER_NAME",   sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
582
      moOraDatabase.Parameters.Add "PASSWORDA",   sPasswordA,    ORAPARM_INPUT, ORATYPE_VARCHAR2
583
      moOraDatabase.Parameters.Add "PASSWORDB",   sPasswordB,    ORAPARM_INPUT, ORATYPE_VARCHAR2
584
      moOraDatabase.Parameters.Add "RETURN_CODE",   0,       ORAPARM_OUTPUT, ORATYPE_NUMBER
585
 
586
      objEH.TryORA ( moOraSession )
587
      On Error Resume Next
588
 
589
      moOraDatabase.ExecuteSQL _
590
      "BEGIN   :RETURN_CODE := PK_SECURITY.SET_PASSWORD ( :USER_NAME, :PASSWORDA, :PASSWORDB );   END;"
591
 
592
      objEH.CatchORA ( moOraSession )
593
 
594
      If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = -1 Then
595
         Err.Raise 8, "Passwords do not match !", "Make sure that you type correctly both passwords."
596
      End If
597
 
598
 
599
      moOraDatabase.Parameters.Remove "USER_NAME"
600
      moOraDatabase.Parameters.Remove "PASSWORDA"
601
      moOraDatabase.Parameters.Remove "PASSWORDB"
602
      moOraDatabase.Parameters.Remove "RETURN_CODE"
603
 
604
   End Sub
605
   '-----------------------------------------------------------------------------------------------------------------
606
   Private Sub LoginTrail ( nEvent, sUserName, sMessage )
607
 
608
      moOraDatabase.Parameters.Add "EVENT_ENUM",         nEvent,       ORAPARM_INPUT, ORATYPE_NUMBER
609
      moOraDatabase.Parameters.Add "LOGIN_USER_NAME",   sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
610
      moOraDatabase.Parameters.Add "CLIENT_IP",         Request.ServerVariables("REMOTE_ADDR"),       ORAPARM_INPUT, ORATYPE_VARCHAR2
611
      moOraDatabase.Parameters.Add "APPLICATION_ID",      APPLICATION_ID,       ORAPARM_INPUT, ORATYPE_NUMBER
612
      moOraDatabase.Parameters.Add "LOGIN_COMMENTS",      sMessage,       ORAPARM_INPUT, ORATYPE_VARCHAR2
613
 
614
      objEH.TryORA ( moOraSession )
615
      On Error Resume Next
616
 
617
      moOraDatabase.ExecuteSQL _
618
      "BEGIN   pk_AMUtils.Log_Access ( :EVENT_ENUM, :LOGIN_USER_NAME, :CLIENT_IP, :APPLICATION_ID, :LOGIN_COMMENTS );   END;"
619
 
620
      objEH.CatchORA ( moOraSession )
621
 
622
      moOraDatabase.Parameters.Remove "EVENT_ENUM"
623
      moOraDatabase.Parameters.Remove "LOGIN_USER_NAME"
624
      moOraDatabase.Parameters.Remove "CLIENT_IP"
625
      moOraDatabase.Parameters.Remove "APPLICATION_ID"
626
      moOraDatabase.Parameters.Remove "LOGIN_COMMENTS"
627
 
628
   End Sub
629
   '-----------------------------------------------------------------------------------------------------------------
630
   Private Sub TagLogon ( oRsQry )
631
      oRsQry.Edit()
632
 
633
      oRsQry("is_online").Value = "Y"
634
      oRsQry("online_at").Value = Request.ServerVariables("REMOTE_ADDR")
635
 
636
      oRsQry.Update()
637
   End Sub
638
   '-----------------------------------------------------------------------------------------------------------------
639
   Private Sub SetUserEnvironment ( nUser_id )
640
      Dim rsUser, query, tempSTR
641
 
642
      moOraDatabase.Parameters.Add "USER_ID", nUser_id, ORAPARM_INPUT, ORATYPE_NUMBER
643
 
644
 
645
 
646
      '---- Get User Details ----
647
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_ID = :USER_ID"
648
      Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
649
 
650
      If (NOT rsUser.BOF) AND (NOT rsUser.EOF) Then
651
         Session(enumUSER_ID_SESSION) = rsUser("user_id")
652
 
653
         Session(enumUSER_DETAILS_SESSION) = _
654
            "user_name="& rsUser("user_name") & sSEPARATOR &_
655
            "full_name="& rsUser("full_name") & sSEPARATOR &_
656
            "user_email="& rsUser("user_email") & sSEPARATOR &_
3943 dpurdie 657
            "last_visit="& rsUser("last_visit") & sSEPARATOR &_
658
            "domain="& rsUser("domain")
5299 dpurdie 659
 
660
      End If
661
 
662
 
663
 
664
      '---- Get User Applications ----
665
      query = "SELECT ua.APP_ID  FROM USER_APPLICATIONS ua  WHERE ua.USER_ID = :USER_ID"
666
      Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
667
      tempSTR = ""
668
      While (NOT rsUser.BOF) AND (NOT rsUser.EOF)
669
         tempSTR = tempSTR & sSEPARATOR & rsUser("app_id")
670
         rsUser.MoveNext()
671
      WEnd
672
 
673
      If tempSTR <> "" Then
674
         Session(enumUSER_APPLICATIONS_SESSION) = Right( tempSTR, Len(tempSTR) - Len(sSEPARATOR) )   'Remove first separator
675
      Else
676
         Session(enumUSER_APPLICATIONS_SESSION) = 0
677
      End If
678
 
679
 
680
 
681
      moOraDatabase.Parameters.Remove "USER_ID"
682
 
683
      rsUser.Close()
684
      Set rsUser = Nothing
685
   End Sub
686
   '-----------------------------------------------------------------------------------------------------------------
687
   Private Sub GetApplicationRunningLevel ( )
688
      Dim rsQry, query
689
 
690
 
691
      '--- Get if user is loged on from DB ---
692
      moOraDatabase.Parameters.Add "APP_ID",  APPLICATION_ID, ORAPARM_INPUT, ORATYPE_NUMBER
693
 
694
      query = _
695
      " SELECT app.APP_ID,"&_
696
      "        app.APPLICATION_NAME,"&_
697
      "        app.IS_RUNNING"&_
698
      "   FROM APPLICATIONS app"&_
699
      "  WHERE app.APP_ID = :APP_ID"
700
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
701
 
702
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
703
         mbIsApplicationRunning = FALSE
704
         If rsQry("is_running") = enumDB_YES Then
705
            mbIsApplicationRunning = TRUE
706
         End If
707
      End If
708
 
709
      moOraDatabase.Parameters.Remove "APP_ID"
710
      rsQry.Close
711
      Set rsQry = Nothing
712
 
713
   End Sub
714
   '-----------------------------------------------------------------------------------------------------------------
715
   Private Sub Class_Initialize()
716
      '// Perform action on creation of object. e.g. Set myObj = New ThisClassName
717
      Set mobjStaticControl = CreateObject("Scripting.Dictionary")
718
      Set mobjTablePermissions = CreateObject("Scripting.Dictionary")
719
      Set mobjRowPermissions = CreateObject("Scripting.Dictionary")
720
      mbIsApplicationRunning = NULL   ' The state of application
721
 
722
      sSEPARATOR = "||"
723
      bDebug = false
724
 
725
   End Sub
726
   '-----------------------------------------------------------------------------------------------------------------
727
   Private Sub Class_Terminate()
728
      '// Perform action on object disposal. e.g. Set myObj = Nothing
729
      Set mobjStaticControl = Nothing
730
      Set mobjRowPermissions = Nothing
731
      Set mobjTablePermissions = Nothing
732
 
733
   End Sub
734
   '-----------------------------------------------------------------------------------------------------------------
2 rsolanki 735
End Class
5299 dpurdie 736
%>