Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

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