Commit 0dd8dda34000b6b83b236a244b5cc968ea4dd0f6
1 parent
1469f25bfc
Exists in
master
traffic logs handler
Showing
1 changed file
with
59 additions
and
0 deletions
Show diff stats
middleware/main.go
1 | package middleware | 1 | package middleware |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "fmt" | ||
5 | "io/ioutil" | ||
4 | "net/http" | 6 | "net/http" |
7 | |||
8 | web "git.to-net.rs/marko.tikvic/webutility" | ||
5 | ) | 9 | ) |
6 | 10 | ||
7 | func Headers(h http.HandlerFunc) http.HandlerFunc { | 11 | func Headers(h http.HandlerFunc) http.HandlerFunc { |
8 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(h))) | 12 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(h))) |
9 | } | 13 | } |
10 | 14 | ||
11 | func AuthUser(roles string, h http.HandlerFunc) http.HandlerFunc { | 15 | func AuthUser(roles string, h http.HandlerFunc) http.HandlerFunc { |
12 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(Auth(roles, h)))) | 16 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(Auth(roles, h)))) |
13 | } | 17 | } |
14 | 18 | ||
15 | func AuthUserAndLog(roles string, h http.HandlerFunc) http.HandlerFunc { | 19 | func AuthUserAndLog(roles string, h http.HandlerFunc) http.HandlerFunc { |
16 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(LogHTTP(Auth(roles, h))))) | 20 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(LogHTTP(Auth(roles, h))))) |
17 | } | 21 | } |
18 | 22 | ||
19 | func LogTraffic(h http.HandlerFunc) http.HandlerFunc { | 23 | func LogTraffic(h http.HandlerFunc) http.HandlerFunc { |
20 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(LogHTTP(h)))) | 24 | return SetAccessControlHeaders(IgnoreOptionsRequests(ParseForm(LogHTTP(h)))) |
21 | } | 25 | } |
26 | |||
27 | func TrafficLogsHandler(w http.ResponseWriter, req *http.Request) { | ||
28 | switch req.Method { | ||
29 | case "GET": | ||
30 | files, err := ioutil.ReadDir(httpLogger.GetOutDir() + "/") | ||
31 | if err != nil { | ||
32 | web.InternalServerError(w, req, err.Error()) | ||
33 | return | ||
34 | } | ||
35 | |||
36 | web.SetContentType(w, "text/html; charset=utf-8") | ||
37 | web.SetResponseStatus(w, http.StatusOK) | ||
38 | |||
39 | web.WriteResponse(w, []byte("<body style='background-color: black; color: white'>")) | ||
40 | inputForm := ` | ||
41 | <div> | ||
42 | <form action="/api/v1/logs" method="POST" target="_blank"> | ||
43 | Username:<br> | ||
44 | <input type="text" name="username"><br> | ||
45 | Password:<br> | ||
46 | <input type="password" name="password"><br> | ||
47 | Log:<br> | ||
48 | <input type="text" name="logfile"><br> | ||
49 | <input type="submit" value="View"> | ||
50 | </form> | ||
51 | </div>` | ||
52 | web.WriteResponse(w, []byte(inputForm)) | ||
53 | |||
54 | web.WriteResponse(w, []byte("<table>")) | ||
55 | web.WriteResponse(w, []byte("<tr><th>Name</th><th>Size</th></tr>")) | ||
56 | for i := range files { | ||
57 | name := files[i].Name() | ||
58 | size := files[i].Size() | ||
59 | div := fmt.Sprintf(`<tr><td>%s</td><td style="text-align:right">%dB</td></tr>`, name, size) | ||
60 | web.WriteResponse(w, []byte(div)) | ||
61 | } | ||
62 | web.WriteResponse(w, []byte("</table></body>")) | ||
63 | |||
64 | case "POST": | ||
65 | web.SetContentType(w, "text/html; charset=utf-8") | ||
66 | |||
67 | logfile := req.FormValue("logfile") | ||
68 | content, err := web.ReadFileContent(httpLogger.GetOutDir() + "/" + logfile) | ||
69 | if err != nil { | ||
70 | web.InternalServerError(w, req, err.Error()) | ||
71 | return | ||
72 | } | ||
73 | web.SetResponseStatus(w, http.StatusOK) | ||
74 | web.WriteResponse(w, []byte("<body style='background-color: black; color: white'>")) | ||
75 | web.WriteResponse(w, []byte("<pre>")) | ||
76 | web.WriteResponse(w, content) | ||
77 | web.WriteResponse(w, []byte("</pre></body>")) | ||
78 | return | ||
79 | } | ||
80 | } | ||
22 | 81 |