func TestSession(t *testing.T) { buff := bytes.NewBufferString("") recorder := httptest.NewRecorder() recorder.Body = buff tg := tango.Classic() store, err := New(Options{ Host: "127.0.0.1", Port: 8888, DbIndex: 0, MaxAge: 30 * time.Minute, }) if err != nil { t.Error(err) } tg.Use(session.New(session.Options{ Store: store, })) tg.Get("/", new(SessionAction)) req, err := http.NewRequest("GET", "http://localhost:8000/", nil) if err != nil { t.Error(err) } tg.ServeHTTP(recorder, req) expect(t, recorder.Code, http.StatusOK) refute(t, len(buff.String()), 0) expect(t, buff.String(), "1") }
func InitTango(isDebug bool) *tango.Tango { t := tango.New() if isDebug { t.Use(debug.Debug(debug.Options{ HideResponseBody: true, IgnorePrefix: "/static", })) } t.Use(tango.ClassicHandlers...) sess := session.New(session.Options{ MaxAge: sessionTimeout, }) t.Use( binding.Bind(), tango.Static(tango.StaticOptions{ RootPath: filepath.Join(*homeDir, "static"), Prefix: "static", }), renders.New(renders.Options{ Reload: true, Directory: filepath.Join(*homeDir, "templates"), Funcs: template.FuncMap{ "isempty": func(s string) bool { return len(s) == 0 }, "add": func(a, b int) int { return a + b }, "isNil": isNil, "i18n": i18n.Tr, "Range": func(size int) []struct{} { return make([]struct{}, size) }, "multi": func(a, b int) int { return a * b }, }, Vars: renders.T{ "GoVer": strings.Trim(runtime.Version(), "go"), "TangoVer": tango.Version(), "XormVer": xorm.Version, "NodbVer": nodb.Version, }, }), middlewares.Auth("/login", sess), flash.Flashes(sess), sess, ) t.Any("/", new(actions.Home)) t.Any("/login", new(actions.Login)) t.Any("/logout", new(actions.Logout)) t.Any("/addb", new(actions.Addb)) t.Any("/view", new(actions.View)) t.Any("/del", new(actions.Del)) t.Any("/delRecord", new(actions.DelRecord)) t.Any("/chgpass", new(actions.ChgPass)) t.Get("/test", new(actions.Test)) return t }
func initTango(isprod bool) *tango.Tango { middlewares.Init() tg := tango.NewWithLog(setting.Log) if false { //if !isprod { tg.Use(debug.Debug(debug.Options{ IgnorePrefix: "/static", HideResponseBody: true, HideRequestBody: true, })) } tg.Use(tango.ClassicHandlers...) sess := session.New(session.Options{ MaxAge: time.Duration(setting.SessionCookieLifeTime), }) tg.Use( tango.Static(tango.StaticOptions{ RootPath: "./static", Prefix: "static", }), tango.Static(tango.StaticOptions{ RootPath: "./static_source", Prefix: "static_source", }), sess, middlewares.Renders, setting.Captcha, ) tg.Get("/favicon.ico", func(ctx *tango.Context) { ctx.ServeFile("./static/favicon.ico") }) if setting.EnableXSRF { tg.Use(xsrf.New(time.Duration(setting.SessionCookieLifeTime))) } tg.Use(flash.Flashes(sess), events.Events()) return tg }
func Web(listen, static, templates, admin, pass string, tls bool, certFile, keyFile string) { _, err := DB.GetUser(admin) if err != nil { if err == leveldb.ErrNotFound { err = DB.AddUser(admin, pass) } } if err != nil { panic(err) } adminUser = admin t := tango.Classic() sess := session.New(session.Options{ MaxAge: timeout, }) t.Use( tango.Static(tango.StaticOptions{ RootPath: static, }), renders.New(renders.Options{ Reload: true, // if reload when template is changed Directory: templates, }), sess, auth(), binding.Bind(), xsrf.New(timeout), flash.Flashes(sess), ) t.Get("/", new(MainAction)) t.Any("/login", new(LoginAction)) t.Get("/logout", new(LogoutAction)) t.Get("/down", new(DownAction)) t.Group("/user", func(g *tango.Group) { g.Get("/", new(UserAction)) g.Any("/chgpass", new(ChgPassAction)) g.Any("/add", new(UserAddAction)) g.Any("/edit", new(UserEditAction)) g.Any("/del", new(UserDelAction)) }) t.Group("/group", func(g *tango.Group) { g.Get("/", new(GroupAction)) g.Get("/add", new(GroupAddAction)) g.Get("/edit", new(GroupEditAction)) g.Get("/del", new(GroupDelAction)) }) t.Group("/perm", func(g *tango.Group) { g.Get("/", new(PermAction)) g.Any("/add", new(PermAddAction)) g.Any("/edit", new(PermEditAction)) g.Any("/del", new(PermDelAction)) g.Any("/updateOwner", new(PermUpdateOwner)) g.Any("/updateGroup", new(PermUpdateGroup)) g.Any("/updatePerm", new(PermUpdatePerm)) }) if tls { t.RunTLS(certFile, keyFile, listen) return } t.Run(listen) }
func (is *BootstrapService) Init(v interface{}) (*Result, error) { opt, ok := v.(BootstrapInitOption) if !ok { return nil, ErrServiceFuncNeedType(is.Init, opt) } var err error if opt.Config { core.Cfg = core.NewConfig() if err = core.Cfg.Sync(core.ConfigFile); err != nil { return nil, err } } if core.Cfg != nil && opt.Database { // database depends on config log.SetLevelByString("error") tidb.Debug = false // close tidb debug core.Db, err = xorm.NewEngine(core.Cfg.Db.Driver, core.Cfg.Db.DSN) if err != nil { return nil, err } core.Db.SetLogger(nil) // core.Db.ShowDebug = true // core.Db.ShowSQL = true } if core.Cfg != nil && opt.Server { // server depends on config core.Server = tango.New([]tango.Handler{ tango.Return(), tango.Param(), tango.Contexts(), }...) core.Server.Use(tango.Static(tango.StaticOptions{ RootPath: core.StaticDirectory, Prefix: core.StaticPrefix, })) core.Server.Use(tango.Static(tango.StaticOptions{ RootPath: core.ThemeDirectory, Prefix: core.ThemePrefix, })) core.Server.Use(renders.New(renders.Options{ Reload: true, Directory: core.ThemeDirectory, Extensions: []string{".tmpl"}, Funcs: template.FuncMap{ "TimeUnixFormat": utils.TimeUnixFormat, "TimeUnixFriend": utils.TimeUnixFriend, "Mardown2Str": utils.Markdown2String, "Markdown2HTML": utils.Markdown2HTML, "Nl2BrHTML": utils.Nl2Br, "Nl2BrString": utils.Nl2BrString, "BytesSizeFriend": utils.FriendBytesSize, }, })) sessions := session.New(session.Options{ SessionIdName: core.SessionName, }) core.Server.Use(xsrf.New(time.Hour)) core.Server.Use(binding.Bind()) core.Server.Use(sessions) core.Server.Use(flash.Flashes(sessions)) } return nil, nil }
func TestSession2(t *testing.T) { buff := bytes.NewBufferString("") recorder := httptest.NewRecorder() recorder.Body = buff tg := tango.Classic() store, err := New(Options{ Host: "127.0.0.1", Port: 8888, MaxAge: 10 * time.Second, }) if err != nil { t.Error(err) } tg.Use(session.New(session.Options{ Store: store, })) tg.Get("/", new(SessionAction2)) req, err := http.NewRequest("GET", "http://localhost:8000/", nil) if err != nil { t.Error(err) } tg.ServeHTTP(recorder, req) expect(t, recorder.Code, http.StatusOK) expect(t, len(buff.String()), 0) expect(t, buff.String(), "") time.Sleep(time.Second) req, err = http.NewRequest("GET", "http://localhost:8000/", nil) if err != nil { t.Error(err) } cks := readSetCookies(recorder.Header()) for _, ck := range cks { req.AddCookie(ck) } buff.Reset() recorder = httptest.NewRecorder() recorder.Body = buff tg.ServeHTTP(recorder, req) expect(t, recorder.Code, http.StatusOK) expect(t, len(buff.String()), 1) expect(t, buff.String(), "b") time.Sleep(time.Second * 15) req, err = http.NewRequest("GET", "http://localhost:8000/", nil) if err != nil { t.Error(err) } cks = readSetCookies(recorder.Header()) for _, ck := range cks { req.AddCookie(ck) } buff.Reset() recorder = httptest.NewRecorder() recorder.Body = buff tg.ServeHTTP(recorder, req) expect(t, recorder.Code, http.StatusOK) expect(t, len(buff.String()), 0) expect(t, buff.String(), "") }