From dcf9e96a0b16530549168a7891ed8242663b5f28 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 22 Sep 2017 12:54:27 -0500 Subject: remove global refs from api/api4 (#7496) --- api/api.go | 118 +++++++++++++++++++++++++++---------------------------------- 1 file changed, 53 insertions(+), 65 deletions(-) (limited to 'api/api.go') 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) { -- cgit v1.2.3-1-g7c22