Пример #1
0
Файл: core.go Проект: z0rr0/luss
// 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}
}
Пример #2
0
Файл: auth.go Проект: z0rr0/luss
// 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
}