implemented authorization
This commit is contained in:
@@ -90,7 +90,7 @@ func (conn *Connection) Start() {
|
||||
} else {
|
||||
// valid request
|
||||
conn.log.Info(req.Method, " ", req.Url, " ", req.Protocol)
|
||||
conn.log.Trace("request headers: ", req.Headers)
|
||||
conn.log.Trace("request headers: ", HeadersToString(req.Headers, SecretHeaders))
|
||||
res = conn.callback(req)
|
||||
if req.HasUnreadBody() {
|
||||
res = conn.CreateErrorResponse(req, true, ErrHasUnreadBody)
|
||||
@@ -99,7 +99,7 @@ func (conn *Connection) Start() {
|
||||
|
||||
conn.log.Info("sending response: ", res.Status,
|
||||
" content-length: ", res.Headers["content-length"])
|
||||
conn.log.Trace("response headers: ", res.Headers)
|
||||
conn.log.Trace("response headers: ", HeadersToString(res.Headers, SecretHeaders))
|
||||
err = conn.sendResponse(res)
|
||||
if err != nil {
|
||||
conn.logError(err)
|
||||
|
||||
@@ -122,6 +122,17 @@ func (res *Response) WithBodyReader(body io.Reader,
|
||||
return res
|
||||
}
|
||||
|
||||
func (res *Response) WithHeader(k, v string) *Response {
|
||||
res.Headers[k] = v
|
||||
return res
|
||||
}
|
||||
func (res *Response) WithHeaderI(k string, v int64) *Response {
|
||||
return res.WithHeader(k, strconv.FormatInt(v, 10))
|
||||
}
|
||||
func (res *Response) WithHeaderU(k string, v uint64) *Response {
|
||||
return res.WithHeader(k, strconv.FormatUint(v, 10))
|
||||
}
|
||||
|
||||
func (conn *Connection) CreateErrorResponse(
|
||||
req *Request, wantsClose bool, httpErr *HttpError,
|
||||
) *Response {
|
||||
|
||||
@@ -8,6 +8,31 @@ import (
|
||||
|
||||
const HeaderTimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT"
|
||||
|
||||
type SetStr map[string]struct{}
|
||||
|
||||
var SecretHeaders = SetStr{
|
||||
"authorization": {},
|
||||
}
|
||||
|
||||
func HeadersToString(headers HeadersMap, secretHeaders SetStr) string {
|
||||
sb := sh.StringBuilder{Buf: make([]byte, 0, len(headers)*64)}
|
||||
sb.AddS("{ ")
|
||||
for k, v := range headers {
|
||||
sb.AddB('"').AddS(k).AddS(`": "`)
|
||||
if _, ok := secretHeaders[k]; ok {
|
||||
sb.AddS("***")
|
||||
} else {
|
||||
sb.AddS(v)
|
||||
}
|
||||
sb.AddS(`", `)
|
||||
}
|
||||
if sb.Len() > 2 {
|
||||
sb.Remove(2)
|
||||
}
|
||||
sb.AddS(" }")
|
||||
return sb.StringUnsafe()
|
||||
}
|
||||
|
||||
// search in splitted parts of header value
|
||||
func HeaderValueContains(sourceSplit []string, target string) bool {
|
||||
for _, v := range sourceSplit {
|
||||
|
||||
Reference in New Issue
Block a user