Skip to content

Commit

Permalink
Feat: added console writer for local logging
Browse files Browse the repository at this point in the history
  • Loading branch information
guacamole committed Mar 26, 2022
1 parent a3dd356 commit 2d88371
Show file tree
Hide file tree
Showing 11 changed files with 204 additions and 64 deletions.
2 changes: 1 addition & 1 deletion auth/basic_auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (a *auth) BasicAuth() echo.MiddlewareFunc {
printInMiddleware := true
defer func() {
if printInMiddleware {
a.logger.Log(ctx).Send()
a.logger.Log(ctx)
}
}()

Expand Down
11 changes: 7 additions & 4 deletions auth/signin.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,8 @@ import (

func (a *auth) SignIn(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
a.logger.Log(ctx).Send()
}()
var user User

var user User
if err := json.NewDecoder(ctx.Request().Body).Decode(&user); err != nil {
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
Expand All @@ -26,6 +23,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
"error": "email and username cannot be empty, please provide at least one of them",
}
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, errMsg)
}

Expand All @@ -34,6 +32,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
"error": "password cannot be empty",
}
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, errMsg)
}

Expand All @@ -42,6 +41,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
if user.Email != "" {
if err := verifyEmail(user.Email); err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
})
Expand All @@ -55,6 +55,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
userFromDb, err := a.pgStore.GetUser(ctx.Request().Context(), key)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
})
Expand All @@ -63,6 +64,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
if !a.verifyPassword(userFromDb.Password, user.Password) {
errMsg := "invalid password"
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusUnauthorized, errMsg)
}

Expand All @@ -75,6 +77,7 @@ func (a *auth) SignIn(ctx echo.Context) error {
token, err := a.newToken(uu, tokenLife)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusInternalServerError, echo.Map{
"error": err.Error(),
})
Expand Down
8 changes: 4 additions & 4 deletions auth/signup.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,11 @@ func verifyPassword(password string) error {

func (a *auth) SignUp(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
a.logger.Log(ctx).Send()
}()

var u User

if err := json.NewDecoder(ctx.Request().Body).Decode(&u); err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
"message": "error decoding request body in sign-up",
Expand All @@ -157,6 +154,7 @@ func (a *auth) SignUp(ctx echo.Context) error {

if err := u.Validate(a.store); err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, echo.Map{
"error": err.Error(),
})
Expand All @@ -165,6 +163,7 @@ func (a *auth) SignUp(ctx echo.Context) error {
hpwd, err := a.hashPassword(u.Password)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusInternalServerError, echo.Map{
"error": err.Error(),
})
Expand All @@ -180,6 +179,7 @@ func (a *auth) SignUp(ctx echo.Context) error {
err = a.pgStore.AddUser(ctx.Request().Context(), newUser)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusInternalServerError, echo.Map{
"error": err.Error(),
})
Expand Down
7 changes: 4 additions & 3 deletions auth/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,20 @@ func (a *auth) Token(ctx echo.Context) error {
// TODO (jay-dee7) - check for all valid query params here like serive, client_id, offline_token, etc
// more at this link - https://docs.docker.com/registry/spec/auth/token/
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
a.logger.Log(ctx).Send()
}()

authHeader := ctx.Request().Header.Get(AuthorizationHeaderKey)
if authHeader != "" {
username, password, err := a.getCredsFromHeader(ctx.Request())
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.NoContent(http.StatusUnauthorized)
}

creds, err := a.validateUser(username, password)
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.JSON(http.StatusUnauthorized, echo.Map{
"error": err.Error(),
})
Expand All @@ -48,6 +47,7 @@ func (a *auth) Token(ctx echo.Context) error {
"msg": "invalid scope provided",
}
ctx.Set(types.HttpEndpointErrorKey, errMsg)
a.logger.Log(ctx)
return ctx.JSON(http.StatusBadRequest, errMsg)
}

Expand All @@ -57,6 +57,7 @@ func (a *auth) Token(ctx echo.Context) error {
token, err := a.newPublicPullToken()
if err != nil {
ctx.Set(types.HttpEndpointErrorKey, err.Error())
a.logger.Log(ctx)
return ctx.NoContent(http.StatusInternalServerError)
}

Expand Down
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ require (
github.com/go-playground/validator/v10 v10.9.0
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/google/uuid v1.3.0
github.com/hashicorp/go-multierror v1.0.0
github.com/labstack/echo-contrib v0.11.0
github.com/labstack/echo/v4 v4.5.0
github.com/rs/zerolog v1.24.0
Expand All @@ -18,6 +19,8 @@ require (
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
)

require github.com/hashicorp/errwrap v1.0.0 // indirect

require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash v1.1.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -266,10 +266,12 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func main() {
os.Exit(1)
}

logger := telemetry.ZLogger(telemetry.SetupLogger(), fluentBitCollector)
logger := telemetry.ZLogger(fluentBitCollector, cfg.Environment)
authSvc := auth.New(localCache, cfg, pgStore, logger)
skynetClient := skynet.NewClient(cfg)

Expand Down
15 changes: 8 additions & 7 deletions registry/v2/blobs.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ func (b *blobs) errorResponse(code, msg string, detail map[string]interface{}) [

func (b *blobs) HEAD(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
b.registry.logger.Log(ctx).Send()
}()

digest := ctx.Param("digest")

Expand All @@ -47,6 +44,7 @@ func (b *blobs) HEAD(ctx echo.Context) error {
errMsg := b.errorResponse(RegistryErrorCodeManifestBlobUnknown, err.Error(), details)

ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusNotFound, errMsg)
}

Expand All @@ -58,6 +56,7 @@ func (b *blobs) HEAD(ctx echo.Context) error {
}
errMsg := b.errorResponse(RegistryErrorCodeManifestBlobUnknown, "Manifest does not exist", details)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusNotFound, errMsg)
}

Expand All @@ -74,9 +73,6 @@ these will be part of the txn in StartUpload
*/
func (b *blobs) UploadBlob(ctx echo.Context) error {
ctx.Set(types.HandlerStartTime, time.Now())
defer func() {
b.registry.logger.Log(ctx).Send()
}()

namespace := ctx.Param("username") + "/" + ctx.Param("imagename")
contentRange := ctx.Request().Header.Get("Content-Range")
Expand All @@ -90,7 +86,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)

b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusBadRequest, errMsg)
}

Expand All @@ -112,6 +108,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusBadRequest, errMsg)
}

Expand All @@ -130,12 +127,14 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
}
errMsg := b.errorResponse(RegistryErrorCodeBlobUploadUnknown, err.Error(), details)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusRequestedRangeNotSatisfiable, errMsg)
}

if start != len(b.uploads[uuid]) {
errMsg := b.errorResponse(RegistryErrorCodeBlobUploadUnknown, "content range mismatch", nil)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusRequestedRangeNotSatisfiable, errMsg)
}

Expand All @@ -148,6 +147,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusInternalServerError, errMsg)
} // 10
ctx.Request().Body.Close()
Expand All @@ -160,6 +160,7 @@ func (b *blobs) UploadBlob(ctx echo.Context) error {
nil,
)
ctx.Set(types.HttpEndpointErrorKey, errMsg)
b.registry.logger.Log(ctx)
return ctx.JSONBlob(http.StatusBadRequest, errMsg)
}
locationHeader := fmt.Sprintf("/v2/%s/blobs/uploads/%s", namespace, uuid)
Expand Down

0 comments on commit 2d88371

Please sign in to comment.