go-skeletor/middleware/middleware.go

235 lines
9.4 KiB
Go

package middleware
import (
"html/template"
"github.com/go-martini/martini"
"github.com/martini-contrib/render"
"github.com/martini-contrib/sessions"
"arno/skeletor/config"
"arno/skeletor/controller"
"arno/skeletor/service"
"net/http"
)
type Middleware struct {
martini *martini.ClassicMartini
templates map[string]*template.Template
ctn *service.Container
}
func NewMiddleware(ctn *service.Container) *Middleware {
var middleware *Middleware = new(Middleware)
middleware.ctn = ctn
myconfig := config.Must(ctn)
// Initialisation du serveur middleware
middleware.martini = martini.Classic()
// Initialisation de la session
store := sessions.NewCookieStore([]byte(myconfig.AppSecret))
store.Options(sessions.Options{Path: myconfig.AppAlias, MaxAge: int(3600)})
middleware.martini.Use(sessions.Sessions(myconfig.AppName, store))
// Definition du répertoire public
StaticOptions := martini.StaticOptions{Prefix: "public"}
middleware.martini.Use(martini.Static("public", StaticOptions))
// Définition du template de base
middleware.martini.Use(render.Renderer(render.Options{
Layout: "base",
Funcs: []template.FuncMap{
{
"unescaped": func(args ...interface{}) template.HTML {
return template.HTML(args[0].(string))
},
},
},
}))
// x) Define and set all handlers
middleware.initHandlers()
return middleware
}
func (middleware *Middleware) StartMiddleware() {
myconfig := config.Must(middleware.ctn)
middleware.martini.RunOnAddr(myconfig.AppServer)
}
func (middleware *Middleware) initHandlers() {
myconfig := config.Must(middleware.ctn)
// Route Home
middleware.martini.Get(myconfig.AppRoutes["home"], middleware.Home)
middleware.martini.Get(myconfig.AppRoutes["homeconfig"], middleware.HomeConfig)
// Route Security
middleware.martini.Get(myconfig.AppRoutes["securitylogin"], middleware.SecurityLogin)
middleware.martini.Post(myconfig.AppRoutes["securitylogin"], middleware.SecurityLogin)
middleware.martini.Get(myconfig.AppRoutes["securitylogout"], middleware.SecurityLogout)
// Route Upload
middleware.martini.Get(myconfig.AppRoutes["upload"]+":typeupload"+"/:id", middleware.Upload)
middleware.martini.Post(myconfig.AppRoutes["uploaded"]+":typeupload"+"/:id", middleware.Uploaded)
middleware.martini.Get(myconfig.AppRoutes["uploadcrop"]+":typeupload"+"/:id", middleware.UploadCrop)
middleware.martini.Post(myconfig.AppRoutes["uploadcropped"]+":typeupload"+"/:id", middleware.UploadCropped)
// Route Config
middleware.martini.Get(myconfig.AppRoutes["configlist"], middleware.ConfigList)
middleware.martini.Get(myconfig.AppRoutes["configrefresh"], middleware.ConfigRefresh)
middleware.martini.Get(myconfig.AppRoutes["configupdate"]+":id", middleware.ConfigUpdate)
middleware.martini.Post(myconfig.AppRoutes["configupdate"]+":id", middleware.ConfigUpdate)
middleware.martini.Get(myconfig.AppRoutes["configdelete"]+":id", middleware.ConfigDelete)
// Route User
middleware.martini.Get(myconfig.AppRoutes["userlist"], middleware.UserList)
middleware.martini.Get(myconfig.AppRoutes["usersubmit"], middleware.UserSubmit)
middleware.martini.Post(myconfig.AppRoutes["usersubmit"], middleware.UserSubmit)
middleware.martini.Get(myconfig.AppRoutes["userupdate"]+":id", middleware.UserUpdate)
middleware.martini.Post(myconfig.AppRoutes["userupdate"]+":id", middleware.UserUpdate)
middleware.martini.Get(myconfig.AppRoutes["userdelete"]+":id", middleware.UserDelete)
middleware.martini.Get(myconfig.AppRoutes["userprofil"], middleware.UserProfil)
middleware.martini.Post(myconfig.AppRoutes["userprofil"], middleware.UserProfil)
}
// REDIRECT
func (middleware *Middleware) redirect(ctn *service.Container, session sessions.Session, req *http.Request, r render.Render, isperm int) {
if isperm != 0 {
controller.SecurityRedirect(middleware.ctn, req, r, isperm)
}
}
// ROUTE HOME
func (middleware *Middleware) Home(session sessions.Session, req *http.Request, r render.Render) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 100)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.Home(middleware.ctn, session, req, r)
}
}
func (middleware *Middleware) HomeConfig(session sessions.Session, req *http.Request, r render.Render) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.HomeConfig(middleware.ctn, session, req, r)
}
}
// ROUTE SECURITY
func (middleware *Middleware) SecurityLogin(session sessions.Session, req *http.Request, r render.Render) {
controller.SecurityLogin(middleware.ctn, session, req, r)
}
func (middleware *Middleware) SecurityLogout(session sessions.Session, req *http.Request, r render.Render) {
controller.SecurityLogout(middleware.ctn, session, req, r)
}
// ROUTE UPLOAD
func (middleware *Middleware) Upload(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 50)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.Upload(middleware.ctn, session, req, r, params["typeupload"], params["id"])
}
}
func (middleware *Middleware) Uploaded(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 50)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.Uploaded(middleware.ctn, session, req, r, params["typeupload"], params["id"])
}
}
func (middleware *Middleware) UploadCrop(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 50)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.UploadCrop(middleware.ctn, session, req, r, params["typeupload"], params["id"])
}
}
func (middleware *Middleware) UploadCropped(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 50)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.UploadCropped(middleware.ctn, session, req, r, params["typeupload"], params["id"])
}
}
// ROUTE CONFIG
func (middleware *Middleware) ConfigList(session sessions.Session, req *http.Request, r render.Render) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.ConfigList(middleware.ctn, session, req, r)
}
}
func (middleware *Middleware) ConfigRefresh(session sessions.Session, req *http.Request, r render.Render) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.ConfigRefresh(middleware.ctn, session, req, r)
}
}
func (middleware *Middleware) ConfigUpdate(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.ConfigUpdate(middleware.ctn, session, req, r, params["id"])
}
}
func (middleware *Middleware) ConfigDelete(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.ConfigDelete(middleware.ctn, session, req, r, params["id"])
}
}
// ROUTE USER
func (middleware *Middleware) UserList(session sessions.Session, req *http.Request, r render.Render) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.UserList(middleware.ctn, session, req, r)
}
}
func (middleware *Middleware) UserSubmit(session sessions.Session, req *http.Request, r render.Render) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.UserSubmit(middleware.ctn, session, req, r)
}
}
func (middleware *Middleware) UserUpdate(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.UserUpdate(middleware.ctn, session, req, r, params["id"], "update")
}
}
func (middleware *Middleware) UserDelete(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 10)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.UserDelete(middleware.ctn, session, req, r, params["id"])
}
}
func (middleware *Middleware) UserProfil(session sessions.Session, req *http.Request, r render.Render, params martini.Params) {
isperm := controller.SecurityFirewall(middleware.ctn, session, req, r, 50)
middleware.redirect(middleware.ctn, session, req, r, isperm)
if isperm == 0 {
controller.UserUpdate(middleware.ctn, session, req, r, session.Get("Userid").(string), "profil")
}
}