From 5d225f01869e466e078892d875bfcea5cadf1c36 Mon Sep 17 00:00:00 2001 From: vinchent Date: Mon, 29 Jul 2024 21:54:37 +0200 Subject: [PATCH] Use redis to store the sessions --- cmd/web/main.go | 11 +++++++++++ go.mod | 4 +++- go.sum | 10 ++++++++-- internal/handlers/handlers.go | 3 --- postgres/docker-compose-example.yml | 9 ++++++++- 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/cmd/web/main.go b/cmd/web/main.go index 5514791..2383384 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -15,7 +15,9 @@ import ( "os" "time" + "github.com/alexedwards/scs/redisstore" "github.com/alexedwards/scs/v2" + "github.com/gomodule/redigo/redis" ) const portNumber = ":8080" @@ -80,7 +82,16 @@ func run() (*driver.DB, error) { // change this to true when in production app.InProduction = *inProduction + // Establish connection pool to Redis. + pool := &redis.Pool{ + MaxIdle: 10, + Dial: func() (redis.Conn, error) { + return redis.Dial("tcp", "localhost:6379") + }, + } + session = scs.New() + session.Store = redisstore.New(pool) session.Lifetime = 24 * time.Hour session.Cookie.Persist = true session.Cookie.SameSite = http.SameSiteLaxMode diff --git a/go.mod b/go.mod index b47f765..4e5a211 100644 --- a/go.mod +++ b/go.mod @@ -17,10 +17,13 @@ require github.com/justinas/nosurf v1.1.1 require github.com/alexedwards/scs/v2 v2.8.0 require ( + github.com/alexedwards/scs/redisstore v0.0.0-20240316134038-7e11d57e8885 github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 + github.com/gomodule/redigo v1.9.2 github.com/jackc/pgconn v1.14.3 github.com/jackc/pgx/v5 v5.6.0 github.com/xhit/go-simple-mail v2.2.2+incompatible + golang.org/x/crypto v0.25.0 ) require ( @@ -30,7 +33,6 @@ require ( github.com/jackc/pgproto3/v2 v2.3.3 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect - golang.org/x/crypto v0.25.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/text v0.16.0 // indirect ) diff --git a/go.sum b/go.sum index 36ea518..24ec4fd 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/alexedwards/scs/redisstore v0.0.0-20240316134038-7e11d57e8885 h1:UdHeICe7BgRbDq5yjA/yjCyJnohROtyD8PpJjhdAvF8= +github.com/alexedwards/scs/redisstore v0.0.0-20240316134038-7e11d57e8885/go.mod h1:ceKFatoD+hfHWWeHOAYue1J+XgOJjE7dw8l3JtIRTGY= github.com/alexedwards/scs/v2 v2.8.0 h1:h31yUYoycPuL0zt14c0gd+oqxfRwIj6SOjHdKRZxhEw= github.com/alexedwards/scs/v2 v2.8.0/go.mod h1:ToaROZxyKukJKT/xLcVQAChi5k6+Pn1Gvmdl7h3RRj8= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= @@ -7,6 +9,9 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-chi/chi/v5 v5.0.14 h1:PyEwo2Vudraa0x/Wl6eDRRW2NXBvekgfxyydcM0WGE0= github.com/go-chi/chi/v5 v5.0.14/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/gomodule/redigo v1.8.0/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= +github.com/gomodule/redigo v1.9.2 h1:HrutZBLhSIU8abiSfW8pj8mPhOyMYjZT/wcA4/L9L9s= +github.com/gomodule/redigo v1.9.2/go.mod h1:KsU3hiK/Ay8U42qpaJk+kuNa3C+spxapWpM+ywhcgtw= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= @@ -33,9 +38,10 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/xhit/go-simple-mail v2.2.2+incompatible h1:Hm2VGfLqiQJ/NnC8SYsrPOPyVYIlvP2kmnotP4RIV74= github.com/xhit/go-simple-mail v2.2.2+incompatible/go.mod h1:I8Ctg6vIJZ+Sv7k/22M6oeu/tbFumDY0uxBuuLbtU7Y= golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go index cf90bcf..22abf2c 100644 --- a/internal/handlers/handlers.go +++ b/internal/handlers/handlers.go @@ -139,8 +139,6 @@ func (m *Repository) PostMakeReservation(w http.ResponseWriter, r *http.Request) reservation.Email = form.Get("email") reservation.Phone = form.Get("phone") - // TODO: Should I check the validity of reservation.StartDate / EndDate? - if !form.Valid() { data := make(map[string]interface{}) data["reservation"] = reservation @@ -508,7 +506,6 @@ func (m *Repository) PostShowLogin(w http.ResponseWriter, r *http.Request) { // Logout logs a user out func (m *Repository) Logout(w http.ResponseWriter, r *http.Request) { - // TODO Use Redis to store the session. Check the documentation of scs package m.App.Session.Destroy(r.Context()) m.App.Session.RenewToken(r.Context()) http.Redirect(w, r, "/user/login", http.StatusSeeOther) diff --git a/postgres/docker-compose-example.yml b/postgres/docker-compose-example.yml index ecee8f2..5c741f2 100644 --- a/postgres/docker-compose-example.yml +++ b/postgres/docker-compose-example.yml @@ -1,6 +1,5 @@ # Use postgres/postgres user/password credentials services: - db: image: postgres restart: always @@ -23,3 +22,11 @@ services: ports: - 8081:8080 + cache: + image: redis + restart: always + ports: + - 6379:6379 + command: redis-server --save 60 1 --loglevel warning + volumes: + - cache:/data