2015-10-08 12:27:09 -04:00
|
|
|
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
2015-06-14 23:53:32 -08:00
|
|
|
// See License.txt for license information.
|
|
|
|
|
|
|
|
|
|
package api
|
|
|
|
|
|
|
|
|
|
import (
|
2016-02-08 07:26:10 -05:00
|
|
|
"net/http"
|
|
|
|
|
|
2016-04-21 22:37:01 -07:00
|
|
|
"github.com/gorilla/mux"
|
2015-06-14 23:53:32 -08:00
|
|
|
"github.com/mattermost/platform/model"
|
|
|
|
|
"github.com/mattermost/platform/utils"
|
2016-01-19 10:54:19 -06:00
|
|
|
|
|
|
|
|
_ "github.com/nicksnyder/go-i18n/i18n"
|
2015-06-14 23:53:32 -08:00
|
|
|
)
|
|
|
|
|
|
2016-04-21 22:37:01 -07:00
|
|
|
type Routes struct {
|
|
|
|
|
Root *mux.Router // ''
|
|
|
|
|
ApiRoot *mux.Router // 'api/v3'
|
|
|
|
|
|
|
|
|
|
Users *mux.Router // 'api/v3/users'
|
|
|
|
|
NeedUser *mux.Router // 'api/v3/users/{user_id:[A-Za-z0-9]+}'
|
|
|
|
|
|
|
|
|
|
Teams *mux.Router // 'api/v3/teams'
|
|
|
|
|
NeedTeam *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}'
|
|
|
|
|
|
2016-04-27 16:02:58 -04:00
|
|
|
Channels *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels'
|
|
|
|
|
NeedChannel *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/{channel_id:[A-Za-z0-9]+}'
|
|
|
|
|
NeedChannelName *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/name/{channel_name:[A-Za-z0-9-]+}'
|
2016-04-21 22:37:01 -07:00
|
|
|
|
|
|
|
|
Posts *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/{channel_id:[A-Za-z0-9]+}/posts'
|
|
|
|
|
NeedPost *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/channels/{channel_id:[A-Za-z0-9]+}/posts/{post_id:[A-Za-z0-9]+}'
|
|
|
|
|
|
|
|
|
|
Commands *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/commands'
|
|
|
|
|
Hooks *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/hooks'
|
|
|
|
|
|
|
|
|
|
Files *mux.Router // 'api/v3/teams/{team_id:[A-Za-z0-9]+}/files'
|
|
|
|
|
|
|
|
|
|
OAuth *mux.Router // 'api/v3/oauth'
|
|
|
|
|
|
|
|
|
|
Admin *mux.Router // 'api/v3/admin'
|
|
|
|
|
|
2016-05-24 14:31:30 -07:00
|
|
|
General *mux.Router // 'api/v3/general'
|
|
|
|
|
|
2016-04-21 22:37:01 -07:00
|
|
|
Preferences *mux.Router // 'api/v3/preferences'
|
|
|
|
|
|
|
|
|
|
License *mux.Router // 'api/v3/license'
|
2016-05-05 16:35:03 -04:00
|
|
|
|
|
|
|
|
Public *mux.Router // 'api/v3/public'
|
2016-04-21 22:37:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var BaseRoutes *Routes
|
|
|
|
|
|
2015-06-14 23:53:32 -08:00
|
|
|
func InitApi() {
|
2016-04-21 22:37:01 -07:00
|
|
|
BaseRoutes = &Routes{}
|
|
|
|
|
BaseRoutes.Root = Srv.Router
|
|
|
|
|
BaseRoutes.ApiRoot = Srv.Router.PathPrefix(model.API_URL_SUFFIX).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()
|
2016-04-27 16:02:58 -04:00
|
|
|
BaseRoutes.NeedChannelName = BaseRoutes.Channels.PathPrefix("/name/{channel_name:[A-Za-z0-9-]+}").Subrouter()
|
2016-04-21 22:37:01 -07:00
|
|
|
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.Files = BaseRoutes.NeedTeam.PathPrefix("/files").Subrouter()
|
|
|
|
|
BaseRoutes.Hooks = BaseRoutes.NeedTeam.PathPrefix("/hooks").Subrouter()
|
|
|
|
|
BaseRoutes.OAuth = BaseRoutes.ApiRoot.PathPrefix("/oauth").Subrouter()
|
|
|
|
|
BaseRoutes.Admin = BaseRoutes.ApiRoot.PathPrefix("/admin").Subrouter()
|
2016-05-24 14:31:30 -07:00
|
|
|
BaseRoutes.General = BaseRoutes.ApiRoot.PathPrefix("/general").Subrouter()
|
2016-04-21 22:37:01 -07:00
|
|
|
BaseRoutes.Preferences = BaseRoutes.ApiRoot.PathPrefix("/preferences").Subrouter()
|
|
|
|
|
BaseRoutes.License = BaseRoutes.ApiRoot.PathPrefix("/license").Subrouter()
|
2016-05-05 16:35:03 -04:00
|
|
|
BaseRoutes.Public = BaseRoutes.ApiRoot.PathPrefix("/public").Subrouter()
|
2016-04-21 22:37:01 -07:00
|
|
|
|
|
|
|
|
InitUser()
|
|
|
|
|
InitTeam()
|
|
|
|
|
InitChannel()
|
|
|
|
|
InitPost()
|
|
|
|
|
InitWebSocket()
|
|
|
|
|
InitFile()
|
|
|
|
|
InitCommand()
|
|
|
|
|
InitAdmin()
|
2016-05-24 14:31:30 -07:00
|
|
|
InitGeneral()
|
2016-04-21 22:37:01 -07:00
|
|
|
InitOAuth()
|
|
|
|
|
InitWebhook()
|
|
|
|
|
InitPreference()
|
|
|
|
|
InitLicense()
|
|
|
|
|
|
2016-04-01 11:48:19 -04:00
|
|
|
// 404 on any api route before web.go has a chance to serve it
|
|
|
|
|
Srv.Router.Handle("/api/{anything:.*}", http.HandlerFunc(Handle404))
|
2015-06-14 23:53:32 -08:00
|
|
|
|
2016-02-08 07:26:10 -05:00
|
|
|
utils.InitHTML()
|
2015-06-14 23:53:32 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func HandleEtag(etag string, w http.ResponseWriter, r *http.Request) bool {
|
|
|
|
|
if et := r.Header.Get(model.HEADER_ETAG_CLIENT); len(etag) > 0 {
|
|
|
|
|
if et == etag {
|
|
|
|
|
w.WriteHeader(http.StatusNotModified)
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
}
|
2016-05-24 14:31:30 -07:00
|
|
|
|
|
|
|
|
func ReturnStatusOK(w http.ResponseWriter) {
|
|
|
|
|
m := make(map[string]string)
|
|
|
|
|
m[model.STATUS] = model.STATUS_OK
|
|
|
|
|
w.Write([]byte(model.MapToJson(m)))
|
|
|
|
|
}
|