mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-07 06:53:09 -06:00
🚸 Update LatestKeysUploadTs on Cross Signing Keys Uploads
This commit is contained in:
parent
b2d30a740b
commit
80e6ca5f05
|
|
@ -15,7 +15,10 @@
|
||||||
package routing
|
package routing
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/clientapi/auth"
|
"github.com/matrix-org/dendrite/clientapi/auth"
|
||||||
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
|
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
|
||||||
|
|
@ -99,6 +102,52 @@ func UploadCrossSigningDeviceKeys(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Following additional logic is implemented to follow the [Notion PRD](https://globekeeper.notion.site/Account-Data-State-Event-c64c8df8025a494d86d3137d4e080ece)
|
||||||
|
if device.UserID != "" {
|
||||||
|
prevAccountDataReq := api.QueryAccountDataRequest{
|
||||||
|
UserID: device.UserID,
|
||||||
|
DataType: "account_data",
|
||||||
|
RoomID: "",
|
||||||
|
}
|
||||||
|
accountDataRes := api.QueryAccountDataResponse{}
|
||||||
|
if err := accountAPI.QueryAccountData(req.Context(), &prevAccountDataReq, &accountDataRes); err != nil {
|
||||||
|
util.GetLogger(req.Context()).WithError(err).Error("userAPI.QueryAccountData failed")
|
||||||
|
return util.ErrorResponse(fmt.Errorf("userAPI.QueryAccountData: %w", err))
|
||||||
|
}
|
||||||
|
var accoundData api.AccountData
|
||||||
|
if len(accountDataRes.GlobalAccountData) != 0 {
|
||||||
|
err := json.Unmarshal(accountDataRes.GlobalAccountData["account_data"], &accoundData)
|
||||||
|
if err != nil {
|
||||||
|
return util.JSONResponse{
|
||||||
|
Code: http.StatusInternalServerError,
|
||||||
|
JSON: spec.InternalServerError{Err: err.Error()},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
accoundData.LatestKeysUploadTs = time.Now().UnixMilli()
|
||||||
|
newAccountData, err := json.Marshal(accoundData)
|
||||||
|
if err != nil {
|
||||||
|
return util.JSONResponse{
|
||||||
|
Code: http.StatusInternalServerError,
|
||||||
|
JSON: spec.InternalServerError{Err: err.Error()},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dataReq := api.InputAccountDataRequest{
|
||||||
|
UserID: device.UserID,
|
||||||
|
DataType: "account_data",
|
||||||
|
RoomID: "",
|
||||||
|
AccountData: json.RawMessage(newAccountData),
|
||||||
|
}
|
||||||
|
dataRes := api.InputAccountDataResponse{}
|
||||||
|
if err := accountAPI.InputAccountData(req.Context(), &dataReq, &dataRes); err != nil {
|
||||||
|
util.GetLogger(req.Context()).WithError(err).Error("userAPI.InputAccountData on LatestKeysUploadTs update failed")
|
||||||
|
return util.ErrorResponse(err)
|
||||||
|
}
|
||||||
|
logger := util.GetLogger(req.Context()).WithField("user_id", device.UserID)
|
||||||
|
logger.Info("updated latestKeysUploadTs field in account data")
|
||||||
|
}
|
||||||
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusOK,
|
Code: http.StatusOK,
|
||||||
JSON: struct{}{},
|
JSON: struct{}{},
|
||||||
|
|
|
||||||
|
|
@ -296,6 +296,12 @@ type QueryAccountDataResponse struct {
|
||||||
RoomAccountData map[string]map[string]json.RawMessage // room -> type -> data
|
RoomAccountData map[string]map[string]json.RawMessage // room -> type -> data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Custom Connnect AccountData information
|
||||||
|
type AccountData struct {
|
||||||
|
IsProfileFilled bool `json:"isProfileFilled"`
|
||||||
|
LatestKeysUploadTs int64 `json:"latestKeysUploadTs"`
|
||||||
|
}
|
||||||
|
|
||||||
// QueryDevicesRequest is the request for QueryDevices
|
// QueryDevicesRequest is the request for QueryDevices
|
||||||
type QueryDevicesRequest struct {
|
type QueryDevicesRequest struct {
|
||||||
UserID string
|
UserID string
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue