blob: afdc7ca3e1191c3bae2f9daae772cf90a571123a (
plain) (
blame)
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
|
use std::io::Write;
use std::env;
use std::collections::btree_map::BTreeMap;
fn write_stderr( msg : String ) {
let mut stderr = std::io::stderr();
write!(&mut stderr, "{}", msg).unwrap();
}
fn write_stderr_s( msg : &str ) {
write_stderr( msg.to_string() );
}
fn write_stdout( msg : String ) {
let mut stdout = std::io::stdout();
write!(&mut stdout, "{}", msg).unwrap();
}
fn write_stdout_s( msg : &str ) {
write_stdout( msg.to_string() );
}
fn html_escape( msg : String ) -> String {
let mut copy : String = String::with_capacity( msg.len() );
for thechar in msg.chars() {
if thechar == '&' {
copy.push_str( "&" );
} else if thechar == '<' {
copy.push_str( "<" );
} else if thechar == '>' {
copy.push_str( ">" );
} else if thechar == '\"' {
copy.push_str( """ );
} else {
copy.push( thechar );
}
}
return copy;
}
fn main() {
write_stdout_s( "Status: 301 Moved Permanently\n" );
write_stdout_s( "Location: https://www.vg.no\n" );
write_stdout_s( "Content-type: text/html\n" );
write_stdout_s( "\n" );
write_stdout_s( "<html>\n" );
write_stdout_s( " <head>\n" );
write_stdout_s( " <title>Rust CGI Test</title>\n" );
write_stdout_s( " <style type=\"text/css\">\n" );
write_stdout_s( " td { border:1px solid black; }\n" );
write_stdout_s( " td { font-family:monospace; }\n" );
write_stdout_s( " table { border-collapse:collapse; }\n" );
write_stdout_s( " </style>\n" );
write_stdout_s( " </head>\n" );
write_stdout_s( " <body>\n" );
write_stdout_s( " <h1>Environment</h1>\n" );
write_stdout_s( " <table>\n" );
write_stdout_s( " <tr><th>Key</th><th>Value</th></tr>\n" );
// copy environment into a BTreeMap which is sorted
let mut sortedmap : BTreeMap<String,String> = BTreeMap::new();
for (key, value) in env::vars() {
sortedmap.insert( key, value );
}
// output environment into HTML table
for (key, value) in sortedmap {
write_stdout(
format!(
" <tr><td>{}</td><td>{}</td></tr>\n",
html_escape( key ),
html_escape( value )
)
);
}
write_stdout_s( " </table>\n" );
write_stdout_s( " </body>\n" );
write_stdout_s( "</html>\n" );
}
|