MCPcopy Create free account
hub / github.com/daodst/chat / QueryPushRules

Method QueryPushRules

userapi/internal/api.go:780–833  ·  view source on GitHub ↗
(ctx context.Context, req *api.QueryPushRulesRequest, res *api.QueryPushRulesResponse)

Source from the content-addressed store, hash-verified

778}
779
780func (a *UserInternalAPI) QueryPushRules(ctx context.Context, req *api.QueryPushRulesRequest, res *api.QueryPushRulesResponse) error {
781 userReq := api.QueryAccountDataRequest{
782 UserID: req.UserID,
783 DataType: pushRulesAccountDataType,
784 }
785 var userRes api.QueryAccountDataResponse
786 if err := a.QueryAccountData(ctx, &userReq, &userRes); err != nil {
787 return err
788 }
789 bs, ok := userRes.GlobalAccountData[pushRulesAccountDataType]
790 if ok {
791 // Legacy Dendrite users will have completely empty push rules, so we should
792 // detect that situation and set some defaults.
793 var rules struct {
794 G struct {
795 Content []json.RawMessage `json:"content"`
796 Override []json.RawMessage `json:"override"`
797 Room []json.RawMessage `json:"room"`
798 Sender []json.RawMessage `json:"sender"`
799 Underride []json.RawMessage `json:"underride"`
800 } `json:"global"`
801 }
802 if err := json.Unmarshal([]byte(bs), &rules); err == nil {
803 count := len(rules.G.Content) + len(rules.G.Override) +
804 len(rules.G.Room) + len(rules.G.Sender) + len(rules.G.Underride)
805 ok = count > 0
806 }
807 }
808 if !ok {
809 // If we didn't find any default push rules then we should just generate some
810 // fresh ones.
811 localpart, _, err := gomatrixserverlib.SplitID('@', req.UserID)
812 if err != nil {
813 return fmt.Errorf("failed to split user ID %q for push rules", req.UserID)
814 }
815 pushRuleSets := pushrules.DefaultAccountRuleSets(localpart, a.ServerName)
816 prbs, err := json.Marshal(pushRuleSets)
817 if err != nil {
818 return fmt.Errorf("failed to marshal default push rules: %w", err)
819 }
820 if err := a.DB.SaveAccountData(ctx, localpart, "", pushRulesAccountDataType, json.RawMessage(prbs)); err != nil {
821 return fmt.Errorf("failed to save default push rules: %w", err)
822 }
823 res.RuleSets = pushRuleSets
824 return nil
825 }
826 var data pushrules.AccountRuleSets
827 if err := json.Unmarshal([]byte(bs), &data); err != nil {
828 util.GetLogger(ctx).WithError(err).Error("json.Unmarshal of push rules failed")
829 return err
830 }
831 res.RuleSets = &data
832 return nil
833}
834
835func (a *UserInternalAPI) SetAvatarURL(ctx context.Context, req *api.PerformSetAvatarURLRequest, res *api.PerformSetAvatarURLResponse) error {
836 return a.DB.SetAvatarURL(ctx, req.Localpart, req.AvatarURL)

Callers

nothing calls this directly

Calls 2

QueryAccountDataMethod · 0.95
ErrorMethod · 0.45

Tested by

no test coverage detected