Skip to content

Commit 49e0866

Browse files
authored
Merge pull request #188 from coinread/master
upgrade to new pop, go module and bug fixes
2 parents c9327d4 + d7772d7 commit 49e0866

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+610
-574
lines changed

.travis.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
language: go
33

44
go:
5-
- 1.8
6-
- 1.9
5+
- 1.11.1
6+
7+
env:
8+
- GO111MODULE=on
79

810
services:
911
- docker

CONTRIBUTING.md

100644100755
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ please read the [code of conduct](CODE_OF_CONDUCT.md).
55

66
## Setup
77

8-
> Install Go and Glide https://github.com/Masterminds/glide
8+
> Install Go 1.11.1
99
> Install Docker to run tests
1010
11+
GoTrue uses the Go Modules support built into Go 1.11 to build. The easiest is to clone GoTrue in a directory outside of GOPATH, as in the following example:
12+
1113
```sh
1214
$ git clone https://github.com/netlify/gotrue
1315
$ cd gotrue

Dockerfile

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
1-
FROM golang:1.9.2
1+
FROM golang:alpine as build
2+
ENV GO111MODULE=on
3+
ENV CGO_ENABLED=0
4+
ENV GOOS=linux
5+
6+
RUN apk add --no-cache make git
7+
28
WORKDIR /go/src/github.com/netlify/gotrue
3-
COPY . /go/src/github.com/netlify/gotrue/
9+
COPY . /go/src/github.com/netlify/gotrue
10+
411
RUN make deps build
12+
RUN go build -a -installsuffix cgo -o gotrue
13+
514

615
FROM alpine:3.7
16+
RUN adduser -D -u 1000 netlify
17+
718
RUN apk add --no-cache ca-certificates
8-
RUN adduser -D -u 1000 netlify && mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
9-
COPY --from=0 /go/src/github.com/netlify/gotrue/gotrue /usr/local/bin/gotrue
10-
COPY --from=0 /go/src/github.com/netlify/gotrue/migrations /usr/local/etc/gotrue/migrations/
11-
RUN chown netlify:netlify /usr/local/bin/gotrue && chown -R netlify:netlify /usr/local/etc/gotrue
19+
COPY --from=build /go/src/github.com/netlify/gotrue/gotrue /usr/local/bin/gotrue
20+
COPY --from=build /go/src/github.com/netlify/gotrue/migrations /usr/local/etc/gotrue/migrations/
1221

13-
USER netlify
1422
ENV GOTRUE_DB_MIGRATIONS_PATH /usr/local/etc/gotrue/migrations
15-
CMD ["gotrue"]
23+
24+
USER netlify
25+
CMD ["gotrue"]

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ build: ## Build the binary.
1111

1212
deps: ## Install dependencies.
1313
@go get -u github.com/gobuffalo/pop/soda
14-
@go get -u github.com/golang/lint/golint
15-
@go get -u github.com/Masterminds/glide && glide install
14+
@go get -u golang.org/x/lint/golint
15+
@go mod download
1616

1717
image: ## Build the Docker image.
1818
docker build .

api/admin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/go-chi/chi"
99
"github.com/netlify/gotrue/models"
1010
"github.com/netlify/gotrue/storage"
11-
uuid "github.com/satori/go.uuid"
11+
"github.com/gobuffalo/uuid"
1212
)
1313

1414
type adminUserParams struct {

api/admin_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
jwt "github.com/dgrijalva/jwt-go"
1313
"github.com/netlify/gotrue/conf"
1414
"github.com/netlify/gotrue/models"
15-
uuid "github.com/satori/go.uuid"
15+
"github.com/gobuffalo/uuid"
1616
"github.com/stretchr/testify/assert"
1717
"github.com/stretchr/testify/require"
1818
"github.com/stretchr/testify/suite"

api/api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/netlify/gotrue/storage"
1313
"github.com/netlify/netlify-commons/graceful"
1414
"github.com/rs/cors"
15-
uuid "github.com/satori/go.uuid"
15+
"github.com/gobuffalo/uuid"
1616
"github.com/sebest/xff"
1717
"github.com/sirupsen/logrus"
1818
)

api/api_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/netlify/gotrue/models"
1111
"github.com/netlify/gotrue/storage"
1212
"github.com/netlify/gotrue/storage/test"
13-
"github.com/satori/go.uuid"
13+
"github.com/gobuffalo/uuid"
1414
"github.com/stretchr/testify/require"
1515
)
1616

api/audit_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
jwt "github.com/dgrijalva/jwt-go"
1212
"github.com/netlify/gotrue/conf"
1313
"github.com/netlify/gotrue/models"
14-
uuid "github.com/satori/go.uuid"
14+
"github.com/gobuffalo/uuid"
1515
"github.com/stretchr/testify/assert"
1616
"github.com/stretchr/testify/require"
1717
"github.com/stretchr/testify/suite"

api/context.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
jwt "github.com/dgrijalva/jwt-go"
77
"github.com/netlify/gotrue/conf"
88
"github.com/netlify/gotrue/models"
9-
uuid "github.com/satori/go.uuid"
9+
"github.com/gobuffalo/uuid"
1010
)
1111

1212
type contextKey string

api/errors.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"runtime/debug"
99
)
1010

11-
var oauthErrorMap map[int]string = map[int]string{
11+
var oauthErrorMap = map[int]string{
1212
http.StatusBadRequest: "invalid_request",
1313
http.StatusUnauthorized: "unauthorized_client",
1414
http.StatusForbidden: "access_denied",
@@ -39,7 +39,7 @@ func (e *OAuthError) WithInternalError(err error) *OAuthError {
3939

4040
// WithInternalMessage adds internal message information to the error
4141
func (e *OAuthError) WithInternalMessage(fmtString string, args ...interface{}) *OAuthError {
42-
e.InternalMessage = fmt.Sprintf(fmtString, args)
42+
e.InternalMessage = fmt.Sprintf(fmtString, args...)
4343
return e
4444
}
4545

@@ -111,7 +111,7 @@ func (e *HTTPError) WithInternalError(err error) *HTTPError {
111111

112112
// WithInternalMessage adds internal message information to the error
113113
func (e *HTTPError) WithInternalMessage(fmtString string, args ...interface{}) *HTTPError {
114-
e.InternalMessage = fmt.Sprintf(fmtString, args)
114+
e.InternalMessage = fmt.Sprintf(fmtString, args...)
115115
return e
116116
}
117117

api/external.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/netlify/gotrue/api/provider"
1414
"github.com/netlify/gotrue/models"
1515
"github.com/netlify/gotrue/storage"
16-
uuid "github.com/satori/go.uuid"
16+
"github.com/gobuffalo/uuid"
1717
"github.com/sirupsen/logrus"
1818
)
1919

@@ -96,7 +96,7 @@ func (a *API) internalExternalProviderCallback(w http.ResponseWriter, r *http.Re
9696
}
9797
userData = samlUserData
9898
} else {
99-
oAuthUserData, err := a.oAuthCallback(r, ctx, providerType)
99+
oAuthUserData, err := a.oAuthCallback(ctx, r, providerType)
100100
if err != nil {
101101
return err
102102
}
@@ -135,7 +135,7 @@ func (a *API) internalExternalProviderCallback(w http.ResponseWriter, r *http.Re
135135
}
136136
}
137137

138-
user, terr = a.signupNewUser(tx, ctx, params)
138+
user, terr = a.signupNewUser(ctx, tx, params)
139139
if terr != nil {
140140
return terr
141141
}

api/external_oauth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func (a *API) loadOAuthState(w http.ResponseWriter, r *http.Request) (context.Co
2020
return a.loadExternalState(ctx, state)
2121
}
2222

23-
func (a *API) oAuthCallback(r *http.Request, ctx context.Context, providerType string) (*provider.UserProvidedData, error) {
23+
func (a *API) oAuthCallback(ctx context.Context, r *http.Request, providerType string) (*provider.UserProvidedData, error) {
2424
rq := r.URL.Query()
2525

2626
extError := rq.Get("error")

api/external_saml_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"github.com/netlify/gotrue/models"
2121
"github.com/russellhaering/gosaml2/types"
2222
dsig "github.com/russellhaering/goxmldsig"
23-
uuid "github.com/satori/go.uuid"
23+
"github.com/gobuffalo/uuid"
2424
"github.com/stretchr/testify/require"
2525
"github.com/stretchr/testify/suite"
2626
)

api/external_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
jwt "github.com/dgrijalva/jwt-go"
1111
"github.com/netlify/gotrue/conf"
1212
"github.com/netlify/gotrue/models"
13-
uuid "github.com/satori/go.uuid"
13+
"github.com/gobuffalo/uuid"
1414
"github.com/stretchr/testify/require"
1515
"github.com/stretchr/testify/suite"
1616
)

api/helpers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/netlify/gotrue/models"
1212
"github.com/netlify/gotrue/storage"
1313
"github.com/pkg/errors"
14-
"github.com/satori/go.uuid"
14+
"github.com/gobuffalo/uuid"
1515
)
1616

1717
func addRequestID(globalConfig *conf.GlobalConfiguration) middlewareHandler {

api/hook_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/netlify/gotrue/conf"
1313
"github.com/netlify/gotrue/models"
1414
"github.com/netlify/gotrue/storage/test"
15-
uuid "github.com/satori/go.uuid"
15+
"github.com/gobuffalo/uuid"
1616
"github.com/stretchr/testify/assert"
1717
"github.com/stretchr/testify/require"
1818
)

api/hooks.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515

1616
jwt "github.com/dgrijalva/jwt-go"
1717
"github.com/pkg/errors"
18-
uuid "github.com/satori/go.uuid"
18+
"github.com/gobuffalo/uuid"
1919
"github.com/sirupsen/logrus"
2020

2121
"github.com/netlify/gotrue/conf"
@@ -34,7 +34,7 @@ const (
3434
LoginEvent = "login"
3535
)
3636

37-
var defaultTimeout time.Duration = time.Second * 5
37+
var defaultTimeout = time.Second * 5
3838

3939
type webhookClaims struct {
4040
jwt.StandardClaims
@@ -103,7 +103,7 @@ func (w *Webhook) trigger() (io.ReadCloser, error) {
103103
// timed out - try again?
104104
if i == w.Retries-1 {
105105
closeBody(rsp)
106-
return nil, httpError(http.StatusGatewayTimeout, "Failed to perform webhook in time frame (%d seconds)", timeout.Seconds())
106+
return nil, httpError(http.StatusGatewayTimeout, "Failed to perform webhook in time frame (%v seconds)", timeout.Seconds())
107107
}
108108
hooklog.Info("Request timed out")
109109
continue

api/instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/netlify/gotrue/conf"
1010
"github.com/netlify/gotrue/models"
1111
"github.com/pkg/errors"
12-
"github.com/satori/go.uuid"
12+
"github.com/gobuffalo/uuid"
1313
)
1414

1515
func (a *API) loadInstance(w http.ResponseWriter, r *http.Request) (context.Context, error) {

api/instance_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"net/http/httptest"
88
"testing"
99

10-
"github.com/satori/go.uuid"
10+
"github.com/gobuffalo/uuid"
1111

1212
"github.com/netlify/gotrue/conf"
1313
"github.com/netlify/gotrue/models"

api/invite.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (a *API) Invite(w http.ResponseWriter, r *http.Request) error {
4747
Aud: aud,
4848
Provider: "email",
4949
}
50-
user, err = a.signupNewUser(tx, ctx, &signupParams)
50+
user, err = a.signupNewUser(ctx, tx, &signupParams)
5151
if err != nil {
5252
return err
5353
}

api/invite_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
jwt "github.com/dgrijalva/jwt-go"
1414
"github.com/netlify/gotrue/conf"
1515
"github.com/netlify/gotrue/models"
16-
uuid "github.com/satori/go.uuid"
16+
"github.com/gobuffalo/uuid"
1717
"github.com/stretchr/testify/assert"
1818
"github.com/stretchr/testify/require"
1919
"github.com/stretchr/testify/suite"

api/middleware.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99

1010
jwt "github.com/dgrijalva/jwt-go"
1111
"github.com/netlify/gotrue/models"
12-
uuid "github.com/satori/go.uuid"
12+
"github.com/gobuffalo/uuid"
1313
)
1414

1515
const (

api/provider/saml.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
saml2 "github.com/russellhaering/gosaml2"
2525
"github.com/russellhaering/gosaml2/types"
2626
dsig "github.com/russellhaering/goxmldsig"
27-
uuid "github.com/satori/go.uuid"
27+
"github.com/gobuffalo/uuid"
2828
"golang.org/x/oauth2"
2929
)
3030

api/recover_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
"github.com/netlify/gotrue/conf"
1212
"github.com/netlify/gotrue/models"
13-
uuid "github.com/satori/go.uuid"
13+
"github.com/gobuffalo/uuid"
1414
"github.com/stretchr/testify/assert"
1515
"github.com/stretchr/testify/require"
1616
"github.com/stretchr/testify/suite"

api/signup.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (a *API) Signup(w http.ResponseWriter, r *http.Request) error {
6060
}
6161
} else {
6262
params.Provider = "email"
63-
user, terr = a.signupNewUser(tx, ctx, params)
63+
user, terr = a.signupNewUser(ctx, tx, params)
6464
if terr != nil {
6565
return terr
6666
}
@@ -93,7 +93,7 @@ func (a *API) Signup(w http.ResponseWriter, r *http.Request) error {
9393
return sendJSON(w, http.StatusOK, user)
9494
}
9595

96-
func (a *API) signupNewUser(conn *storage.Connection, ctx context.Context, params *SignupParams) (*models.User, error) {
96+
func (a *API) signupNewUser(ctx context.Context, conn *storage.Connection, params *SignupParams) (*models.User, error) {
9797
instanceID := getInstanceID(ctx)
9898
config := a.getConfig(ctx)
9999

api/signup_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
jwt "github.com/dgrijalva/jwt-go"
1313
"github.com/netlify/gotrue/conf"
1414
"github.com/netlify/gotrue/models"
15-
uuid "github.com/satori/go.uuid"
15+
"github.com/gobuffalo/uuid"
1616
"github.com/stretchr/testify/assert"
1717
"github.com/stretchr/testify/require"
1818
"github.com/stretchr/testify/suite"

api/token.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/netlify/gotrue/storage"
1313
)
1414

15+
// GoTrueClaims is a struct thats used for JWT claims
1516
type GoTrueClaims struct {
1617
jwt.StandardClaims
1718
Email string `json:"email"`
@@ -88,7 +89,7 @@ func (a *API) ResourceOwnerPasswordGrant(ctx context.Context, w http.ResponseWri
8889

8990
if cookie != "" && config.Cookie.Duration > 0 {
9091
if terr = a.setCookieToken(config, token.Token, cookie == useSessionCookie, w); terr != nil {
91-
return internalServerError("Failed to set JWT cookie", terr)
92+
return internalServerError("Failed to set JWT cookie. %s", terr)
9293
}
9394
}
9495
return nil
@@ -145,7 +146,7 @@ func (a *API) RefreshTokenGrant(ctx context.Context, w http.ResponseWriter, r *h
145146

146147
if cookie != "" && config.Cookie.Duration > 0 {
147148
if terr = a.setCookieToken(config, tokenString, cookie == useSessionCookie, w); terr != nil {
148-
return internalServerError("Failed to set JWT cookie", terr)
149+
return internalServerError("Failed to set JWT cookie. %s", terr)
149150
}
150151
}
151152
return nil

api/user.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66

77
"github.com/netlify/gotrue/models"
88
"github.com/netlify/gotrue/storage"
9-
uuid "github.com/satori/go.uuid"
9+
"github.com/gobuffalo/uuid"
1010
)
1111

1212
// UserUpdateParams parameters for updating a user

api/user_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
"github.com/netlify/gotrue/conf"
1313
"github.com/netlify/gotrue/models"
14-
uuid "github.com/satori/go.uuid"
14+
"github.com/gobuffalo/uuid"
1515
"github.com/stretchr/testify/assert"
1616
"github.com/stretchr/testify/require"
1717
"github.com/stretchr/testify/suite"

api/verify.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (a *API) Verify(w http.ResponseWriter, r *http.Request) error {
6565

6666
if cookie != "" && config.Cookie.Duration > 0 {
6767
if terr = a.setCookieToken(config, token.Token, cookie == useSessionCookie, w); terr != nil {
68-
return internalServerError("Failed to set JWT cookie", terr)
68+
return internalServerError("Failed to set JWT cookie. %s", terr)
6969
}
7070
}
7171
return nil

0 commit comments

Comments
 (0)