summary refs log tree commit diff stats
path: root/http.go
blob: 1f6126c21e94565fb4a3ae94456d5dff09f0cca6 (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
package main

import (
	"context"
	"log"
	"net"
	"net/http"
	"strings"
)

// Attaches a request's IP address to the request's context
func newCtxUserIP(ctx context.Context, r *http.Request) context.Context {

	base := strings.Split(r.RemoteAddr, ":")
	uip := base[0]

	return context.WithValue(ctx, ctxKey, uip)
}

// Retrieves a request's IP address from the request's context
func getIPFromCtx(ctx context.Context) net.IP {

	uip, ok := ctx.Value(ctxKey).(string)
	if !ok {
		log.Printf("Couldn't retrieve IP from request\n")
	}

	return net.ParseIP(uip)
}

// Shim function to modify/pass context value to a handler
func ipMiddleware(hop http.Handler) http.Handler {

	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		ctx := newCtxUserIP(r.Context(), r)
		hop.ServeHTTP(w, r.WithContext(ctx))
	})
}

// log output for 200s
func log200(r *http.Request) {

	uip := getIPFromCtx(r.Context())
	log.Printf("*** %v :: 200 :: %v %v\n", uip, r.Method, r.URL)
}

// log output for 400s
func log400(w http.ResponseWriter, r *http.Request, err error) {
	uip := getIPFromCtx(r.Context())
	log.Printf("*** %v :: 400 :: %v %v :: %v\n", uip, r.Method, r.URL, err)
	http.Error(w, err.Error(), http.StatusBadRequest)
}

// log output for 404s
func log404(w http.ResponseWriter, r *http.Request, err error) {

	uip := getIPFromCtx(r.Context())
	log.Printf("*** %v :: 404 :: %v %v :: %v\n", uip, r.Method, r.URL, err)
	http.Error(w, err.Error(), http.StatusNotFound)
}

// log output for 500s
func log500(w http.ResponseWriter, r *http.Request, err error) {

	uip := getIPFromCtx(r.Context())
	log.Printf("*** %v :: 500 :: %v %v :: %v\n", uip, r.Method, r.URL, err)
	http.Error(w, err.Error(), http.StatusInternalServerError)
}
color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
[colours]
bkgnd=default
titlebar=blue
titlebar.text=bold_white
titlebar.brackets=white
titlebar.unencrypted=cyan
titlebar.encrypted=white
titlebar.untrusted=cyan
titlebar.trusted=white
titlebar.online=bold_white
titlebar.offline=cyan
titlebar.away=white
titlebar.chat=bold_white
titlebar.dnd=cyan
titlebar.xa=bold_cyan
statusbar=blue
statusbar.text=bold_white
statusbar.brackets=white
statusbar.active=cyan
statusbar.new=white
main.text=blue
main.text.me=bold_cyan
main.text.them=bold_white
main.splash=bold_white
main.time=cyan
input.text=white
subscribed=bold_cyan
unsubscribed=blue
otr.started.trusted=white
otr.started.untrusted=cyan
otr.ended=cyan
otr.trusted=white
otr.untrusted=cyan
online=bold_cyan
away=bold_blue
chat=white
dnd=blue
xa=cyan
offline=bold_black
incoming=bold_cyan
mention=bold_blue
trigger=bold_blue
typing=cyan
gone=blue
error=bold_white
roominfo=white
roommention=bold_blue
roommention.term=bold_blue
roomtrigger=bold_blue
roomtrigger.term=bold_blue
me=cyan
them=white
roster.header=bold_white
roster.chat=white
roster.online=bold_cyan
roster.away=bold_blue
roster.xa=cyan
roster.dnd=blue
roster.offline=bold_black
roster.chat.active=white
roster.online.active=bold_cyan
roster.away.active=bold_blue
roster.xa.active=cyan
roster.dnd.active=blue
roster.offline.active=bold_black
roster.chat.unread=white
roster.online.unread=bold_cyan
roster.away.unread=bold_blue
roster.xa.unread=cyan
roster.dnd.unread=blue
roster.offline.unread=bold_black
roster.room=cyan
roster.room.unread=bold_cyan
roster.room.mention=bold_blue
roster.room.trigger=bold_blue
occupants.header=bold_white
receipt.sent=white