Add capabilities method

This commit is contained in:
nxshock 2019-07-25 20:14:37 +05:00
parent 7293b33b6f
commit 33bb853438
4 changed files with 59 additions and 1 deletions

View File

@ -15,4 +15,5 @@ Implemented from [Client-Server API](https://matrix.org/docs/spec/client_server/
- [x] [5.4.3 POST /_matrix/client/r0/logout](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-logout)
- [x] [5.4.4 POST /_matrix/client/r0/logout/all](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-logout-all)
- [x] [5.7.1 GET /_matrix/client/r0/account/whoami](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-account-whoami)
- [x] [6.1 GET /_matrix/client/r0/capabilities](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-capabilities)
- [x] [10.4.1 GET /_matrix/client/r0/joined_rooms](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-joined-rooms)

View File

@ -11,6 +11,7 @@ import (
"github.com/nxshock/signaller/internal/models/common"
"github.com/nxshock/signaller/internal/models"
"github.com/nxshock/signaller/internal/models/capabilities"
"github.com/nxshock/signaller/internal/models/joinedrooms"
login "github.com/nxshock/signaller/internal/models/login"
register "github.com/nxshock/signaller/internal/models/register"
@ -224,6 +225,30 @@ func SyncHandler(w http.ResponseWriter, r *http.Request) {
sendJsonResponse(w, http.StatusOK, response)
}
// https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-capabilities
func CapabilitiesHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
errorResponse(w, models.M_UNKNOWN, http.StatusBadRequest, "wrong method: "+r.Method)
return
}
token := getTokenFromResponse(r)
if token == "" {
errorResponse(w, models.M_FORBIDDEN, http.StatusForbidden, "")
}
user := currServer.Backend.GetUserByToken(token)
if user == nil {
errorResponse(w, models.M_UNKNOWN_TOKEN, http.StatusBadRequest, "")
return
}
var response capabilities.Response
response.Capabilities = currServer.Capabilities
sendJsonResponse(w, http.StatusOK, response)
}
func sendJsonResponse(w http.ResponseWriter, httpStatus int, data interface{}) error {
b, err := json.Marshal(data)
if err != nil {

View File

@ -0,0 +1,27 @@
package capabilities
// https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-capabilities
type Response struct {
Capabilities Capabilities `json:"capabilities"` // Required. The custom capabilities the server supports, using the Java package naming convention.
}
type Capabilities struct {
ChangePassword ChangePasswordCapability `json:"m.change_password"` // Capability to indicate if the user can change their password.
RoomVersions RoomVersionsCapability `json:"m.room_versions"` // The room versions the server supports.
}
type ChangePasswordCapability struct {
Enabled bool `json:"enabled"` // Required. True if the user can change their password, false otherwise.
}
type RoomVersionsCapability struct {
Default string `json:"default"` // Required. The default room version the server is using for new rooms.
Available map[string]Stability `json:"available"` // Required. A detailed description of the room versions the server supports.
}
type Stability string
const (
Stable Stability = "stable"
Unstable Stability = "unstable"
)

View File

@ -4,6 +4,8 @@ import (
"net/http"
"github.com/gorilla/mux"
"github.com/nxshock/signaller/internal/models/capabilities"
)
var currServer *Server
@ -13,7 +15,9 @@ type Server struct {
router *mux.Router
Address string
Backend Backend
Capabilities capabilities.Capabilities
Backend Backend
}
func New() *Server {
@ -26,6 +30,7 @@ func New() *Server {
router.HandleFunc("/_matrix/client/r0/account/whoami", WhoAmIHandler)
router.HandleFunc("/_matrix/client/r0/joined_rooms", JoinedRoomsHandler)
router.HandleFunc("/_matrix/client/r0/sync", SyncHandler)
router.HandleFunc("/_matrix/client/r0/capabilities", CapabilitiesHandler)
router.HandleFunc("/", RootHandler)
httpServer := new(http.Server)