mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-22 05:23:09 -06:00
Don't use internal API
This commit is contained in:
parent
9405093863
commit
c61e941762
|
|
@ -30,7 +30,6 @@ import (
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/clientapi/userutil"
|
"github.com/matrix-org/dendrite/clientapi/userutil"
|
||||||
"github.com/matrix-org/dendrite/internal/eventutil"
|
"github.com/matrix-org/dendrite/internal/eventutil"
|
||||||
"github.com/matrix-org/dendrite/internal/pushrules"
|
|
||||||
"github.com/matrix-org/dendrite/internal/sqlutil"
|
"github.com/matrix-org/dendrite/internal/sqlutil"
|
||||||
keyapi "github.com/matrix-org/dendrite/keyserver/api"
|
keyapi "github.com/matrix-org/dendrite/keyserver/api"
|
||||||
rsapi "github.com/matrix-org/dendrite/roomserver/api"
|
rsapi "github.com/matrix-org/dendrite/roomserver/api"
|
||||||
|
|
@ -760,57 +759,15 @@ func (a *UserInternalAPI) PerformPushRulesPut(
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *UserInternalAPI) QueryPushRules(ctx context.Context, req *api.QueryPushRulesRequest, res *api.QueryPushRulesResponse) error {
|
func (a *UserInternalAPI) QueryPushRules(ctx context.Context, req *api.QueryPushRulesRequest, res *api.QueryPushRulesResponse) error {
|
||||||
userReq := api.QueryAccountDataRequest{
|
|
||||||
UserID: req.UserID,
|
|
||||||
DataType: pushRulesAccountDataType,
|
|
||||||
}
|
|
||||||
var userRes api.QueryAccountDataResponse
|
|
||||||
if err := a.QueryAccountData(ctx, &userReq, &userRes); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
bs, ok := userRes.GlobalAccountData[pushRulesAccountDataType]
|
|
||||||
if ok {
|
|
||||||
// Legacy Dendrite users will have completely empty push rules, so we should
|
|
||||||
// detect that situation and set some defaults.
|
|
||||||
var rules struct {
|
|
||||||
G struct {
|
|
||||||
Content []json.RawMessage `json:"content"`
|
|
||||||
Override []json.RawMessage `json:"override"`
|
|
||||||
Room []json.RawMessage `json:"room"`
|
|
||||||
Sender []json.RawMessage `json:"sender"`
|
|
||||||
Underride []json.RawMessage `json:"underride"`
|
|
||||||
} `json:"global"`
|
|
||||||
}
|
|
||||||
if err := json.Unmarshal([]byte(bs), &rules); err == nil {
|
|
||||||
count := len(rules.G.Content) + len(rules.G.Override) +
|
|
||||||
len(rules.G.Room) + len(rules.G.Sender) + len(rules.G.Underride)
|
|
||||||
ok = count > 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !ok {
|
|
||||||
// If we didn't find any default push rules then we should just generate some
|
|
||||||
// fresh ones.
|
|
||||||
localpart, _, err := gomatrixserverlib.SplitID('@', req.UserID)
|
localpart, _, err := gomatrixserverlib.SplitID('@', req.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to split user ID %q for push rules", req.UserID)
|
return fmt.Errorf("failed to split user ID %q for push rules", req.UserID)
|
||||||
}
|
}
|
||||||
pushRuleSets := pushrules.DefaultAccountRuleSets(localpart, a.ServerName)
|
pushRules, err := a.DB.QueryPushRules(ctx, localpart)
|
||||||
prbs, err := json.Marshal(pushRuleSets)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to marshal default push rules: %w", err)
|
return fmt.Errorf("failed to query push rules: %w", err)
|
||||||
}
|
}
|
||||||
if err := a.DB.SaveAccountData(ctx, localpart, "", pushRulesAccountDataType, json.RawMessage(prbs)); err != nil {
|
res.RuleSets = pushRules
|
||||||
return fmt.Errorf("failed to save default push rules: %w", err)
|
|
||||||
}
|
|
||||||
res.RuleSets = pushRuleSets
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
var data pushrules.AccountRuleSets
|
|
||||||
if err := json.Unmarshal([]byte(bs), &data); err != nil {
|
|
||||||
util.GetLogger(ctx).WithError(err).Error("json.Unmarshal of push rules failed")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
res.RuleSets = &data
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
|
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
|
||||||
|
"github.com/matrix-org/dendrite/internal/pushrules"
|
||||||
"github.com/matrix-org/dendrite/userapi/api"
|
"github.com/matrix-org/dendrite/userapi/api"
|
||||||
"github.com/matrix-org/dendrite/userapi/storage/tables"
|
"github.com/matrix-org/dendrite/userapi/storage/tables"
|
||||||
"github.com/matrix-org/dendrite/userapi/types"
|
"github.com/matrix-org/dendrite/userapi/types"
|
||||||
|
|
@ -53,6 +54,7 @@ type AccountData interface {
|
||||||
// If no account data could be found, returns nil
|
// If no account data could be found, returns nil
|
||||||
// Returns an error if there was an issue with the retrieval
|
// Returns an error if there was an issue with the retrieval
|
||||||
GetAccountDataByType(ctx context.Context, localpart, roomID, dataType string) (data json.RawMessage, err error)
|
GetAccountDataByType(ctx context.Context, localpart, roomID, dataType string) (data json.RawMessage, err error)
|
||||||
|
QueryPushRules(ctx context.Context, localpart string) (*pushrules.AccountRuleSets, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Device interface {
|
type Device interface {
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/userapi/types"
|
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
|
||||||
|
"github.com/matrix-org/dendrite/userapi/types"
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
|
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
|
||||||
"github.com/matrix-org/dendrite/internal/pushrules"
|
"github.com/matrix-org/dendrite/internal/pushrules"
|
||||||
"github.com/matrix-org/dendrite/internal/sqlutil"
|
"github.com/matrix-org/dendrite/internal/sqlutil"
|
||||||
|
|
@ -177,6 +178,37 @@ func (d *Database) createAccount(
|
||||||
return account, nil
|
return account, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Database) QueryPushRules(
|
||||||
|
ctx context.Context,
|
||||||
|
localpart string,
|
||||||
|
) (*pushrules.AccountRuleSets, error) {
|
||||||
|
data, err := d.AccountDatas.SelectAccountDataByType(ctx, localpart, "", "m.push_rules")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we didn't find any default push rules then we should just generate some
|
||||||
|
// fresh ones.
|
||||||
|
if len(data) == 0 {
|
||||||
|
pushRuleSets := pushrules.DefaultAccountRuleSets(localpart, d.ServerName)
|
||||||
|
prbs, err := json.Marshal(pushRuleSets)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to marshal default push rules: %w", err)
|
||||||
|
}
|
||||||
|
if err := d.AccountDatas.InsertAccountData(ctx, nil, localpart, "", "m.push_rules", json.RawMessage(prbs)); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to save default push rules: %w", err)
|
||||||
|
}
|
||||||
|
return pushRuleSets, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var pushRules pushrules.AccountRuleSets
|
||||||
|
if err := json.Unmarshal(data, &pushRules); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &pushRules, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SaveAccountData saves new account data for a given user and a given room.
|
// SaveAccountData saves new account data for a given user and a given room.
|
||||||
// If the account data is not specific to a room, the room ID should be an empty string
|
// If the account data is not specific to a room, the room ID should be an empty string
|
||||||
// If an account data already exists for a given set (user, room, data type), it will
|
// If an account data already exists for a given set (user, room, data type), it will
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/internal/pushgateway"
|
"github.com/matrix-org/dendrite/internal/pushgateway"
|
||||||
keyapi "github.com/matrix-org/dendrite/keyserver/api"
|
keyapi "github.com/matrix-org/dendrite/keyserver/api"
|
||||||
rsapi "github.com/matrix-org/dendrite/roomserver/api"
|
rsapi "github.com/matrix-org/dendrite/roomserver/api"
|
||||||
|
|
@ -31,7 +33,6 @@ import (
|
||||||
"github.com/matrix-org/dendrite/userapi/producers"
|
"github.com/matrix-org/dendrite/userapi/producers"
|
||||||
"github.com/matrix-org/dendrite/userapi/storage"
|
"github.com/matrix-org/dendrite/userapi/storage"
|
||||||
"github.com/matrix-org/dendrite/userapi/util"
|
"github.com/matrix-org/dendrite/userapi/util"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// AddInternalRoutes registers HTTP handlers for the internal API. Invokes functions
|
// AddInternalRoutes registers HTTP handlers for the internal API. Invokes functions
|
||||||
|
|
@ -90,7 +91,7 @@ func NewInternalAPI(
|
||||||
}
|
}
|
||||||
|
|
||||||
eventConsumer := consumers.NewOutputStreamEventConsumer(
|
eventConsumer := consumers.NewOutputStreamEventConsumer(
|
||||||
base.ProcessContext, cfg, js, db, pgClient, userAPI, rsAPI, syncProducer,
|
base.ProcessContext, cfg, js, db, pgClient, rsAPI, syncProducer,
|
||||||
)
|
)
|
||||||
if err := eventConsumer.Start(); err != nil {
|
if err := eventConsumer.Start(); err != nil {
|
||||||
logrus.WithError(err).Panic("failed to start user API streamed event consumer")
|
logrus.WithError(err).Panic("failed to start user API streamed event consumer")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue