Skip to content

Commit

Permalink
feat(middleware): add log
Browse files Browse the repository at this point in the history
  • Loading branch information
MuXiu1997 committed Jan 27, 2023
1 parent 61af42c commit 789e4cf
Show file tree
Hide file tree
Showing 10 changed files with 673 additions and 0 deletions.
1 change: 1 addition & 0 deletions .traefik.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ testData:
apiSecretKey: optional_secret_key_if_not_on_the_internal_network
authPath: /_auth
jwtSecretKey: optional_secret_key
logLevel: info
whitelist:
ids:
- 996
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ providing a more secure way for users to access protected routes.
authPath: /_auth
# optional jwt secret key, if not set, the plugin will generate a random key
jwtSecretKey: optional_secret_key
# The log level, defaults to info
# Available values: debug, info, warn, error
logLevel: info
# whitelist
whitelist:
# The list of GitHub user ids that in the whitelist
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/MuXiu1997/traefik-github-oauth-plugin
go 1.19

require (
github.com/apsdehal/go-logger v0.0.0-20190515212710-b0d6ccfee0e6
github.com/dghubble/sling v1.4.1
github.com/gin-gonic/gin v1.8.2
github.com/golang-jwt/jwt/v4 v4.4.3
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
github.com/apsdehal/go-logger v0.0.0-20190515212710-b0d6ccfee0e6 h1:qISSdUEX4sjDHfdD/vf65fhuCh3pIhiILDB7ktjJrqU=
github.com/apsdehal/go-logger v0.0.0-20190515212710-b0d6ccfee0e6/go.mod h1:U3/8D6R9+bVpX0ORZjV+3mU9pQ86m7h1lESgJbXNvXA=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
Expand Down
32 changes: 32 additions & 0 deletions middleware_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import (
"encoding/hex"
"fmt"
"net/http"
"os"
"strings"

"github.com/MuXiu1997/traefik-github-oauth-plugin/internal/app/traefik-github-oauth-server/model"
"github.com/MuXiu1997/traefik-github-oauth-plugin/internal/pkg/constant"
"github.com/MuXiu1997/traefik-github-oauth-plugin/internal/pkg/jwt"
gologger "github.com/apsdehal/go-logger"
"github.com/dghubble/sling"
"github.com/scylladb/go-set/strset"
)
Expand All @@ -25,6 +27,7 @@ type Config struct {
ApiSecretKey string `json:"api_secret_key,omitempty"`
AuthPath string `json:"auth_path,omitempty"`
JwtSecretKey string `json:"jwt_secret_key,omitempty"`
LogLevel string `json:"log_level,omitempty"`
Whitelist ConfigWhitelist `json:"whitelist,omitempty"`
}

Expand Down Expand Up @@ -62,16 +65,39 @@ type TraefikGithubOauthMiddleware struct {
jwtSecretKey string
whitelistIdSet *strset.Set
whitelistLoginSet *strset.Set

logger *gologger.Logger
}

var _ http.Handler = (*TraefikGithubOauthMiddleware)(nil)

// New creates a new TraefikGithubOauthMiddleware.
func New(ctx context.Context, next http.Handler, config *Config, name string) (http.Handler, error) {
// region Setup logger
logLevel := gologger.InfoLevel
switch config.LogLevel {
case "DEBUG", "debug":
logLevel = gologger.DebugLevel
case "INFO", "info":
logLevel = gologger.InfoLevel
case "WARNING", "warning", "WARN", "warn":
logLevel = gologger.WarningLevel
case "ERROR", "error":
logLevel = gologger.ErrorLevel
}
logger, err := gologger.New("TraefikGithubOauthMiddleware", os.Stdout, 0)
if err != nil {
return nil, err
}
logger.SetLogLevel(logLevel)
logger.SetFormat("[%{module}] | %{level} | %{time} | %{message}")
// endregion Setup logger

authPath := config.AuthPath
if !strings.HasPrefix(authPath, "/") {
authPath = "/" + authPath
}

return &TraefikGithubOauthMiddleware{
ctx: ctx,
next: next,
Expand All @@ -83,6 +109,8 @@ func New(ctx context.Context, next http.Handler, config *Config, name string) (h
jwtSecretKey: config.JwtSecretKey,
whitelistIdSet: strset.New(config.Whitelist.Ids...),
whitelistLoginSet: strset.New(config.Whitelist.Logins...),

logger: logger,
}, nil
}

Expand All @@ -99,6 +127,7 @@ func (p *TraefikGithubOauthMiddleware) ServeHTTP(rw http.ResponseWriter, req *ht
func (p *TraefikGithubOauthMiddleware) handleRequest(rw http.ResponseWriter, req *http.Request) {
user, err := p.getGitHubUserFromCookie(req)
if err != nil {
p.logger.Debugf("handleRequest: getGitHubUserFromCookie: %s\n", err.Error())
if req.Method == http.MethodGet {
p.redirectToOAuthPage(rw, req)
}
Expand All @@ -117,11 +146,13 @@ func (p *TraefikGithubOauthMiddleware) handleAuthRequest(rw http.ResponseWriter,
rid := req.URL.Query().Get(constant.QUERY_KEY_REQUEST_ID)
result, err := p.getAuthResult(rid)
if err != nil {
p.logger.Debugf("handleAuthRequest: getAuthResult: %s\n", err.Error())
http.Error(rw, err.Error(), http.StatusInternalServerError)
return
}
tokenString, err := jwt.GenerateJwtTokenString(result.GitHubUserID, result.GitHubUserLogin, p.jwtSecretKey)
if err != nil {
p.logger.Debugf("handleAuthRequest: GenerateJwtTokenString: %s\n", err.Error())
http.Error(rw, err.Error(), http.StatusInternalServerError)
return
}
Expand All @@ -136,6 +167,7 @@ func (p *TraefikGithubOauthMiddleware) handleAuthRequest(rw http.ResponseWriter,
func (p *TraefikGithubOauthMiddleware) redirectToOAuthPage(rw http.ResponseWriter, req *http.Request) {
oAuthPageURL, err := p.generateOAuthPageURL(getRawRequestUrl(req), p.getAuthURL(req))
if err != nil {
p.logger.Debugf("redirectToOAuthPage: generateOAuthPageURL: %s\n", err.Error())
http.Error(rw, err.Error(), http.StatusInternalServerError)
return
}
Expand Down
2 changes: 2 additions & 0 deletions vendor/github.com/apsdehal/go-logger/.travis.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions vendor/github.com/apsdehal/go-logger/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

146 changes: 146 additions & 0 deletions vendor/github.com/apsdehal/go-logger/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 789e4cf

Please sign in to comment.