summaryrefslogtreecommitdiffstats
path: root/api/api.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/api.go')
-rw-r--r--api/api.go118
1 files changed, 53 insertions, 65 deletions
diff --git a/api/api.go b/api/api.go
index 2dca63a07..283120b55 100644
--- a/api/api.go
+++ b/api/api.go
@@ -56,7 +56,10 @@ type Routes struct {
Webrtc *mux.Router // 'api/v3/webrtc'
}
-var BaseRoutes *Routes
+type API struct {
+ App *app.App
+ BaseRoutes *Routes
+}
func NewRouter() *mux.Router {
ret := mux.NewRouter()
@@ -64,51 +67,54 @@ func NewRouter() *mux.Router {
return ret
}
-func InitApi(root *mux.Router) {
- BaseRoutes = &Routes{}
- BaseRoutes.Root = root
- BaseRoutes.ApiRoot = root.PathPrefix(model.API_URL_SUFFIX_V3).Subrouter()
- BaseRoutes.Users = BaseRoutes.ApiRoot.PathPrefix("/users").Subrouter()
- BaseRoutes.NeedUser = BaseRoutes.Users.PathPrefix("/{user_id:[A-Za-z0-9]+}").Subrouter()
- BaseRoutes.Teams = BaseRoutes.ApiRoot.PathPrefix("/teams").Subrouter()
- BaseRoutes.NeedTeam = BaseRoutes.Teams.PathPrefix("/{team_id:[A-Za-z0-9]+}").Subrouter()
- BaseRoutes.Channels = BaseRoutes.NeedTeam.PathPrefix("/channels").Subrouter()
- BaseRoutes.NeedChannel = BaseRoutes.Channels.PathPrefix("/{channel_id:[A-Za-z0-9]+}").Subrouter()
- BaseRoutes.NeedChannelName = BaseRoutes.Channels.PathPrefix("/name/{channel_name:[A-Za-z0-9_-]+}").Subrouter()
- BaseRoutes.Posts = BaseRoutes.NeedChannel.PathPrefix("/posts").Subrouter()
- BaseRoutes.NeedPost = BaseRoutes.Posts.PathPrefix("/{post_id:[A-Za-z0-9]+}").Subrouter()
- BaseRoutes.Commands = BaseRoutes.NeedTeam.PathPrefix("/commands").Subrouter()
- BaseRoutes.TeamFiles = BaseRoutes.NeedTeam.PathPrefix("/files").Subrouter()
- BaseRoutes.Files = BaseRoutes.ApiRoot.PathPrefix("/files").Subrouter()
- BaseRoutes.NeedFile = BaseRoutes.Files.PathPrefix("/{file_id:[A-Za-z0-9]+}").Subrouter()
- BaseRoutes.Hooks = BaseRoutes.NeedTeam.PathPrefix("/hooks").Subrouter()
- BaseRoutes.OAuth = BaseRoutes.ApiRoot.PathPrefix("/oauth").Subrouter()
- BaseRoutes.Admin = BaseRoutes.ApiRoot.PathPrefix("/admin").Subrouter()
- BaseRoutes.General = BaseRoutes.ApiRoot.PathPrefix("/general").Subrouter()
- BaseRoutes.Preferences = BaseRoutes.ApiRoot.PathPrefix("/preferences").Subrouter()
- BaseRoutes.License = BaseRoutes.ApiRoot.PathPrefix("/license").Subrouter()
- BaseRoutes.Public = BaseRoutes.ApiRoot.PathPrefix("/public").Subrouter()
- BaseRoutes.Emoji = BaseRoutes.ApiRoot.PathPrefix("/emoji").Subrouter()
- BaseRoutes.Webrtc = BaseRoutes.ApiRoot.PathPrefix("/webrtc").Subrouter()
-
- InitUser()
- InitTeam()
- InitChannel()
- InitPost()
- InitWebSocket()
- InitFile()
- InitCommand()
- InitAdmin()
- InitGeneral()
- InitOAuth()
- InitWebhook()
- InitPreference()
- InitLicense()
- InitEmoji()
- InitStatus()
- InitWebrtc()
- InitReaction()
- InitDeprecated()
+func Init(a *app.App, root *mux.Router) *API {
+ api := &API{
+ App: a,
+ BaseRoutes: &Routes{},
+ }
+ api.BaseRoutes.Root = root
+ api.BaseRoutes.ApiRoot = root.PathPrefix(model.API_URL_SUFFIX_V3).Subrouter()
+ api.BaseRoutes.Users = api.BaseRoutes.ApiRoot.PathPrefix("/users").Subrouter()
+ api.BaseRoutes.NeedUser = api.BaseRoutes.Users.PathPrefix("/{user_id:[A-Za-z0-9]+}").Subrouter()
+ api.BaseRoutes.Teams = api.BaseRoutes.ApiRoot.PathPrefix("/teams").Subrouter()
+ api.BaseRoutes.NeedTeam = api.BaseRoutes.Teams.PathPrefix("/{team_id:[A-Za-z0-9]+}").Subrouter()
+ api.BaseRoutes.Channels = api.BaseRoutes.NeedTeam.PathPrefix("/channels").Subrouter()
+ api.BaseRoutes.NeedChannel = api.BaseRoutes.Channels.PathPrefix("/{channel_id:[A-Za-z0-9]+}").Subrouter()
+ api.BaseRoutes.NeedChannelName = api.BaseRoutes.Channels.PathPrefix("/name/{channel_name:[A-Za-z0-9_-]+}").Subrouter()
+ api.BaseRoutes.Posts = api.BaseRoutes.NeedChannel.PathPrefix("/posts").Subrouter()
+ api.BaseRoutes.NeedPost = api.BaseRoutes.Posts.PathPrefix("/{post_id:[A-Za-z0-9]+}").Subrouter()
+ api.BaseRoutes.Commands = api.BaseRoutes.NeedTeam.PathPrefix("/commands").Subrouter()
+ api.BaseRoutes.TeamFiles = api.BaseRoutes.NeedTeam.PathPrefix("/files").Subrouter()
+ api.BaseRoutes.Files = api.BaseRoutes.ApiRoot.PathPrefix("/files").Subrouter()
+ api.BaseRoutes.NeedFile = api.BaseRoutes.Files.PathPrefix("/{file_id:[A-Za-z0-9]+}").Subrouter()
+ api.BaseRoutes.Hooks = api.BaseRoutes.NeedTeam.PathPrefix("/hooks").Subrouter()
+ api.BaseRoutes.OAuth = api.BaseRoutes.ApiRoot.PathPrefix("/oauth").Subrouter()
+ api.BaseRoutes.Admin = api.BaseRoutes.ApiRoot.PathPrefix("/admin").Subrouter()
+ api.BaseRoutes.General = api.BaseRoutes.ApiRoot.PathPrefix("/general").Subrouter()
+ api.BaseRoutes.Preferences = api.BaseRoutes.ApiRoot.PathPrefix("/preferences").Subrouter()
+ api.BaseRoutes.License = api.BaseRoutes.ApiRoot.PathPrefix("/license").Subrouter()
+ api.BaseRoutes.Public = api.BaseRoutes.ApiRoot.PathPrefix("/public").Subrouter()
+ api.BaseRoutes.Emoji = api.BaseRoutes.ApiRoot.PathPrefix("/emoji").Subrouter()
+ api.BaseRoutes.Webrtc = api.BaseRoutes.ApiRoot.PathPrefix("/webrtc").Subrouter()
+
+ api.InitUser()
+ api.InitTeam()
+ api.InitChannel()
+ api.InitPost()
+ api.InitWebSocket()
+ api.InitFile()
+ api.InitCommand()
+ api.InitAdmin()
+ api.InitGeneral()
+ api.InitOAuth()
+ api.InitWebhook()
+ api.InitPreference()
+ api.InitLicense()
+ api.InitEmoji()
+ api.InitStatus()
+ api.InitWebrtc()
+ api.InitReaction()
+ api.InitDeprecated()
// 404 on any api route before web.go has a chance to serve it
root.Handle("/api/{anything:.*}", http.HandlerFunc(Handle404))
@@ -120,26 +126,8 @@ func InitApi(root *mux.Router) {
if *utils.Cfg.ServiceSettings.EnableAPIv3 {
l4g.Info("API version 3 is scheduled for deprecation. Please see https://api.mattermost.com for details.")
}
-}
-
-func HandleEtag(etag string, routeName string, w http.ResponseWriter, r *http.Request) bool {
- metrics := app.Global().Metrics
- if et := r.Header.Get(model.HEADER_ETAG_CLIENT); len(etag) > 0 {
- if et == etag {
- w.Header().Set(model.HEADER_ETAG_SERVER, etag)
- w.WriteHeader(http.StatusNotModified)
- if metrics != nil {
- metrics.IncrementEtagHitCounter(routeName)
- }
- return true
- }
- }
-
- if metrics != nil {
- metrics.IncrementEtagMissCounter(routeName)
- }
- return false
+ return api
}
func ReturnStatusOK(w http.ResponseWriter) {