Subversion Repositories DevTools

Rev

Rev 5506 | Details | Compare with Previous | 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()
5338 dpurdie 90
      isDevSystem = IsEmpty(Application("LiveSystem"))
3959 dpurdie 91
   End Property
92
 
129 ghuddy 93
   '-----------------------------------------------------------------------------------------------------------------
94
   Public Function UserApplication ( nAppId )
95
      UserApplication = FALSE
96
 
97
      If InStr( sSEPARATOR & Session(enumUSER_APPLICATIONS_SESSION) & sSEPARATOR,  sSEPARATOR & nAppId & sSEPARATOR)  Then
98
         UserApplication = TRUE
99
      End If
100
 
101
   End Function
102
   '-----------------------------------------------------------------------------------------------------------------
5061 dpurdie 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
   '-----------------------------------------------------------------------------------------------------------------
129 ghuddy 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="
4028 dpurdie 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
129 ghuddy 146
 
147
   End Function
148
   '-----------------------------------------------------------------------------------------------------------------
5061 dpurdie 149
   Private Function GetDataPermission ( sTableName, nRowId, nPermissionType, sControlObjName )
129 ghuddy 150
      Dim cPermissionValue
5061 dpurdie 151
      Dim key : key = Cstr( sTableName &"_"& nRowId &"_"& sControlObjName &"_"& nPermissionType )
129 ghuddy 152
 
153
      '--- Get Row Permission ---
5061 dpurdie 154
      cPermissionValue = ""
155
      If mobjRowPermissions.Exists( key ) Then
156
        cPermissionValue = mobjRowPermissions.Item ( key )
157
      End If
129 ghuddy 158
 
159
      If IsNull( cPermissionValue )  OR  ( cPermissionValue = "" ) Then
160
         '--- Get Default Table Permission ---
5061 dpurdie 161
          Dim pkey : pkey = Cstr( sTableName &"_"& sControlObjName &"_"& nPermissionType )
162
          cPermissionValue = ""
163
          If mobjTablePermissions.Exists( pkey ) Then
164
            cPermissionValue = mobjTablePermissions.Item ( pkey )
165
          End If
129 ghuddy 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
5061 dpurdie 178
      If IsVisible ( sControlObjName ) OR GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_VISIBLE, sControlObjName ) Then
179
          IsDataVisible = TRUE
129 ghuddy 180
      End If
181
   End Function
182
   '-----------------------------------------------------------------------------------------------------------------
183
   Public Function IsDataActive ( sTableName, nRowId, sControlObjName )
184
      IsDataActive = FALSE
5061 dpurdie 185
      If IsActive ( sControlObjName ) OR GetDataPermission ( sTableName, nRowId, enumDB_PERMISSION_TYPE_ACTIVE, sControlObjName ) Then
186
          IsDataActive = TRUE
129 ghuddy 187
      End If
188
   End Function
189
   '-----------------------------------------------------------------------------------------------------------------
190
   Public Function IsActive ( sControlObjName )
5061 dpurdie 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
129 ghuddy 197
      End If
198
 
199
   End Function
200
   '-----------------------------------------------------------------------------------------------------------------
201
   Public Function IsVisible ( sControlObjName )
5061 dpurdie 202
      Dim key : key = Cstr( sControlObjName &"_"& enumDB_PERMISSION_TYPE_VISIBLE )
129 ghuddy 203
         IsVisible = FALSE
5061 dpurdie 204
      If mobjStaticControl.Exists(key) Then
205
          If mobjStaticControl.Item (key) = enumDB_YES Then
206
             IsVisible = TRUE
207
        End If
129 ghuddy 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
5061 dpurdie 222
      Dim InxTableName, InxRefColumnVal, InxPermissionType, InxPermission, InxControl
223
      Dim TableName, RefColumnVal, PermissionType, Permission, Control
224
      Dim key
129 ghuddy 225
 
226
      InxTableName      = 0
5061 dpurdie 227
      InxRefColumnVal   = 1
228
      InxPermissionType = 2
229
      InxPermission     = 3
230
      InxControl        = 4
129 ghuddy 231
 
5066 dpurdie 232
      ' Nothing to do ifthere is no data
233
      If IsNull(aRows) OR IsEmpty(aRows) Then
234
          Exit Sub
235
      End If
236
 
129 ghuddy 237
      numOfRows = UBound( aRows, 2 )
238
 
239
      For rowNum = 0 To numOfRows
240
 
5061 dpurdie 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 )
129 ghuddy 246
 
5061 dpurdie 247
         If RefColumnVal = 0 Then
129 ghuddy 248
            '--- Set Table Default Permission (i.e. "0" wildcard for "all records") ---
5061 dpurdie 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
129 ghuddy 254
 
255
         Else
256
            '--- Set Row Permission ---
5061 dpurdie 257
            key = TableName  & "_" & RefColumnVal & "_" & Control & "_" & PermissionType 
258
            mobjRowPermissions.Item ( key ) = Permission
129 ghuddy 259
 
260
         End If
261
 
262
 
263
      Next
264
 
5061 dpurdie 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>"
129 ghuddy 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
4203 dpurdie 305
      Dim dKey, dValue
129 ghuddy 306
 
307
      InxObjName          = 0
308
      InxPermissionType   = 1
4203 dpurdie 309
      InxPermission       = 2
129 ghuddy 310
 
311
      numOfRows = UBound( aRows, 2 )
312
 
313
      For rowNum = 0 To numOfRows
4203 dpurdie 314
        dKey = aRows( InxObjName, rowNum ) &"_"&  aRows( InxPermissionType, rowNum )
315
        dValue = CStr( aRows( InxPermission, rowNum ) )  
316
        mobjStaticControl.Add ( dKey ), dValue
129 ghuddy 317
      Next
318
 
5061 dpurdie 319
      'Response.Write "<br>Pretty Dictionary LoadStaticPermissions mobjStaticControl<pre>"
320
      'Response.Write DICToutput(mobjStaticControl)
321
      'Response.Write "</pre>"    
129 ghuddy 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
 
4203 dpurdie 333
      '--- Get if user is logged on from DB ---
129 ghuddy 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
 
5328 dpurdie 347
      '--- Check if User is still Logged on ---
129 ghuddy 348
      If is_Online = "Y" Then
349
         Call SessionsAndCookieSetup ( sUserId )
350
      End If
351
 
352
   End Function
353
   '-----------------------------------------------------------------------------------------------------------------
354
   Public Sub LogonUser ( sUserName, sUserPassword )
355
      Dim rsQry, query, sMessage
356
      sMessage = NULL
357
 
358
      '-- Kill Any pervious User Permissions stored in session --
359
      Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
360
      Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
361
 
362
      moOraDatabase.Parameters.Add "USER_NAME",      sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
363
 
364
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
365
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
366
 
367
      moOraDatabase.Parameters.Remove "USER_NAME"
368
 
369
      '--- Try Authenticating ---
370
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
371
         ' User Found !
372
 
373
         If rsQry("is_disabled") = enumDB_YES  Then
374
            ' User Disabled !
375
            sMessage = "Account <b>"& sUserName &"</b> is Disabled!"
376
 
377
            '-- Login Trail --
378
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
379
 
380
            '-- Raise Exception --
381
            Err.Raise 8, sMessage, ""
382
 
383
         Else
384
 
385
            ' Proceed with authentication
3959 dpurdie 386
            If Authenticated( sUserName, sUserPassword, rsQry("user_password"), rsQry("domain") ) Then
129 ghuddy 387
               ' Login OK.
388
               Call SessionsAndCookieSetup ( rsQry("user_id") )
389
 
390
               ' Tag user login
391
               Call TagLogon ( rsQry )
392
 
393
            End If
394
         End If
395
 
396
      Else
397
         ' User Not Found !
398
         sMessage = "Account <b>"& sUserName &"</b> Not Found!"
399
 
400
         '-- Login Trail --
401
         Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
402
 
403
         '-- Raise Exception --
404
         Err.Raise 8, sMessage, "Make sure your Username is correct <br>OR <br>Please go back and register if you are new user. "
405
 
406
      End If
407
      '--------------------------
408
      rsQry.Close()
409
      Set rsQry = Nothing
410
   End Sub
6240 dpurdie 411
 
129 ghuddy 412
   '-----------------------------------------------------------------------------------------------------------------
6240 dpurdie 413
   Public Sub MasqueradeAsUser ( sUserName, sRealUserName  )
414
      Dim rsQry, query, sMessage
415
      sMessage = NULL
416
 
417
      moOraDatabase.Parameters.Add "USER_NAME",      sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
418
 
419
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
420
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
421
 
422
      moOraDatabase.Parameters.Remove "USER_NAME"
423
 
424
      '--- Try Authenticating ---
425
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
426
         ' User Found !
427
 
428
         If rsQry("is_disabled") = enumDB_YES  Then
429
            ' User Disabled !
430
            sMessage = "Account <b>"& sUserName &"</b> is Disabled!"
431
 
432
            '-- Raise Exception --
433
            Err.Raise 8, sMessage, ""
434
 
435
         Else
436
 
437
            ' Proceed with authentication
438
            '   Kill Any pervious User Permissions stored in session
439
            Session.Contents.Remove(enumUSER_STATIC_PERMISSIONS)
440
            Session.Contents.Remove(enumUSER_DATA_PERMISSIONS)
441
 
442
            Call SessionsAndCookieSetup ( rsQry("user_id") )
443
 
444
            '-- Login Trail --
445
            sMessage = "Masquerading as " & sUserName 
446
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sRealUserName, sMessage )
447
 
448
            sMessage = "Masqueraded by " & sRealUserName 
449
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
450
 
451
         End If
452
 
453
      Else
454
         ' User Not Found !
455
         sMessage = "Account <b>"& sUserName &"</b> Not Found!"
456
 
457
         '-- Raise Exception --
458
         Err.Raise 8, sMessage, "Make sure the Username is correct."
459
 
460
      End If
461
      '--------------------------
462
      rsQry.Close()
463
      Set rsQry = Nothing
464
    End Sub
465
 
466
   '-----------------------------------------------------------------------------------------------------------------
129 ghuddy 467
   Public Function RequiresPasswordUpdate ( sUserName )
468
      Dim rsQry, query, sMessage
469
      sMessage = NULL
470
 
471
      moOraDatabase.Parameters.Add "USER_NAME",      sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
472
 
473
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_NAME = :USER_NAME"
474
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
475
 
476
 
477
      '--- Try Authenticating ---
478
      RequiresPasswordUpdate = FALSE
479
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
480
         If IsNull(rsQry("user_password")) AND IsNull(rsQry("domain")) Then
481
            RequiresPasswordUpdate = TRUE
482
         End If
483
 
484
      End If
485
      '--------------------------
486
 
487
 
488
      moOraDatabase.Parameters.Remove "USER_NAME"
489
 
490
      rsQry.Close()
491
      Set rsQry = Nothing
492
   End Function
493
   '-----------------------------------------------------------------------------------------------------------------
494
   Public Sub LogoffUser ()
495
      '-- Login Trail --
496
      Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGOFF, UserName, NULL )
497
 
498
      '-- Kill User Session --
499
      Session.Abandon
500
 
501
   End Sub
502
   '-----------------------------------------------------------------------------------------------------------------
503
   Private Sub SessionsAndCookieSetup ( nUserId )
504
      ' Store User details in session
505
      Call SetUserEnvironment ( nUserId )
506
 
507
      ' Aquire Login Token for Single Application
508
      Session(enumLOGIN_TOKEN_SESSION) = Session.SessionID
509
 
510
      Session.Timeout = enumSESSION_TIMEOUT
511
   End Sub
512
   '-----------------------------------------------------------------------------------------------------------------
513
   Private Function Authenticated ( ByRef sUserName, ByRef sUserPassword, sDBUserPassword, sDBdomain )
514
      Dim objLoginAuth, return, sMessage
515
      sMessage = NULL
516
 
517
      Authenticated = FALSE
518
 
3959 dpurdie 519
      ' Hook for testing access control features
520
      ' Any login allowed to the Test Database
521
      '
522
      If isDevSystem() Then
523
        Authenticated = TRUE
524
 
525
        '-- Login Trail --
526
        Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
527
 
528
      ElseIf NOT IsNull(sDBdomain) Then
129 ghuddy 529
         ' DOMAIN auth.
530
 
531
         Set objLoginAuth = Server.CreateObject("LoginAdmin.ImpersonateUser")
532
 
533
         return = -1
534
         return = objLoginAuth.AuthenticateUser ( sUserName, sUserPassword, sDBdomain )
535
 
536
         ' From MSDN System Error Codes
537
         ' 0 - The operation completed successfully.
538
         ' 1326 - Logon failure: unknown user name or bad password.
539
         ' 1385 - Logon failure: the user has not been granted the requested logon type at this computer.
540
         ' 1909 - The referenced account is currently locked out and may not be used to log on.
541
 
542
         Select Case return
543
            Case 0, 1385
544
               'Login ok
545
               Authenticated = TRUE
546
 
547
               '-- Login Trail --
548
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
549
 
550
            Case 1909
551
               sMessage = "Account <b>"& sUserName &"</b> at "& sDBdomain &" domain is currently locked!"
552
 
553
               '-- Login Trail --
554
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
555
 
556
               '-- Raise Exception --
557
               Err.Raise 8, sMessage, ""
558
 
559
 
560
            Case Else
561
               sMessage = "Password is incorrect for <b>"& sUserName &"</b> at "& sDBdomain &" domain!"
562
 
563
               '-- Login Trail --
564
               Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
565
 
566
               '-- Raise Exception --
567
               Err.Raise 8, sMessage, sDBdomain &" domain returns system error code "& return
568
 
569
         End Select
570
 
571
         Set objLoginAuth = Nothing
572
 
573
      Else
574
         ' LOCAL auth.
575
         If IsLocaPasswordCorrect ( sUserName, sUserPassword ) Then
576
            'Login ok
577
            Authenticated = TRUE
578
 
579
            '-- Login Trail --
580
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_SUCCESS, sUserName, NULL )
581
 
582
         Else
583
            sMessage = "Password is incorrect for <b>"& sUserName &"</b>!"
584
 
585
            '-- Login Trail --
586
            Call LoginTrail ( enumACCESS_MANAGER_EVENT_LOGON_FAIL, sUserName, sMessage )
587
 
588
            '-- Raise Exception --
589
            Err.Raise 8, sMessage, "Please try again and make sure you do not have Caps Lock on."
590
 
591
         End If
592
 
593
      End If
594
 
595
 
596
 
597
   End Function
598
   '-----------------------------------------------------------------------------------------------------------------
599
   Private Function IsLocaPasswordCorrect ( sUserName, sPassword )
600
 
601
      moOraDatabase.Parameters.Add "USER_NAME",   sUserName,    ORAPARM_INPUT, ORATYPE_VARCHAR2
602
      moOraDatabase.Parameters.Add "PASSWORD",    sPassword,    ORAPARM_INPUT, ORATYPE_VARCHAR2
5167 dpurdie 603
      moOraDatabase.Parameters.Add "RETURN_CODE", 0,            ORAPARM_OUTPUT, ORATYPE_NUMBER
129 ghuddy 604
 
605
      moOraDatabase.ExecuteSQL _
606
      "BEGIN   :RETURN_CODE := PK_SECURITY.IS_LOCAL_PASSWORD_CORRECT ( :USER_NAME, :PASSWORD );   END;"
607
 
608
      If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = 1 Then
609
         IsLocaPasswordCorrect = TRUE
610
      Else
611
         IsLocaPasswordCorrect = FALSE
612
      End If
613
 
614
      moOraDatabase.Parameters.Remove "USER_NAME"
615
      moOraDatabase.Parameters.Remove "PASSWORD"
616
      moOraDatabase.Parameters.Remove "RETURN_CODE"
617
 
618
   End Function
619
   '-----------------------------------------------------------------------------------------------------------------
620
   Public Sub SetPassword ( sUserName, sPasswordA, sPasswordB )
621
      If (sUserName = "")  OR  (sPasswordA = "")  OR  (sPasswordB = "") Then
622
         Err.Raise 8, "Username and both Passwords are required !", ""
623
         Exit Sub
624
      End If
625
 
626
 
627
      moOraDatabase.Parameters.Add "USER_NAME",   sUserName,       ORAPARM_INPUT, ORATYPE_VARCHAR2
628
      moOraDatabase.Parameters.Add "PASSWORDA",   sPasswordA,    ORAPARM_INPUT, ORATYPE_VARCHAR2
629
      moOraDatabase.Parameters.Add "PASSWORDB",   sPasswordB,    ORAPARM_INPUT, ORATYPE_VARCHAR2
630
      moOraDatabase.Parameters.Add "RETURN_CODE",   0,       ORAPARM_OUTPUT, ORATYPE_NUMBER
631
 
632
      objEH.TryORA ( moOraSession )
633
      On Error Resume Next
634
 
635
      moOraDatabase.ExecuteSQL _
636
      "BEGIN   :RETURN_CODE := PK_SECURITY.SET_PASSWORD ( :USER_NAME, :PASSWORDA, :PASSWORDB );   END;"
637
 
638
      objEH.CatchORA ( moOraSession )
639
 
640
      If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = -1 Then
641
         Err.Raise 8, "Passwords do not match !", "Make sure that you type correctly both passwords."
642
      End If
643
 
644
 
645
      moOraDatabase.Parameters.Remove "USER_NAME"
646
      moOraDatabase.Parameters.Remove "PASSWORDA"
647
      moOraDatabase.Parameters.Remove "PASSWORDB"
648
      moOraDatabase.Parameters.Remove "RETURN_CODE"
649
 
650
   End Sub
651
   '-----------------------------------------------------------------------------------------------------------------
652
   Private Sub LoginTrail ( nEvent, sUserName, sMessage )
653
 
5328 dpurdie 654
      moOraDatabase.Parameters.Add "EVENT_ENUM",        nEvent,                 ORAPARM_INPUT, ORATYPE_NUMBER
655
      moOraDatabase.Parameters.Add "LOGIN_USER_NAME",   sUserName,              ORAPARM_INPUT, ORATYPE_VARCHAR2
129 ghuddy 656
      moOraDatabase.Parameters.Add "CLIENT_IP",         Request.ServerVariables("REMOTE_ADDR"),       ORAPARM_INPUT, ORATYPE_VARCHAR2
5328 dpurdie 657
      moOraDatabase.Parameters.Add "APPLICATION_ID",    APPLICATION_ID,         ORAPARM_INPUT, ORATYPE_NUMBER
658
      moOraDatabase.Parameters.Add "LOGIN_COMMENTS",    sMessage,               ORAPARM_INPUT, ORATYPE_VARCHAR2
129 ghuddy 659
 
660
      objEH.TryORA ( moOraSession )
661
      On Error Resume Next
662
 
663
      moOraDatabase.ExecuteSQL _
664
      "BEGIN   pk_AMUtils.Log_Access ( :EVENT_ENUM, :LOGIN_USER_NAME, :CLIENT_IP, :APPLICATION_ID, :LOGIN_COMMENTS );   END;"
665
 
666
      objEH.CatchORA ( moOraSession )
667
 
668
      moOraDatabase.Parameters.Remove "EVENT_ENUM"
669
      moOraDatabase.Parameters.Remove "LOGIN_USER_NAME"
670
      moOraDatabase.Parameters.Remove "CLIENT_IP"
671
      moOraDatabase.Parameters.Remove "APPLICATION_ID"
672
      moOraDatabase.Parameters.Remove "LOGIN_COMMENTS"
673
 
674
   End Sub
675
   '-----------------------------------------------------------------------------------------------------------------
676
   Private Sub TagLogon ( oRsQry )
677
      oRsQry.Edit()
678
 
679
      oRsQry("is_online").Value = "Y"
680
      oRsQry("online_at").Value = Request.ServerVariables("REMOTE_ADDR")
681
 
682
      oRsQry.Update()
683
   End Sub
684
   '-----------------------------------------------------------------------------------------------------------------
685
   Private Sub SetUserEnvironment ( nUser_id )
686
      Dim rsUser, query, tempSTR
687
 
688
      moOraDatabase.Parameters.Add "USER_ID", nUser_id, ORAPARM_INPUT, ORATYPE_NUMBER
689
 
690
 
691
 
692
      '---- Get User Details ----
693
      query = "SELECT usr.*  FROM USERS usr  WHERE usr.USER_ID = :USER_ID"
694
      Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
695
 
696
      If (NOT rsUser.BOF) AND (NOT rsUser.EOF) Then
697
         Session(enumUSER_ID_SESSION) = rsUser("user_id")
698
 
699
         Session(enumUSER_DETAILS_SESSION) = _
700
            "user_name="& rsUser("user_name") & sSEPARATOR &_
701
            "full_name="& rsUser("full_name") & sSEPARATOR &_
702
            "user_email="& rsUser("user_email") & sSEPARATOR &_
703
            "last_visit="& rsUser("last_visit") & sSEPARATOR &_
704
            "domain="& rsUser("domain")
705
 
706
      End If
707
 
708
 
709
 
710
      '---- Get User Applications ----
711
      query = "SELECT ua.APP_ID  FROM USER_APPLICATIONS ua  WHERE ua.USER_ID = :USER_ID"
712
      Set rsUser = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
713
      tempSTR = ""
714
      While (NOT rsUser.BOF) AND (NOT rsUser.EOF)
715
         tempSTR = tempSTR & sSEPARATOR & rsUser("app_id")
716
         rsUser.MoveNext()
717
      WEnd
718
 
719
      If tempSTR <> "" Then
720
         Session(enumUSER_APPLICATIONS_SESSION) = Right( tempSTR, Len(tempSTR) - Len(sSEPARATOR) )   'Remove first separator
721
      Else
722
         Session(enumUSER_APPLICATIONS_SESSION) = 0
723
      End If
724
 
725
 
726
 
727
      moOraDatabase.Parameters.Remove "USER_ID"
728
 
729
      rsUser.Close()
730
      Set rsUser = Nothing
731
   End Sub
732
   '-----------------------------------------------------------------------------------------------------------------
733
   Private Sub GetApplicationRunningLevel ( )
734
      Dim rsQry, query
735
 
736
 
737
      '--- Get if user is loged on from DB ---
738
      moOraDatabase.Parameters.Add "APP_ID",  APPLICATION_ID, ORAPARM_INPUT, ORATYPE_NUMBER
739
 
740
      query = _
741
      " SELECT app.APP_ID,"&_
742
      "        app.APPLICATION_NAME,"&_
743
      "        app.IS_RUNNING"&_
744
      "   FROM APPLICATIONS app"&_
745
      "  WHERE app.APP_ID = :APP_ID"
746
      Set rsQry = moOraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
747
 
748
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
749
         mbIsApplicationRunning = FALSE
750
         If rsQry("is_running") = enumDB_YES Then
751
            mbIsApplicationRunning = TRUE
752
         End If
753
      End If
754
 
755
      moOraDatabase.Parameters.Remove "APP_ID"
756
      rsQry.Close
757
      Set rsQry = Nothing
758
 
759
   End Sub
760
   '-----------------------------------------------------------------------------------------------------------------
761
   Private Sub Class_Initialize()
762
      '// Perform action on creation of object. e.g. Set myObj = New ThisClassName
763
      Set mobjStaticControl = CreateObject("Scripting.Dictionary")
764
      Set mobjTablePermissions = CreateObject("Scripting.Dictionary")
765
      Set mobjRowPermissions = CreateObject("Scripting.Dictionary")
766
      mbIsApplicationRunning = NULL   ' The state of application
767
 
768
      sSEPARATOR = "||"
5061 dpurdie 769
      bDebug = false
129 ghuddy 770
 
771
   End Sub
772
   '-----------------------------------------------------------------------------------------------------------------
773
   Private Sub Class_Terminate()
774
      '// Perform action on object disposal. e.g. Set myObj = Nothing
775
      Set mobjStaticControl = Nothing
776
      Set mobjRowPermissions = Nothing
777
      Set mobjTablePermissions = Nothing
778
 
779
   End Sub
780
   '-----------------------------------------------------------------------------------------------------------------
119 ghuddy 781
End Class
129 ghuddy 782
%>