// HandlerTest handles test GET request. func HandlerTest(ctx context.Context, w http.ResponseWriter, r *http.Request) ErrHandler { c, err := conf.FromContext(ctx) if err != nil { return ErrHandler{err, http.StatusInternalServerError} } coll, err := db.C(ctx, "tests") if err != nil { return ErrHandler{err, http.StatusInternalServerError} } command := r.FormValue("write") switch { case c.Debug && command == "add": err = coll.Insert(bson.M{"ts": time.Now()}) case c.Debug && command == "del": err = coll.Remove(nil) } if err != nil && err != mgo.ErrNotFound { return ErrHandler{err, http.StatusInternalServerError} } n, err := coll.Count() if err != nil { return ErrHandler{err, http.StatusInternalServerError} } u, err := auth.ExtractUser(ctx) if err != nil { return ErrHandler{err, http.StatusInternalServerError} } c.L.Debug.Printf("user=%v", u) fmt.Fprintf(w, "found %v items", n) return ErrHandler{nil, http.StatusOK} }
// Authenticate checks user's authentication. // It doesn't validate user's token value and doesn't detect anonymous // request as error, so this should be identified before. // It writes User pointer to new context. func Authenticate(ctx context.Context) (context.Context, error) { t, err := ExtractTokenKey(ctx) if err != nil { return ctx, err } if t == "" { // it is anonymous request return setUserContext(ctx, AnonUser), nil } // use already opened session from context coll, err := db.C(ctx, "users") if err != nil { return ctx, err } u := &User{} err = coll.Find(bson.M{"token": t, "off": false}).One(u) if err != nil { return ctx, err } return setUserContext(ctx, u), nil }