123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
- // See LICENSE.txt for license information.
- package api4
- import (
- "net/http"
- "github.com/NYTimes/gziphandler"
- "github.com/mattermost/mattermost-server/v5/web"
- )
- type Context = web.Context
- // ApiHandler provides a handler for API endpoints which do not require the user to be logged in order for access to be
- // granted.
- func (api *API) ApiHandler(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
- handler := &web.Handler{
- GetGlobalAppOptions: api.GetGlobalAppOptions,
- HandleFunc: h,
- HandlerName: web.GetHandlerName(h),
- RequireSession: false,
- TrustRequester: false,
- RequireMfa: false,
- IsStatic: false,
- IsLocal: false,
- }
- if *api.ConfigService.Config().ServiceSettings.WebserverMode == "gzip" {
- return gziphandler.GzipHandler(handler)
- }
- return handler
- }
- // ApiSessionRequired provides a handler for API endpoints which require the user to be logged in in order for access to
- // be granted.
- func (api *API) ApiSessionRequired(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
- handler := &web.Handler{
- GetGlobalAppOptions: api.GetGlobalAppOptions,
- HandleFunc: h,
- HandlerName: web.GetHandlerName(h),
- RequireSession: true,
- TrustRequester: false,
- RequireMfa: true,
- IsStatic: false,
- IsLocal: false,
- }
- if *api.ConfigService.Config().ServiceSettings.WebserverMode == "gzip" {
- return gziphandler.GzipHandler(handler)
- }
- return handler
- }
- // ApiSessionRequiredMfa provides a handler for API endpoints which require a logged-in user session but when accessed,
- // if MFA is enabled, the MFA process is not yet complete, and therefore the requirement to have completed the MFA
- // authentication must be waived.
- func (api *API) ApiSessionRequiredMfa(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
- handler := &web.Handler{
- GetGlobalAppOptions: api.GetGlobalAppOptions,
- HandleFunc: h,
- HandlerName: web.GetHandlerName(h),
- RequireSession: true,
- TrustRequester: false,
- RequireMfa: false,
- IsStatic: false,
- IsLocal: false,
- }
- if *api.ConfigService.Config().ServiceSettings.WebserverMode == "gzip" {
- return gziphandler.GzipHandler(handler)
- }
- return handler
- }
- // ApiHandlerTrustRequester provides a handler for API endpoints which do not require the user to be logged in and are
- // allowed to be requested directly rather than via javascript/XMLHttpRequest, such as site branding images or the
- // websocket.
- func (api *API) ApiHandlerTrustRequester(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
- handler := &web.Handler{
- GetGlobalAppOptions: api.GetGlobalAppOptions,
- HandleFunc: h,
- HandlerName: web.GetHandlerName(h),
- RequireSession: false,
- TrustRequester: true,
- RequireMfa: false,
- IsStatic: false,
- IsLocal: false,
- }
- if *api.ConfigService.Config().ServiceSettings.WebserverMode == "gzip" {
- return gziphandler.GzipHandler(handler)
- }
- return handler
- }
- // ApiSessionRequiredTrustRequester provides a handler for API endpoints which do require the user to be logged in and
- // are allowed to be requested directly rather than via javascript/XMLHttpRequest, such as emoji or file uploads.
- func (api *API) ApiSessionRequiredTrustRequester(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
- handler := &web.Handler{
- GetGlobalAppOptions: api.GetGlobalAppOptions,
- HandleFunc: h,
- HandlerName: web.GetHandlerName(h),
- RequireSession: true,
- TrustRequester: true,
- RequireMfa: true,
- IsStatic: false,
- IsLocal: false,
- }
- if *api.ConfigService.Config().ServiceSettings.WebserverMode == "gzip" {
- return gziphandler.GzipHandler(handler)
- }
- return handler
- }
- // DisableWhenBusy provides a handler for API endpoints which should be disabled when the server is under load,
- // responding with HTTP 503 (Service Unavailable).
- func (api *API) ApiSessionRequiredDisableWhenBusy(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
- handler := &web.Handler{
- GetGlobalAppOptions: api.GetGlobalAppOptions,
- HandleFunc: h,
- HandlerName: web.GetHandlerName(h),
- RequireSession: true,
- TrustRequester: false,
- RequireMfa: false,
- IsStatic: false,
- IsLocal: false,
- DisableWhenBusy: true,
- }
- if *api.ConfigService.Config().ServiceSettings.WebserverMode == "gzip" {
- return gziphandler.GzipHandler(handler)
- }
- return handler
- }
- // ApiLocal provides a handler for API endpoints to be used in local
- // mode, this is, through a UNIX socket and without an authenticated
- // session, but with one that has no user set and no permission
- // restrictions
- func (api *API) ApiLocal(h func(*Context, http.ResponseWriter, *http.Request)) http.Handler {
- handler := &web.Handler{
- GetGlobalAppOptions: api.GetGlobalAppOptions,
- HandleFunc: h,
- HandlerName: web.GetHandlerName(h),
- RequireSession: false,
- TrustRequester: false,
- RequireMfa: false,
- IsStatic: false,
- IsLocal: true,
- }
- if *api.ConfigService.Config().ServiceSettings.WebserverMode == "gzip" {
- return gziphandler.GzipHandler(handler)
- }
- return handler
- }
|