Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

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