Beispiel #1
0
func Mux() (mux *http.ServeMux) {

	p := pat.New()
	sessionMW := mango.Sessions("f908b1c425062e95d30b8d30de7123458", "duoerl", &mango.CookieOptions{Path: "/", MaxAge: 3600 * 24 * 7})

	rendererMW := middlewares.ProduceRenderer()
	authenMW := middlewares.AuthenticateUser()
	hardAuthenMW := middlewares.HardAuthenUser()
	rHtml, rJson := middlewares.RespondHtml(), middlewares.RespondJson()

	mainLayoutMW := middlewares.ProduceLayout(middlewares.MAIN_LAYOUT)
	mainStack := new(mango.Stack)
	mainStack.Middleware(mangogzip.Zipper, mangolog.Logger, sessionMW, authenMW, mainLayoutMW, rendererMW, rHtml)

	mainAjaxStack := new(mango.Stack)
	mainAjaxStack.Middleware(mangogzip.Zipper, mangolog.Logger, sessionMW, authenMW, rJson)

	hardAuthenStack := new(mango.Stack)
	hardAuthenStack.Middleware(mangogzip.Zipper, mangolog.Logger, sessionMW, hardAuthenMW, mainLayoutMW, rendererMW, rHtml)

	// User
	p.Get("/login", mainStack.HandlerFunc(sessions.LoginPage))
	p.Post("/login", mainStack.HandlerFunc(sessions.LoginAction))
	p.Get("/signup", mainStack.HandlerFunc(sessions.SignupPage))
	p.Post("/signup", mainStack.HandlerFunc(sessions.SignupAction))
	p.Get("/logout", mainStack.HandlerFunc(sessions.Logout))

	p.Post("/user/update", hardAuthenStack.HandlerFunc(users.Update))
	p.Get("/user/edit", hardAuthenStack.HandlerFunc(users.Edit))
	p.Get("/user/:id", mainStack.HandlerFunc(users.Show))

	// User post
	p.Post("/post/create", mainAjaxStack.HandlerFunc(posts.Create))

	// Brand
	p.Get("/brands", mainStack.HandlerFunc(brands.Index))
	p.Get("/brand/new", mainStack.HandlerFunc(brands.New))
	p.Post("/brand/create", mainStack.HandlerFunc(brands.Create))
	p.Get("/brand/:id", mainStack.HandlerFunc(brands.Show))
	p.Get("/brand/:id/edit", mainStack.HandlerFunc(brands.Edit))
	p.Post("/brand/update", mainStack.HandlerFunc(brands.Update))

	// Follow brand
	p.Post("/brand/follow", mainStack.HandlerFunc(followbrands.Create))
	p.Post("/brand/unfollow", mainStack.HandlerFunc(followbrands.Delete))

	// Product
	p.Get("/products", mainStack.HandlerFunc(products.Index))
	p.Get("/product/new", mainStack.HandlerFunc(products.New))
	p.Post("/product/create", mainStack.HandlerFunc(products.Create))
	p.Get("/product/:id", mainStack.HandlerFunc(products.Show))
	p.Get("/product/:id/edit", mainStack.HandlerFunc(products.Edit))
	p.Post("/product/update", mainStack.HandlerFunc(products.Update))

	// Notes
	p.Get("/note/new", mainStack.HandlerFunc(notes.New))
	p.Get("/note/:id", mainStack.HandlerFunc(notes.Show))
	p.Post("/note/create", mainStack.HandlerFunc(notes.Create))

	// Review
	p.Post("/review/create", mainStack.HandlerFunc(reviews.Create))
	p.Post("/review/like", mainAjaxStack.HandlerFunc(reviews.Like))

	// Wish Item
	p.Post("/wish_item/add", mainAjaxStack.HandlerFunc(wishitems.Create))
	p.Post("/wish_item/remove", mainAjaxStack.HandlerFunc(wishitems.Delete))

	// Own Item
	p.Post("/own_item/add", mainAjaxStack.HandlerFunc(ownitems.Create))
	p.Post("/own_item/remove", mainAjaxStack.HandlerFunc(ownitems.Delete))

	// News
	p.Get("/news/:id", mainStack.HandlerFunc(news.Show))
	p.Post("/news/create", mainStack.HandlerFunc(news.Create))
	p.Get("/news/:id/edit", mainStack.HandlerFunc(news.Edit))
	p.Post("/news/update", mainStack.HandlerFunc(news.Update))

	// For admin in the futrue
	p.Get("/admin/categories", mainStack.HandlerFunc(categories.Index))
	p.Post("/admin/category/create", mainStack.HandlerFunc(categories.Create))
	p.Post("/admin/efficacy/create", mainStack.HandlerFunc(efficacies.Create))

	// News for admin
	p.Get("/admin/news/new", mainStack.HandlerFunc(news.New))

	// For Image upload
	imageUploader := tenpu.MakeUploader(images.TheImageMaker)
	imageLoader := tenpu.MakeFileLoader(images.TheImageMaker)

	p.Post("/upload/:category/:uid", imageUploader)
	p.Get("/img/:id/:name", imageLoader)

	p.Get("/", mainStack.HandlerFunc(feeds.Index))
	mux = http.NewServeMux()
	mux.HandleFunc("/favicon.ico", filterUrl)
	mux.Handle("/", p)
	mux.Handle("/public/", http.FileServer(http.Dir(".")))

	train.ConfigureHttpHandler(mux)
	return
}
Beispiel #2
0
func main() {
	// Load config with webconf on first available port
	appConfig := Config{}
	for p := 50000; ; p++ {
		c := webconf.New(&appConfig, "config.json", ":"+strconv.Itoa(p), nil)
		if c != nil {
			if err := c.Load(); err == nil {
				break // Config loaded
			}
		}
	}

	// Connect to DB
	db, err := sql.Open("postgres", appConfig.DbConnection)
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// Intialize DB schema if necessary
	err = initDatabase(db)
	if err != nil {
		log.Fatal(err)
	}

	// Configure Mango
	stack := &mango.Stack{}
	stack.Address = appConfig.BindAddress

	cookieOptions := mango.CookieOptions{
		strings.Split(appConfig.BindAddress, ":")[0],
		"/",
		86400, // One day expiration
		true,
		true,
	}

	// Setup routes
	routes := make(map[string]mango.App)

	routes["/login"] = stack.Compile(login)
	routes["/edit/event"] = stack.Compile(editEvent)
	routes["/edit/event/([0-9]+)"] = stack.Compile(editEvent)
	routes["/edit/asset"] = stack.Compile(editAsset)
	routes["/edit/asset/([0-9]+)"] = stack.Compile(editAsset)
	routes["/asset/([0-9]+)"] = stack.Compile(displayAsset)
	routes["/user/([0-9]+)"] = stack.Compile(displayUser)
	routes["/asset"] = stack.Compile(listAssets)
	routes["/user"] = stack.Compile(listUsers)
	routes["/"] = stack.Compile(listAssets)

	stack.Middleware(
		mango.ShowErrors(""),
		mango.Sessions(appConfig.SessionSecret, "asset-tracker", &cookieOptions),
		AssetTracker(db, initTemplates()),
		mango.Static("static"),
		mango.Routing(routes),
	)

	stack.Run(defaultHandler)

	for {
	}
}