// Token will return a token. If SingleToken = true, it will return the same token for every page. func Token(w http.ResponseWriter, r *http.Request, sess *sessions.Session) string { // Generate the map if it doesn't exist if _, ok := sess.Values[TokenName]; !ok { sess.Values[TokenName] = make(StringMap) } path := r.URL.Path if SingleToken { path = "/" } sessMap := sess.Values[TokenName].(StringMap) if _, ok := sessMap[path]; !ok { if len(sessMap) >= MaxTokens { for i, _ := range sessMap { delete(sessMap, i) } } sessMap[path] = generate(TokenLength) sess.Save(r, w) } return sessMap[path] }
// Clear will remove all the tokens. Call after a permission change. func Clear(w http.ResponseWriter, r *http.Request, sess *sessions.Session) { // Delete the map if it doesn't exist if _, ok := sess.Values[TokenName]; ok { delete(sess.Values, TokenName) sess.Save(r, w) } }