// Generates a login session for a user and returns the session ID and cookie name. func createUserSession(r http.ResponseWriter, rq *http.Request, authenticator *auth.Authenticator) error { body, err := ioutil.ReadAll(rq.Body) if err != nil { return err } var params struct { Name string `json:"name"` TTL time.Duration `json:"ttl"` } err = json.Unmarshal(body, ¶ms) if err != nil { return err } if params.Name == "" || params.TTL < 0 { return &base.HTTPError{http.StatusBadRequest, "Invalid name or ttl"} } session, err := authenticator.CreateSession(params.Name, params.TTL) if err != nil { return err } var response struct { SessionID string `json:"session_id"` Expires time.Time `json:"expires"` CookieName string `json:"cookie_name"` } response.SessionID = session.ID response.Expires = session.Expiration response.CookieName = auth.CookieName bytes, _ := json.Marshal(response) r.Header().Set("Content-Type", "application/json") r.Write(bytes) return nil }