mirror of https://github.com/matrix-org/go-neb.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
69 lines
1.8 KiB
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
|
|
"github.com/matrix-org/go-neb/api"
|
|
"github.com/matrix-org/go-neb/clients"
|
|
"github.com/matrix-org/util"
|
|
)
|
|
|
|
// ConfigureClient represents an HTTP handler capable of processing /admin/configureClient requests.
|
|
type ConfigureClient struct {
|
|
Clients *clients.Clients
|
|
}
|
|
|
|
// OnIncomingRequest handles POST requests to /admin/configureClient. The JSON object provided
|
|
// is of type "api.ClientConfig".
|
|
//
|
|
// If a DisplayName is supplied, this request will set this client's display name
|
|
// if the old ClientConfig DisplayName differs from the new ClientConfig DisplayName.
|
|
//
|
|
// Request:
|
|
// POST /admin/configureClient
|
|
// {
|
|
// "UserID": "@my_bot:localhost",
|
|
// "HomeserverURL": "http://localhost:8008",
|
|
// "Sync": true,
|
|
// "DisplayName": "My Bot"
|
|
// }
|
|
//
|
|
// Response:
|
|
// HTTP/1.1 200 OK
|
|
// {
|
|
// "OldClient": {
|
|
// // The old api.ClientConfig
|
|
// },
|
|
// "NewClient": {
|
|
// // The new api.ClientConfig
|
|
// }
|
|
// }
|
|
func (s *ConfigureClient) OnIncomingRequest(req *http.Request) util.JSONResponse {
|
|
if req.Method != "POST" {
|
|
return util.MessageResponse(405, "Unsupported Method")
|
|
}
|
|
|
|
var body api.ClientConfig
|
|
if err := json.NewDecoder(req.Body).Decode(&body); err != nil {
|
|
return util.MessageResponse(400, "Error parsing request JSON")
|
|
}
|
|
|
|
if err := body.Check(); err != nil {
|
|
return util.MessageResponse(400, "Error parsing client config")
|
|
}
|
|
|
|
oldClient, err := s.Clients.Update(body)
|
|
if err != nil {
|
|
util.GetLogger(req.Context()).WithError(err).WithField("body", body).Error("Failed to Clients.Update")
|
|
return util.MessageResponse(500, "Error storing token")
|
|
}
|
|
|
|
return util.JSONResponse{
|
|
Code: 200,
|
|
JSON: struct {
|
|
OldClient api.ClientConfig
|
|
NewClient api.ClientConfig
|
|
}{oldClient, body},
|
|
}
|
|
}
|