(ctx context.Context, req *api.QueryPushRulesRequest, res *api.QueryPushRulesResponse)
| 778 | } |
| 779 | |
| 780 | func (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 | |
| 835 | func (a *UserInternalAPI) SetAvatarURL(ctx context.Context, req *api.PerformSetAvatarURLRequest, res *api.PerformSetAvatarURLResponse) error { |
| 836 | return a.DB.SetAvatarURL(ctx, req.Localpart, req.AvatarURL) |
nothing calls this directly
no test coverage detected