123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /*
- * EliasDB
- *
- * Copyright 2016 Matthias Ladkau. All rights reserved.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
- package ac
- import (
- "net/http"
- "devt.de/krotik/common/httputil/user"
- "devt.de/krotik/eliasdb/api"
- )
- /*
- EndpointLogout is the logout endpoint URL (rooted). Handles logout/
- */
- const EndpointLogout = api.APIRoot + "/logout/"
- /*
- LogoutEndpointInst creates a new endpoint handler.
- */
- func LogoutEndpointInst() api.RestEndpointHandler {
- return &logoutEndpoint{}
- }
- /*
- Handler object for logout operations.
- */
- type logoutEndpoint struct {
- *api.DefaultEndpointHandler
- }
- /*
- HandlePOST terminates the current user session.
- */
- func (lo *logoutEndpoint) HandlePOST(w http.ResponseWriter, r *http.Request, resources []string) {
- // Remove all cookies - we don't check for a valid authentication so also
- // old (invalid) cookies are removed
- AuthHandler.InvalidateAuthCookie(r)
- AuthHandler.RemoveAuthCookie(w)
- user.UserSessionManager.RemoveSessionCookie(w)
- ct := r.Header.Get("Content-Type")
- if ct != "application/json" {
- // Do a redirect for non-REST clients
- http.Redirect(w, r, "/", http.StatusFound)
- }
- }
- /*
- SwaggerDefs is used to describe the endpoint in swagger.
- */
- func (lo *logoutEndpoint) SwaggerDefs(s map[string]interface{}) {
- s["paths"].(map[string]interface{})["/logout"] = map[string]interface{}{
- "post": map[string]interface{}{
- "summary": "Logout the current user.",
- "description": "The logout endpoint terminates the current user session.",
- "consumes": []string{
- "application/json",
- },
- "produces": []string{
- "application/json",
- },
- "responses": map[string]interface{}{
- "302": map[string]interface{}{
- "description": "Redirect to /.",
- },
- "default": map[string]interface{}{
- "description": "Error response",
- "schema": map[string]interface{}{
- "$ref": "#/definitions/Error",
- },
- },
- },
- },
- }
- // Add generic error object to definition
- s["definitions"].(map[string]interface{})["Error"] = map[string]interface{}{
- "description": "A human readable error mesage.",
- "type": "string",
- }
- }
|