blob: cc4554dfad2f80519b9889c4900ce7a9c592cec9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
#!/bin/sh
# (C) 2010 by Eugeniy Mikhailov, <evgmik@gmail.com>
# vim:set ft=tcl: \
exec tclsh "$0" "$@"
set err [catch {
# require Tcl version of at least 8.5 since I use 'ni' and 'in' in expressions for lists
package require ncgi
package require Tcl 8.5
package require sqlite3
package require md5
package require json::write
} errStat ]
if { $err } {
::ncgi::header
puts "the following error happen: $errStat"
exit
}
###################### Main script begins #################################
set err [catch {
set execution_start_time [clock microseconds]
source ./GradeBook_lib.tcl
set config_file "./gb_config.tcl"
if { [file exists $config_file] && ("$config_file" ne "") } {
source $config_file
}
set logEntry {}
::ncgi::parse
# defaults
set sortCol LastName
set user guest
set password guest
set action defaultview
# defaults end
# read cookies
set user_requested [::ncgi::cookie user]
if { $user_requested eq "" } { set user_requested __user_not_set__ }
set sortCol [::ncgi::cookie sortCol]
set password [::ncgi::cookie password]
set action [::ncgi::value action defaultview]
# end of read cookies
# get remote IP
if { [catch {set remote_ip $env(REMOTE_ADDR)} errStat] } { set remote_ip unknown}
# get hostname
if { [catch {set host_name $env(SERVER_NAME)} errStat] } { set host_name unknown}
# script name
if { [catch {set script_name $env(SCRIPT_NAME)} errStat] } { set script_name unknown}
set script_root_name $script_name
# figure out course db filename
# script uri
if { [catch {set request_uri $env(REQUEST_URI)} errStat] } { set request_uri unknown}
regsub -all $script_name $request_uri "" coursedbfname
regsub -all {\?.*$} $coursedbfname "" coursedbfname
regsub -all {^/} $coursedbfname "" coursedbfname
if { $coursedbfname eq "" } { set coursedbfname __DB_not_set__ }
set script_name "$script_name/$coursedbfname"
set timestamp [timestamp]
#CreateGradesTable db
#CreateAccessRightsTable db
dbg [::ncgi::names] msg_level_info
# logon and logoff actions are granted to everyone
# these actions also set cookies and should be run before ::ncgi::header
if { $action == "logon" } { set action [ LogMeOn ] }
if { $action == "logoff" } { LogMeOff; set action defaultview }
if { $action == "sort" } { SetSortColumn }
#dbg "[timestamp] user $user_requested DB $coursedbfname version $VERSION from $remote_ip" msg_level_log
::ncgi::header
set user [ Authenticate_User $user_requested $password ]
#dbg "[timestamp] authenticated user $user_requested DB $coursedbfname as $user version $VERSION from $remote_ip" msg_level_log
#dbg "[timestamp] requested action $action by user $user_requested DB $coursedbfname recognized as $user version $VERSION from $remote_ip" msg_level_log
addLogEntry timestamp "[timestamp]" msg_level_log
addLogEntry remoteIP "$remote_ip" msg_level_log
addLogEntry userName "$user_requested" msg_level_log
if { "$user_requested" eq "$user" } {
addLogEntry userStatus "authenticated" msg_level_log
} else {
addLogEntry userStatus "$user" msg_level_log
}
addLogEntry requestedAction "$action" msg_level_log
addLogEntry DB "$coursedbfname" msg_level_log
addLogEntry sortCol "$sortCol" msg_level_log
addLogEntry programVersion "$VERSION" msg_level_log
set dbfile "$GradebookServerConfig(grades_db_dir)/$coursedbfname"
if { [file exists $dbfile] && ("$coursedbfname" ne "") } {
sqlite3 db $dbfile
htmlHeader
puts "<body>"
puts {\
<script src="/~evmik/GradeBook.js"></script>
}
set permission_list [ AccessGroupRights db $user ]
htmlTop $permission_list
ChoseAction $action $permission_list $user
db close
} else {
htmlHeaderDBSelector
set permission_list [list GroupName guest]
puts "<body>"
if { "$coursedbfname" ne "__DB_not_set__" } {
htmlErrorMsg "No requested database {$coursedbfname}. Please, check your url"
dbg "Attemt to access non existing database: {$dbfile}" msg_level_info
}
html_Show_Classes_List $permission_list $user
}
dbg $permission_list msg_level_info
htmlFooter $permission_list
puts "<script>onPageLoad();</script>"
puts "</body>"
###################### Main script ends #################################
} errStat ]
if { $err } {
addLogEntry Error "$errStat" msg_level_critical
htmlErrorMsg "Something went wrong, please, ask admin to have a look at logs around [timestamp]"
}
logEntryToLogFile
# vim: ts=2 sw=2 foldmethod=indent:
|