Subversion Repositories DevTools

Rev

Rev 1284 | Details | Compare with Previous | Last modification | View Log | RSS feed

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