package web import ( "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/auth" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/config" "github.com/Sirupsen/logrus" "github.com/gorilla/mux" "github.com/jmoiron/sqlx" "github.com/unrolled/render" "github.com/urfave/negroni" ) // Env describes an environement object passed to all handlers type Env struct { Database *sqlx.DB Log *logrus.Entry Router *mux.Router Render *render.Render Auth *auth.Authorizer Config *config.Config loginRoute string } // EnvParams represents parameters for NewEnv type EnvParams struct { Database *sqlx.DB Auth *auth.Authorizer Log *logrus.Entry Config *config.Config } // NewEnv returns a new *Env func NewEnv(p EnvParams) *Env { return &Env{ Database: p.Database, Log: p.Log, Router: mux.NewRouter(), Auth: p.Auth, Config: p.Config, Render: render.New(), } } type Route struct { env *Env mRoute *mux.Route } func (r *Route) Name(name string) *Route { r.mRoute.Name(name) return r } func (r *Route) Methods(methods ...string) *Route { r.mRoute.Methods(methods...) return r } func (r *Route) WithRole(role string) *Route { handler := r.mRoute.GetHandler() newHandler := negroni.New( auth.NewMiddlewareRole(r.env.Auth, r.env.Log, role), negroni.Wrap(handler)) r.mRoute.Handler(newHandler) return r } // Handle add route func (e *Env) Handle(route string, H HandlerFunc) *Route { mRoute := e.Router.Handle(route, Handler{e, H}) return &Route{ env: e, mRoute: mRoute, } }