@@ -0,0 +1,43 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// CreateSession logs in and stores the returned cookie when the client was
|
||||
// configured with sessions. response.Cookies() can be forwarded by a web
|
||||
// frontend to its browser.
|
||||
func (c *Client) CreateSession(ctx context.Context, credentials Credentials) (User, *Response, error) {
|
||||
var envelope struct {
|
||||
User User `json:"user"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodPost, "v1/session", credentials, &envelope)
|
||||
return envelope.User, response, err
|
||||
}
|
||||
|
||||
// Session returns the user associated with the current session cookie.
|
||||
func (c *Client) Session(ctx context.Context) (User, *Response, error) {
|
||||
var envelope struct {
|
||||
User User `json:"user"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodGet, "v1/session", nil, &envelope)
|
||||
return envelope.User, response, err
|
||||
}
|
||||
|
||||
// DeleteSession logs out. Forward response.Cookies() to the browser so its
|
||||
// session cookie is removed as well.
|
||||
func (c *Client) DeleteSession(ctx context.Context) (*Response, error) {
|
||||
return c.do(ctx, http.MethodDelete, "v1/session", nil, nil)
|
||||
}
|
||||
|
||||
// ForwardCookies copies API Set-Cookie headers to a frontend response. It is
|
||||
// intended for the Response returned by CreateSession or DeleteSession.
|
||||
func ForwardCookies(w http.ResponseWriter, response *Response) {
|
||||
if w == nil || response == nil || response.Response == nil {
|
||||
return
|
||||
}
|
||||
for _, cookie := range response.Cookies() {
|
||||
http.SetCookie(w, cookie)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user