func (s *timeSuite) TestMacaroonsExpireTime(c *gc.C) { for i, test := range macaroonsExpireTimeTests { c.Logf("%d. %s", i, test.about) t, expires := checkers.MacaroonsExpiryTime(test.macaroons) c.Assert(t.Equal(test.expectTime), gc.Equals, true, gc.Commentf("obtained: %s, expected: %s", t, test.expectTime)) c.Assert(expires, gc.Equals, test.expectExpires) } }
// NewCookie takes a slice of macaroons and returns them // encoded as a cookie. The slice should contain a single primary // macaroon in its first element, and any discharges after that. func NewCookie(ms macaroon.Slice) (*http.Cookie, error) { if len(ms) == 0 { return nil, errgo.New("no macaroons in cookie") } data, err := json.Marshal(ms) if err != nil { return nil, errgo.Notef(err, "cannot marshal macaroons") } cookie := &http.Cookie{ Name: fmt.Sprintf("macaroon-%x", ms[0].Signature()), Value: base64.StdEncoding.EncodeToString(data), } cookie.Expires, _ = checkers.MacaroonsExpiryTime(ms) // TODO(rog) other fields. return cookie, nil }