-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUtil.dart
191 lines (138 loc) · 4.03 KB
/
Util.dart
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
part of RequestHandler;
/**
*
* Utility methods
*
**/
// create html for error page
String createErrorPage(String errorMessage) {
return new StringBuffer('''
<!DOCTYPE html>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<div align="center">
<h1> *** An Internal Error occured ***</h1><br>
<p>Server error occured: ${cleanText(new StringBuffer(errorMessage)).toString()}</p><br>
<p><a href='/index.html'>Go to Login Page</a></p><br>
</div>
</body>
</html>''').toString();
}
// create html for login error page
String createLoginErrorPage() {
return new StringBuffer('''
<!DOCTYPE html>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<div align="center">
<h1> *** You are not logged in or your session expired! ***</h1><br>
<div><a href='/index.html'>Go to Login Page</a></div>
</div>
</body>
</html>''').toString();
}
// Create HTML response for request path
String createHtmlResponse(String path) {
//log("requested $path req.path: ${req.path}");
File file = new File(path);
if(file != null) { return file.readAsStringSync(Encoding.UTF_8);
} else { return createErrorPage("Error reading file ${path}!");
}
}
// check a list of strings for a specific string (param=value)
// if exists return value part of string
String returnStringIfInList(String string, List list){
for(int i = 0; i < list.length; i++){
if(list[i].startsWith(string)) return list[i].replaceFirst(string, "");
}
return "";
}
/**
* check registration parameters of POST request
* if valid and user doesn't exist persist username and password
**/
bool checkRegistrationParameters(String body){
bool result = true;
List split = body.split("&");
// something wrong with parameters
if(split.length < 5) { return false;
// parameters seem ok
} else {
String username = returnStringIfInList("username=", split);
String password = returnStringIfInList("password=", split);
String repeatpassword = returnStringIfInList("repeatpassword=", split);
String age = returnStringIfInList("age=", split);
String email = returnStringIfInList("email=", split);
if(username != "" && password != "" && repeatpassword != "" && age != "" && email != ""){
if(!userExists(username)){
if(password == repeatpassword){
File file = new File("data.txt");
if (file.existsSync()) {
OutputStream out = file.openOutputStream(FileMode.APPEND);
out.writeString("\r\n$username=$password");
out.close();
log("Registration of username $username successful!");
}
}
else {
return false;
}
}
// user exists
else {
log("Registration failed - user already exists.");
return false;
}
}
else {
return false;
}
}
return result;
}
// html escaping
StringBuffer cleanText(StringBuffer text) {
String s = text.toString();
text.clear();
text = new StringBuffer();
for (int i = 0; i < s.length; i++){
if (s[i] == '&') { text.write('&');
} else if (s[i] == '"') { text.write('"');
} else if (s[i] == "'") { text.write(''');
} else if (s[i] == '<') { text.write('<');
} else if (s[i] == '>') { text.write('>');
} else { text.write(s[i]);
}
}
return text;
}
List readNonTextFile(String path){
File file = new File(".$path");
if(file != null){
return file.readAsBytesSync();
}
else {
return new List();
}
}
// simple logging method printing time and msg
void log(var msg) => print("${new DateTime.now()}: $msg");
// log to file server.log
void logToFile(String msg){
File file = new File('server.log');
OutputStream out;
if(file.existsSync()){
out = file.openOutputStream(FileMode.APPEND);
}
else {
out = file.openOutputStream(FileMode.WRITE);
}
out.writeString("\r\n${new DateTime.now()}: $msg");
out.close();
}