1package aetest
2
3import (
4	"hash/crc32"
5	"net/http"
6	"strconv"
7
8	"google.golang.org/appengine/user"
9)
10
11// Login causes the provided Request to act as though issued by the given user.
12func Login(u *user.User, req *http.Request) {
13	req.Header.Set("X-AppEngine-User-Email", u.Email)
14	id := u.ID
15	if id == "" {
16		id = strconv.Itoa(int(crc32.Checksum([]byte(u.Email), crc32.IEEETable)))
17	}
18	req.Header.Set("X-AppEngine-User-Id", id)
19	req.Header.Set("X-AppEngine-Federated-Identity", u.FederatedIdentity)
20	req.Header.Set("X-AppEngine-Federated-Provider", u.FederatedProvider)
21	// NOTE: the following two headers are wrong, but are preserved to not break legacy tests.
22	req.Header.Set("X-AppEngine-User-Federated-Identity", u.Email)
23	req.Header.Set("X-AppEngine-User-Federated-Provider", u.FederatedProvider)
24	if u.Admin {
25		req.Header.Set("X-AppEngine-User-Is-Admin", "1")
26	} else {
27		req.Header.Set("X-AppEngine-User-Is-Admin", "0")
28	}
29}
30
31// Logout causes the provided Request to act as though issued by a logged-out
32// user.
33func Logout(req *http.Request) {
34	req.Header.Del("X-AppEngine-User-Email")
35	req.Header.Del("X-AppEngine-User-Id")
36	req.Header.Del("X-AppEngine-User-Is-Admin")
37	req.Header.Del("X-AppEngine-Federated-Identity")
38	req.Header.Del("X-AppEngine-Federated-Provider")
39	// NOTE: the following two headers are wrong, but are preserved to not break legacy tests.
40	req.Header.Del("X-AppEngine-User-Federated-Identity")
41	req.Header.Del("X-AppEngine-User-Federated-Provider")
42}
43