Subversion Repositories DevTools

Rev

Go to most recent revision | 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
 
5066 dpurdie 233
      ' Nothing to do ifthere is no data
234
      If IsNull(aRows) OR IsEmpty(aRows) Then
235
          Exit Sub
236
      End If
237
 
129 ghuddy 238
      numOfRows = UBound( aRows, 2 )
239
 
240
      For rowNum = 0 To numOfRows
241
 
5061 dpurdie 242
          TableName         =  aRows( InxTableName, rowNum )
243
          RefColumnVal      =  aRows( InxRefColumnVal, rowNum )
244
          PermissionType    =  aRows( InxPermissionType, rowNum )
245
          Permission        =  aRows( InxPermission, rowNum )
246
          Control           =  aRows( InxControl, rowNum )
129 ghuddy 247
 
5061 dpurdie 248
         If RefColumnVal = 0 Then
129 ghuddy 249
            '--- Set Table Default Permission (i.e. "0" wildcard for "all records") ---
5061 dpurdie 250
            key = TableName  & "_" & Control & "_" & PermissionType 
251
            '
252
            ' Data appears to be wrong and useless
253
            ' Don't populate this table
254
            'mobjTablePermissions.Item ( key ) = Permission
129 ghuddy 255
 
256
         Else
257
            '--- Set Row Permission ---
5061 dpurdie 258
            key = TableName  & "_" & RefColumnVal & "_" & Control & "_" & PermissionType 
259
            mobjRowPermissions.Item ( key ) = Permission
129 ghuddy 260
 
261
         End If
262
 
263
 
264
      Next
265
 
5061 dpurdie 266
    'Response.Write "</pre><br>Pretty Dictionary mobjRowPermissions<pre>"
267
    'Response.Write DICToutput(mobjRowPermissions)
268
    'Response.Write "</pre><br>Pretty Dictionary mobjTablePermissions<pre>"
269
    'Response.Write DICToutput(mobjTablePermissions)
270
    'Response.write "</pre>"
129 ghuddy 271
   End Sub
272
   '-----------------------------------------------------------------------------------------------------------------
273
   Public Sub LoadDataPermissionVariations ( aRows )
274
      Dim numOfRows, rowNum
275
      Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission
276
 
277
      InxTableName      = 0
278
      InxRefColumnVal      = 1
279
      InxPermissionType   = 2
280
      InxPermission      = 3
281
 
282
      numOfRows = UBound( aRows, 2 )
283
 
284
      For rowNum = 0 To numOfRows
285
         If mobjRowPermissions.Exists ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) )Then
286
            mobjRowPermissions.Remove ( aRows( InxTableName, rowNum ) &"_"& enumDB_ALL_DATA &"_"& aRows( InxPermissionType, rowNum ) )
287
         End If
288
 
289
         mobjRowPermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxRefColumnVal, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) = CStr( aRows( InxPermission, rowNum ) )
290
 
291
         If aRows( InxPermission, rowNum ) = enumDB_NO Then
292
            mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) =  enumDB_YES
293
         Else
294
            mobjTablePermissions.Item ( aRows( InxTableName, rowNum ) &"_"& aRows( InxPermissionType, rowNum ) ) =  enumDB_NO
295
 
296
         End If
297
 
298
 
299
      Next
300
      'Response.write "mobjRowPermissions.Keys="& Join ( mobjRowPermissions.Keys, ", ")
301
   End Sub
302
   '-----------------------------------------------------------------------------------------------------------------
303
   Public Sub LoadStaticPermissions ( aRows )
304
      Dim numOfRows, rowNum
305
      Dim InxObjName, InxPermissionType, InxPermission
4203 dpurdie 306
      Dim dKey, dValue
129 ghuddy 307
 
308
      InxObjName          = 0
309
      InxPermissionType   = 1
4203 dpurdie 310
      InxPermission       = 2
129 ghuddy 311
 
312
      numOfRows = UBound( aRows, 2 )
313
 
314
      For rowNum = 0 To numOfRows
4203 dpurdie 315
        dKey = aRows( InxObjName, rowNum ) &"_"&  aRows( InxPermissionType, rowNum )
316
        dValue = CStr( aRows( InxPermission, rowNum ) )  
317
        mobjStaticControl.Add ( dKey ), dValue
129 ghuddy 318
      Next
319
 
5061 dpurdie 320
      'Response.Write "<br>Pretty Dictionary LoadStaticPermissions mobjStaticControl<pre>"
321
      'Response.Write DICToutput(mobjStaticControl)
322
      'Response.Write "</pre>"    
129 ghuddy 323
 
324
   End Sub
325
   '-----------------------------------------------------------------------------------------------------------------
326
   Private Function AutoLogonUser ( sUserId )
327
      Dim rsQry, query, is_Online
328
      AutoLogonUser = FALSE
329
 
330
      '-- Kill Any pervious User Permissions stored in session --
331
      Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
332
      Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
333
 
4203 dpurdie 334
      '--- Get if user is logged on from DB ---
129 ghuddy 335
      moOraDatabase.Parameters.Add "USER_ID",  sUserId, ORAPARM_INPUT, ORATYPE_NUMBER
336
 
337
      query = "SELECT usr.IS_ONLINE  FROM USERS usr  WHERE usr.USER_ID = :USER_ID"
338
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
339
 
340
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
341
         is_Online = rsQry("is_online")
342
      End If
343
 
344
      moOraDatabase.Parameters.Remove "USER_ID"
345
      rsQry.Close
346
      Set rsQry = Nothing
347
 
348
 
349
      '--- Check if User is still Loged on ---
350
      If is_Online = "Y" Then
351
         Call SessionsAndCookieSetup ( sUserId )
352
 
353
      End If
354
 
355
 
356
   End Function
357
   '-----------------------------------------------------------------------------------------------------------------
358
   Public Sub LogonUser ( sUserName, sUserPassword )
359
      Dim rsQry, query, sMessage
360
      sMessage = NULL
361
 
362
      '-- Kill Any pervious User Permissions stored in session --
363
      Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
364
      Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
365
 
366
      moOraDatabase.Parameters.Add "USER_NAME",      sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
367
 
368
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
369
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
370
 
371
      moOraDatabase.Parameters.Remove "USER_NAME"
372
 
373
      '--- Try Authenticating ---
374
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
375
         ' User Found !
376
 
377
         If rsQry("is_disabled") = enumDB_YES  Then
378
            ' User Disabled !
379
            sMessage = "Account <b>"& sUserName &"</b> is Disabled!"
380
 
381
            '-- Login Trail --
382
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
383
 
384
            '-- Raise Exception --
385
            Err.Raise 8, sMessage, ""
386
 
387
         Else
388
 
389
            ' Proceed with authentication
3959 dpurdie 390
            If Authenticated( sUserName, sUserPassword, rsQry("user_password"), rsQry("domain") ) Then
129 ghuddy 391
               ' Login OK.
392
               Call SessionsAndCookieSetup ( rsQry("user_id") )
393
 
394
               ' Tag user login
395
               Call TagLogon ( rsQry )
396
 
397
            End If
398
 
399
 
400
         End If
401
 
402
      Else
403
         ' User Not Found !
404
         sMessage = "Account <b>"& sUserName &"</b> Not Found!"
405
 
406
         '-- Login Trail --
407
         Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
408
 
409
         '-- Raise Exception --
410
         Err.Raise 8, sMessage, "Make sure your Username is correct <br>OR <br>Please go back and register if you are new user. "
411
 
412
      End If
413
      '--------------------------
414
 
415
 
416
 
417
 
418
      rsQry.Close()
419
      Set rsQry = Nothing
420
   End Sub
421
   '-----------------------------------------------------------------------------------------------------------------
422
   Public Function RequiresPasswordUpdate ( sUserName )
423
      Dim rsQry, query, sMessage
424
      sMessage = NULL
425
 
426
      moOraDatabase.Parameters.Add "USER_NAME",      sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
427
 
428
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
429
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
430
 
431
 
432
      '--- Try Authenticating ---
433
      RequiresPasswordUpdate = FALSE
434
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
435
         If IsNull(rsQry("user_password")) AND IsNull(rsQry("domain")) Then
436
            RequiresPasswordUpdate = TRUE
437
         End If
438
 
439
      End If
440
      '--------------------------
441
 
442
 
443
      moOraDatabase.Parameters.Remove "USER_NAME"
444
 
445
      rsQry.Close()
446
      Set rsQry = Nothing
447
   End Function
448
   '-----------------------------------------------------------------------------------------------------------------
449
   Public Sub LogoffUser ()
450
      '-- Login Trail --
451
      Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGOFF, UserName, NULL )
452
 
453
      '-- Kill User Session --
454
      Session.Abandon
455
 
456
   End Sub
457
   '-----------------------------------------------------------------------------------------------------------------
458
   Private Sub SessionsAndCookieSetup ( nUserId )
459
      ' Store User details in session
460
      Call SetUserEnvironment ( nUserId )
461
 
462
      ' Aquire Login Token for Single Application
463
      Session(enumLOGIN_TOKEN_SESSION) = Session.SessionID
464
 
465
      Session.Timeout = enumSESSION_TIMEOUT
466
   End Sub
467
   '-----------------------------------------------------------------------------------------------------------------
468
   Private Function Authenticated ( ByRef sUserName, ByRef sUserPassword, sDBUserPassword, sDBdomain )
469
      Dim objLoginAuth, return, sMessage
470
      sMessage = NULL
471
 
472
      Authenticated = FALSE
473
 
3959 dpurdie 474
      ' Hook for testing access control features
475
      ' Any login allowed to the Test Database
476
      '
477
      If isDevSystem() Then
478
        Authenticated = TRUE
479
 
480
        '-- Login Trail --
481
        Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
482
 
483
      ElseIf NOT IsNull(sDBdomain) Then
129 ghuddy 484
         ' DOMAIN auth.
485
 
486
         Set objLoginAuth = Server.CreateObject("LoginAdmin.ImpersonateUser")
487
 
488
         return = -1
489
         return = objLoginAuth.AuthenticateUser ( sUserName, sUserPassword, sDBdomain )
490
 
491
         ' From MSDN System Error Codes
492
         ' 0 - The operation completed successfully.
493
         ' 1326 - Logon failure: unknown user name or bad password.
494
         ' 1385 - Logon failure: the user has not been granted the requested logon type at this computer.
495
         ' 1909 - The referenced account is currently locked out and may not be used to log on.
496
 
497
         Select Case return
498
            Case 0, 1385
499
               'Login ok
500
               Authenticated = TRUE
501
 
502
               '-- Login Trail --
503
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
504
 
505
            Case 1909
506
               sMessage = "Account <b>"& sUserName &"</b> at "& sDBdomain &" domain is currently locked!"
507
 
508
               '-- Login Trail --
509
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
510
 
511
               '-- Raise Exception --
512
               Err.Raise 8, sMessage, ""
513
 
514
 
515
            Case Else
516
               sMessage = "Password is incorrect for <b>"& sUserName &"</b> at "& sDBdomain &" domain!"
517
 
518
               '-- Login Trail --
519
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
520
 
521
               '-- Raise Exception --
522
               Err.Raise 8, sMessage, sDBdomain &" domain returns system error code "& return
523
 
524
         End Select
525
 
526
         Set objLoginAuth = Nothing
527
 
528
      Else
529
         ' LOCAL auth.
530
         If IsLocaPasswordCorrect ( sUserName, sUserPassword ) Then
531
            'Login ok
532
            Authenticated = TRUE
533
 
534
            '-- Login Trail --
535
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
536
 
537
         Else
538
            sMessage = "Password is incorrect for <b>"& sUserName &"</b>!"
539
 
540
            '-- Login Trail --
541
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
542
 
543
            '-- Raise Exception --
544
            Err.Raise 8, sMessage, "Please try again and make sure you do not have Caps Lock on."
545
 
546
         End If
547
 
548
      End If
549
 
550
 
551
 
552
   End Function
553
   '-----------------------------------------------------------------------------------------------------------------
554
   Private Function IsLocaPasswordCorrect ( sUserName, sPassword )
555
 
556
      moOraDatabase.Parameters.Add "USER_NAME",   sUserName,    ORAPARM_INPUT, ORATYPE_VARCHAR2
557
      moOraDatabase.Parameters.Add "PASSWORD",    sPassword,    ORAPARM_INPUT, ORATYPE_VARCHAR2
558
      moOraDatabase.Parameters.Add "RETURN_CODE",   0,       ORAPARM_OUTPUT, ORATYPE_NUMBER
559
 
560
      moOraDatabase.ExecuteSQL _
561
      "BEGIN   :RETURN_CODE := PK_SECURITY.IS_LOCAL_PASSWORD_CORRECT ( :USER_NAME, :PASSWORD );   END;"
562
 
563
      If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = 1 Then
564
         IsLocaPasswordCorrect = TRUE
565
      Else
566
         IsLocaPasswordCorrect = FALSE
567
      End If
568
 
569
      moOraDatabase.Parameters.Remove "USER_NAME"
570
      moOraDatabase.Parameters.Remove "PASSWORD"
571
      moOraDatabase.Parameters.Remove "RETURN_CODE"
572
 
573
   End Function
574
   '-----------------------------------------------------------------------------------------------------------------
575
   Public Sub SetPassword ( sUserName, sPasswordA, sPasswordB )
576
      If (sUserName = "")  OR  (sPasswordA = "")  OR  (sPasswordB = "") Then
577
         Err.Raise 8, "Username and both Passwords are required !", ""
578
         Exit Sub
579
      End If
580
 
581
 
582
      moOraDatabase.Parameters.Add "USER_NAME",   sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
583
      moOraDatabase.Parameters.Add "PASSWORDA",   sPasswordA,    ORAPARM_INPUT, ORATYPE_VARCHAR2
584
      moOraDatabase.Parameters.Add "PASSWORDB",   sPasswordB,    ORAPARM_INPUT, ORATYPE_VARCHAR2
585
      moOraDatabase.Parameters.Add "RETURN_CODE",   0,       ORAPARM_OUTPUT, ORATYPE_NUMBER
586
 
587
      objEH.TryORA ( moOraSession )
588
      On Error Resume Next
589
 
590
      moOraDatabase.ExecuteSQL _
591
      "BEGIN   :RETURN_CODE := PK_SECURITY.SET_PASSWORD ( :USER_NAME, :PASSWORDA, :PASSWORDB );   END;"
592
 
593
      objEH.CatchORA ( moOraSession )
594
 
595
      If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = -1 Then
596
         Err.Raise 8, "Passwords do not match !", "Make sure that you type correctly both passwords."
597
      End If
598
 
599
 
600
      moOraDatabase.Parameters.Remove "USER_NAME"
601
      moOraDatabase.Parameters.Remove "PASSWORDA"
602
      moOraDatabase.Parameters.Remove "PASSWORDB"
603
      moOraDatabase.Parameters.Remove "RETURN_CODE"
604
 
605
   End Sub
606
   '-----------------------------------------------------------------------------------------------------------------
607
   Private Sub LoginTrail ( nEvent, sUserName, sMessage )
608
 
609
      moOraDatabase.Parameters.Add "EVENT_ENUM",         nEvent,       ORAPARM_INPUT, ORATYPE_NUMBER
610
      moOraDatabase.Parameters.Add "LOGIN_USER_NAME",   sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
611
      moOraDatabase.Parameters.Add "CLIENT_IP",         Request.ServerVariables("REMOTE_ADDR"),       ORAPARM_INPUT, ORATYPE_VARCHAR2
612
      moOraDatabase.Parameters.Add "APPLICATION_ID",      APPLICATION_ID,       ORAPARM_INPUT, ORATYPE_NUMBER
613
      moOraDatabase.Parameters.Add "LOGIN_COMMENTS",      sMessage,       ORAPARM_INPUT, ORATYPE_VARCHAR2
614
 
615
      objEH.TryORA ( moOraSession )
616
      On Error Resume Next
617
 
618
      moOraDatabase.ExecuteSQL _
619
      "BEGIN   pk_AMUtils.Log_Access ( :EVENT_ENUM, :LOGIN_USER_NAME, :CLIENT_IP, :APPLICATION_ID, :LOGIN_COMMENTS );   END;"
620
 
621
      objEH.CatchORA ( moOraSession )
622
 
623
      moOraDatabase.Parameters.Remove "EVENT_ENUM"
624
      moOraDatabase.Parameters.Remove "LOGIN_USER_NAME"
625
      moOraDatabase.Parameters.Remove "CLIENT_IP"
626
      moOraDatabase.Parameters.Remove "APPLICATION_ID"
627
      moOraDatabase.Parameters.Remove "LOGIN_COMMENTS"
628
 
629
   End Sub
630
   '-----------------------------------------------------------------------------------------------------------------
631
   Private Sub TagLogon ( oRsQry )
632
      oRsQry.Edit()
633
 
634
      oRsQry("is_online").Value = "Y"
635
      oRsQry("online_at").Value = Request.ServerVariables("REMOTE_ADDR")
636
 
637
      oRsQry.Update()
638
   End Sub
639
   '-----------------------------------------------------------------------------------------------------------------
640
   Private Sub SetUserEnvironment ( nUser_id )
641
      Dim rsUser, query, tempSTR
642
 
643
      moOraDatabase.Parameters.Add "USER_ID", nUser_id, ORAPARM_INPUT, ORATYPE_NUMBER
644
 
645
 
646
 
647
      '---- Get User Details ----
648
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_ID = :USER_ID"
649
      Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
650
 
651
      If (NOT rsUser.BOF) AND (NOT rsUser.EOF) Then
652
         Session(enumUSER_ID_SESSION) = rsUser("user_id")
653
 
654
         Session(enumUSER_DETAILS_SESSION) = _
655
            "user_name="& rsUser("user_name") & sSEPARATOR &_
656
            "full_name="& rsUser("full_name") & sSEPARATOR &_
657
            "user_email="& rsUser("user_email") & sSEPARATOR &_
658
            "last_visit="& rsUser("last_visit") & sSEPARATOR &_
659
            "domain="& rsUser("domain")
660
 
661
      End If
662
 
663
 
664
 
665
      '---- Get User Applications ----
666
      query = "SELECT ua.APP_ID  FROM USER_APPLICATIONS ua  WHERE ua.USER_ID = :USER_ID"
667
      Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
668
      tempSTR = ""
669
      While (NOT rsUser.BOF) AND (NOT rsUser.EOF)
670
         tempSTR = tempSTR & sSEPARATOR & rsUser("app_id")
671
         rsUser.MoveNext()
672
      WEnd
673
 
674
      If tempSTR <> "" Then
675
         Session(enumUSER_APPLICATIONS_SESSION) = Right( tempSTR, Len(tempSTR) - Len(sSEPARATOR) )   'Remove first separator
676
      Else
677
         Session(enumUSER_APPLICATIONS_SESSION) = 0
678
      End If
679
 
680
 
681
 
682
      moOraDatabase.Parameters.Remove "USER_ID"
683
 
684
      rsUser.Close()
685
      Set rsUser = Nothing
686
   End Sub
687
   '-----------------------------------------------------------------------------------------------------------------
688
   Private Sub GetApplicationRunningLevel ( )
689
      Dim rsQry, query
690
 
691
 
692
      '--- Get if user is loged on from DB ---
693
      moOraDatabase.Parameters.Add "APP_ID",  APPLICATION_ID, ORAPARM_INPUT, ORATYPE_NUMBER
694
 
695
      query = _
696
      " SELECT app.APP_ID,"&_
697
      "        app.APPLICATION_NAME,"&_
698
      "        app.IS_RUNNING"&_
699
      "   FROM APPLICATIONS app"&_
700
      "  WHERE app.APP_ID = :APP_ID"
701
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
702
 
703
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
704
         mbIsApplicationRunning = FALSE
705
         If rsQry("is_running") = enumDB_YES Then
706
            mbIsApplicationRunning = TRUE
707
         End If
708
      End If
709
 
710
      moOraDatabase.Parameters.Remove "APP_ID"
711
      rsQry.Close
712
      Set rsQry = Nothing
713
 
714
   End Sub
715
   '-----------------------------------------------------------------------------------------------------------------
716
   Private Sub Class_Initialize()
717
      '// Perform action on creation of object. e.g. Set myObj = New ThisClassName
718
      Set mobjStaticControl = CreateObject("Scripting.Dictionary")
719
      Set mobjTablePermissions = CreateObject("Scripting.Dictionary")
720
      Set mobjRowPermissions = CreateObject("Scripting.Dictionary")
721
      mbIsApplicationRunning = NULL   ' The state of application
722
 
723
      sSEPARATOR = "||"
5061 dpurdie 724
      bDebug = false
129 ghuddy 725
 
726
   End Sub
727
   '-----------------------------------------------------------------------------------------------------------------
728
   Private Sub Class_Terminate()
729
      '// Perform action on object disposal. e.g. Set myObj = Nothing
730
      Set mobjStaticControl = Nothing
731
      Set mobjRowPermissions = Nothing
732
      Set mobjTablePermissions = Nothing
733
 
734
   End Sub
735
   '-----------------------------------------------------------------------------------------------------------------
119 ghuddy 736
End Class
129 ghuddy 737
%>