implemented authorization

This commit is contained in:
Altair-sh
2026-11-04 17:08:55 +01:00
parent beff40ae8c
commit 7987c9e580
8 changed files with 124 additions and 11 deletions
+2 -2
View File
@@ -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)
+11
View File
@@ -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 {
+25
View File
@@ -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 {