nolint:gocyclo
(ctx context.Context, req *api.PerformUploadDeviceKeysRequest, res *api.PerformUploadDeviceKeysResponse)
| 104 | |
| 105 | // nolint:gocyclo |
| 106 | func (a *KeyInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.PerformUploadDeviceKeysRequest, res *api.PerformUploadDeviceKeysResponse) { |
| 107 | // Find the keys to store. |
| 108 | byPurpose := map[gomatrixserverlib.CrossSigningKeyPurpose]gomatrixserverlib.CrossSigningKey{} |
| 109 | toStore := types.CrossSigningKeyMap{} |
| 110 | hasMasterKey := false |
| 111 | |
| 112 | if len(req.MasterKey.Keys) > 0 { |
| 113 | if err := sanityCheckKey(req.MasterKey, req.UserID, gomatrixserverlib.CrossSigningKeyPurposeMaster); err != nil { |
| 114 | res.Error = &api.KeyError{ |
| 115 | Err: "Master key sanity check failed: " + err.Error(), |
| 116 | IsInvalidParam: true, |
| 117 | } |
| 118 | return |
| 119 | } |
| 120 | |
| 121 | byPurpose[gomatrixserverlib.CrossSigningKeyPurposeMaster] = req.MasterKey |
| 122 | for _, key := range req.MasterKey.Keys { // iterates once, see sanityCheckKey |
| 123 | toStore[gomatrixserverlib.CrossSigningKeyPurposeMaster] = key |
| 124 | } |
| 125 | hasMasterKey = true |
| 126 | } |
| 127 | |
| 128 | if len(req.SelfSigningKey.Keys) > 0 { |
| 129 | if err := sanityCheckKey(req.SelfSigningKey, req.UserID, gomatrixserverlib.CrossSigningKeyPurposeSelfSigning); err != nil { |
| 130 | res.Error = &api.KeyError{ |
| 131 | Err: "Self-signing key sanity check failed: " + err.Error(), |
| 132 | IsInvalidParam: true, |
| 133 | } |
| 134 | return |
| 135 | } |
| 136 | |
| 137 | byPurpose[gomatrixserverlib.CrossSigningKeyPurposeSelfSigning] = req.SelfSigningKey |
| 138 | for _, key := range req.SelfSigningKey.Keys { // iterates once, see sanityCheckKey |
| 139 | toStore[gomatrixserverlib.CrossSigningKeyPurposeSelfSigning] = key |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | if len(req.UserSigningKey.Keys) > 0 { |
| 144 | if err := sanityCheckKey(req.UserSigningKey, req.UserID, gomatrixserverlib.CrossSigningKeyPurposeUserSigning); err != nil { |
| 145 | res.Error = &api.KeyError{ |
| 146 | Err: "User-signing key sanity check failed: " + err.Error(), |
| 147 | IsInvalidParam: true, |
| 148 | } |
| 149 | return |
| 150 | } |
| 151 | |
| 152 | byPurpose[gomatrixserverlib.CrossSigningKeyPurposeUserSigning] = req.UserSigningKey |
| 153 | for _, key := range req.UserSigningKey.Keys { // iterates once, see sanityCheckKey |
| 154 | toStore[gomatrixserverlib.CrossSigningKeyPurposeUserSigning] = key |
| 155 | } |
| 156 | } |
| 157 | |
| 158 | // If there's nothing to do then stop here. |
| 159 | if len(toStore) == 0 { |
| 160 | res.Error = &api.KeyError{ |
| 161 | Err: "No keys were supplied in the request", |
| 162 | IsMissingParam: true, |
| 163 | } |
nothing calls this directly
no test coverage detected