Fixed linting errors.

This commit is contained in:
MisterWil 2019-02-15 10:07:25 -08:00
parent 2e5c877dd1
commit b8da1dec4a
2 changed files with 58 additions and 50 deletions

View File

@ -13,24 +13,32 @@ import (
"time" "time"
) )
// AuthStatus defines the different types of auth logging that occur
type AuthStatus string type AuthStatus string
const ( const (
// Default logging formats // DefaultStandardLoggingFormat defines the default standard log format
DefaultStandardLoggingFormat = "[{{.Timestamp}}] [{{.File}}] {{.Message}}" DefaultStandardLoggingFormat = "[{{.Timestamp}}] [{{.File}}] {{.Message}}"
DefaultAuthLoggingFormat = "{{.Client}} - {{.Username}} [{{.Timestamp}}] [{{.Status}}] {{.Message}}" // DefaultAuthLoggingFormat defines the default auth log format
DefaultRequestLoggingFormat = "{{.Client}} - {{.Username}} [{{.Timestamp}}] {{.Host}} {{.RequestMethod}} {{.Upstream}} {{.RequestURI}} {{.Protocol}} {{.UserAgent}} {{.StatusCode}} {{.ResponseSize}} {{.RequestDuration}}" DefaultAuthLoggingFormat = "{{.Client}} - {{.Username}} [{{.Timestamp}}] [{{.Status}}] {{.Message}}"
// DefaultRequestLoggingFormat defines the default request log format
DefaultRequestLoggingFormat = "{{.Client}} - {{.Username}} [{{.Timestamp}}] {{.Host}} {{.RequestMethod}} {{.Upstream}} {{.RequestURI}} {{.Protocol}} {{.UserAgent}} {{.StatusCode}} {{.ResponseSize}} {{.RequestDuration}}"
// Auth statuses // AuthSuccess indicates that an auth attempt has succeeded explicitly
AuthSuccess AuthStatus = "AuthSuccess" AuthSuccess AuthStatus = "AuthSuccess"
// AuthFailure indicates that an auth attempt has failed explicitly
AuthFailure AuthStatus = "AuthFailure" AuthFailure AuthStatus = "AuthFailure"
AuthError AuthStatus = "AuthError" // AuthError indicates that an auth attempt has failed due to an error
AuthError AuthStatus = "AuthError"
// General logging config // Llongfile flag to log full file name and line number: /a/b/c/d.go:23
Llongfile = 1 << iota // full file name and line number: /a/b/c/d.go:23 Llongfile = 1 << iota
Lshortfile // final file name element and line number: d.go:23. overrides Llongfile // Lshortfile flag to log final file name element and line number: d.go:23. overrides Llongfile
LUTC // use UTC rather than the local time zone Lshortfile
LstdFlags = Lshortfile // initial values for the standard logger // LUTC flag to log UTC datetime rather than the local time zone
LUTC
// LstdFlags flag for initial values for the logger
LstdFlags = Lshortfile
) )
// These are the containers for all values that are available as variables in the logging formats. // These are the containers for all values that are available as variables in the logging formats.
@ -68,6 +76,11 @@ type reqLogMessageData struct {
Username string Username string
} }
// A Logger represents an active logging object that generates lines of
// output to an io.Writer passed through a formatter. Each logging
// operation makes a single call to the Writer's Write method. A Logger
// can be used simultaneously from multiple goroutines; it guarantees to
// serialize access to the Writer.
type Logger struct { type Logger struct {
mu sync.Mutex mu sync.Mutex
flag int flag int
@ -96,23 +109,6 @@ func New(flag int) *Logger {
var std = New(LstdFlags) var std = New(LstdFlags)
// Cheap integer to fixed-width decimal ASCII. Give a negative width to avoid zero-padding.
func itoa(buf *[]byte, i int, wid int) {
// Assemble decimal in reverse order.
var b [20]byte
bp := len(b) - 1
for i >= 10 || wid > 1 {
wid--
q := i / 10
b[bp] = byte('0' + i - q*10)
bp--
i = q
}
// i < 10
b[bp] = byte('0' + i)
*buf = append(*buf, b[bp:]...)
}
// Output a standard log template with a simple message. // Output a standard log template with a simple message.
// Write a final newline at the end of every message. // Write a final newline at the end of every message.
func (l *Logger) Output(calldepth int, message string) { func (l *Logger) Output(calldepth int, message string) {
@ -139,9 +135,9 @@ func (l *Logger) Output(calldepth int, message string) {
l.writer.Write([]byte("\n")) l.writer.Write([]byte("\n"))
} }
// Print auth details to the logger. Requires an http.Request to log details. // PrintAuth writes auth info to the logger. Requires an http.Request to
// Remaining arguments are handled in the manner of fmt.Sprintf. // log request details. Remaining arguments are handled in the manner of
// Writes a final newline to the end of every message. // fmt.Sprintf. Writes a final newline to the end of every message.
func (l *Logger) PrintAuth(username string, req *http.Request, status AuthStatus, format string, a ...interface{}) { func (l *Logger) PrintAuth(username string, req *http.Request, status AuthStatus, format string, a ...interface{}) {
if !l.authEnabled { if !l.authEnabled {
return return
@ -173,8 +169,9 @@ func (l *Logger) PrintAuth(username string, req *http.Request, status AuthStatus
l.writer.Write([]byte("\n")) l.writer.Write([]byte("\n"))
} }
// Print HTTP request details to the Logger. // PrintReq writes request details to the Logger using the http.Request,
// Writes a final newline to the end of every message. // url, and timestamp of the request. Writes a final newline to the end
// of every message.
func (l *Logger) PrintReq(username, upstream string, req *http.Request, url url.URL, ts time.Time, status int, size int) { func (l *Logger) PrintReq(username, upstream string, req *http.Request, url url.URL, ts time.Time, status int, size int) {
if !l.reqEnabled { if !l.reqEnabled {
return return
@ -219,7 +216,9 @@ func (l *Logger) PrintReq(username, upstream string, req *http.Request, url url.
l.writer.Write([]byte("\n")) l.writer.Write([]byte("\n"))
} }
// Obtains file and line number info for the standard output log // GetFileLineString will find the caller file and line number
// taking in to account the calldepth to iterate up the stack
// to find the non-logging call location.
func (l *Logger) GetFileLineString(calldepth int) string { func (l *Logger) GetFileLineString(calldepth int) string {
var file string var file string
var line int var line int
@ -245,7 +244,7 @@ func (l *Logger) GetFileLineString(calldepth int) string {
return fmt.Sprintf("%s:%d", file, line) return fmt.Sprintf("%s:%d", file, line)
} }
// Parse an HTTP request for the client/remote IP // GetClient parses an HTTP request for the client/remote IP address.
func GetClient(req *http.Request) string { func GetClient(req *http.Request) string {
client := req.Header.Get("X-Real-IP") client := req.Header.Get("X-Real-IP")
if client == "" { if client == "" {
@ -259,7 +258,7 @@ func GetClient(req *http.Request) string {
return client return client
} }
// Returns a formatted timestamp // FormatTimestamp returns a formatted timestamp.
func (l *Logger) FormatTimestamp(ts time.Time) string { func (l *Logger) FormatTimestamp(ts time.Time) string {
if l.flag&LUTC != 0 { if l.flag&LUTC != 0 {
ts = ts.UTC() ts = ts.UTC()
@ -282,42 +281,42 @@ func (l *Logger) SetFlags(flag int) {
l.flag = flag l.flag = flag
} }
// Set all logging enabled for the logger. // SetStandardEnabled enables or disables standard logging.
func (l *Logger) SetStandardEnabled(e bool) { func (l *Logger) SetStandardEnabled(e bool) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
l.stdEnabled = e l.stdEnabled = e
} }
// Set auth logging enabled for the standard logger // SetAuthEnabled enables or disables auth logging.
func (l *Logger) SetAuthEnabled(e bool) { func (l *Logger) SetAuthEnabled(e bool) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
l.authEnabled = e l.authEnabled = e
} }
// Set request logging enabled for the standard logger // SetReqEnabled enabled or disables request logging.
func (l *Logger) SetReqEnabled(e bool) { func (l *Logger) SetReqEnabled(e bool) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
l.reqEnabled = e l.reqEnabled = e
} }
// Set the output template for the standard logger // SetStandardTemplate sets the template for standard logging.
func (l *Logger) SetStandardTemplate(t string) { func (l *Logger) SetStandardTemplate(t string) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
l.stdLogTemplate = template.Must(template.New("std-log").Parse(t)) l.stdLogTemplate = template.Must(template.New("std-log").Parse(t))
} }
// Set the auth template for the standard logger // SetAuthTemplate sets the template for auth logging.
func (l *Logger) SetAuthTemplate(t string) { func (l *Logger) SetAuthTemplate(t string) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
l.authTemplate = template.Must(template.New("auth-log").Parse(t)) l.authTemplate = template.Must(template.New("auth-log").Parse(t))
} }
// Set the request template for the standard logger // SetReqTemplate sets the template for request logging.
func (l *Logger) SetReqTemplate(t string) { func (l *Logger) SetReqTemplate(t string) {
l.mu.Lock() l.mu.Lock()
defer l.mu.Unlock() defer l.mu.Unlock()
@ -326,7 +325,7 @@ func (l *Logger) SetReqTemplate(t string) {
// These functions utilize the standard logger. // These functions utilize the standard logger.
// Returns a formatted timestamp for the standard logger. // FormatTimestamp returns a formatted timestamp for the standard logger.
func FormatTimestamp(ts time.Time) string { func FormatTimestamp(ts time.Time) string {
return std.FormatTimestamp(ts) return std.FormatTimestamp(ts)
} }
@ -348,32 +347,38 @@ func SetOutput(w io.Writer) {
std.writer = w std.writer = w
} }
// Set output logging enabled for the standard logger // SetStandardEnabled enables or disables standard logging for the
// standard logger.
func SetStandardEnabled(e bool) { func SetStandardEnabled(e bool) {
std.SetStandardEnabled(e) std.SetStandardEnabled(e)
} }
// Set auth logging enabled for the standard logger // SetAuthEnabled enables or disables auth logging for the standard
// logger.
func SetAuthEnabled(e bool) { func SetAuthEnabled(e bool) {
std.SetAuthEnabled(e) std.SetAuthEnabled(e)
} }
// Set request logging enabled for the standard logger // SetReqEnabled enables or disables request logging for the
// standard logger.
func SetReqEnabled(e bool) { func SetReqEnabled(e bool) {
std.SetReqEnabled(e) std.SetReqEnabled(e)
} }
// Set the output template for the standard logger // SetStandardTemplate sets the template for standard logging for
// the standard logger.
func SetStandardTemplate(t string) { func SetStandardTemplate(t string) {
std.SetStandardTemplate(t) std.SetStandardTemplate(t)
} }
// Set the auth template for the standard logger // SetAuthTemplate sets the template for auth logging for the
// standard logger.
func SetAuthTemplate(t string) { func SetAuthTemplate(t string) {
std.SetAuthTemplate(t) std.SetAuthTemplate(t)
} }
// Set the request template for the standard logger // SetReqTemplate sets the template for request logging for the
// standard logger.
func SetReqTemplate(t string) { func SetReqTemplate(t string) {
std.SetReqTemplate(t) std.SetReqTemplate(t)
} }
@ -441,7 +446,7 @@ func PrintAuthf(username string, req *http.Request, status AuthStatus, format st
std.PrintAuth(username, req, status, format, a...) std.PrintAuth(username, req, status, format, a...)
} }
// PrintAuthf writes request details to the standard logger. // PrintReq writes request details to the standard logger.
func PrintReq(username, upstream string, req *http.Request, url url.URL, ts time.Time, status int, size int) { func PrintReq(username, upstream string, req *http.Request, url url.URL, ts time.Time, status int, size int) {
std.PrintReq(username, upstream, req, url, ts, status, size) std.PrintReq(username, upstream, req, url, ts, status, size)
} }

View File

@ -854,6 +854,9 @@ func (p *OAuthProxy) Authenticate(rw http.ResponseWriter, req *http.Request) int
if session == nil { if session == nil {
session, err = p.CheckBasicAuth(req) session, err = p.CheckBasicAuth(req)
if err != nil {
logger.Printf("Error during basic auth validation: %s", err)
}
} }
if session == nil { if session == nil {
@ -929,7 +932,7 @@ func (p *OAuthProxy) CheckBasicAuth(req *http.Request) (*providers.SessionState,
return &providers.SessionState{User: pair[0]}, nil return &providers.SessionState{User: pair[0]}, nil
} }
logger.PrintAuthf(pair[0], req, logger.AuthFailure, "Invalid authentication via basic auth; not in Htpasswd File") logger.PrintAuthf(pair[0], req, logger.AuthFailure, "Invalid authentication via basic auth; not in Htpasswd File")
return nil, fmt.Errorf("%s not in HtpasswdFile", pair[0]) return nil, nil
} }
// isAjax checks if a request is an ajax request // isAjax checks if a request is an ajax request