package main import ( "github.com/gorilla/securecookie" "github.com/gorilla/sessions" "net/http" ) var sesStore = sessions.NewCookieStore(securecookie.GenerateRandomKey(64)) type Notification struct { Title string Msg string Type string /* error, info or success */ } type Session struct { User string Notif []Notification S *sessions.Session } func getNotif(session *sessions.Session) []Notification { msgs := session.Flashes("nMsg") titles := session.Flashes("nTitle") tpes := session.Flashes("nType") notif := make([]Notification, len(msgs)) for i, m := range msgs { msg, _ := m.(string) title, _ := titles[i].(string) tpe, _ := tpes[i].(string) notif[i] = Notification{title, msg, tpe} } return notif } func GetSession(r *http.Request) (s *Session) { s = new(Session) var err error s.S, err = sesStore.Get(r, "session") if err == nil && !s.S.IsNew { s.User, _ = s.S.Values["user"].(string) s.Notif = getNotif(s.S) } return } func (s *Session) LogIn(user string) { s.User = user s.S.Values["user"] = user } func (s *Session) LogOut() { s.S.Values["user"] = "" } func (s *Session) Notify(title, msg, tpe string) { s.S.AddFlash(msg, "nMsg") s.S.AddFlash(title, "nTitle") s.S.AddFlash(tpe, "nType") } func (s *Session) Save(w http.ResponseWriter, r *http.Request) { sesStore.Save(r, w, s.S) }