Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

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