(ctx context.Context, req *api.QuerySignaturesRequest, res *api.QuerySignaturesResponse)
| 521 | } |
| 522 | |
| 523 | func (a *KeyInternalAPI) QuerySignatures(ctx context.Context, req *api.QuerySignaturesRequest, res *api.QuerySignaturesResponse) { |
| 524 | for targetUserID, forTargetUser := range req.TargetIDs { |
| 525 | keyMap, err := a.DB.CrossSigningKeysForUser(ctx, targetUserID) |
| 526 | if err != nil && err != sql.ErrNoRows { |
| 527 | res.Error = &api.KeyError{ |
| 528 | Err: fmt.Sprintf("a.DB.CrossSigningKeysForUser: %s", err), |
| 529 | } |
| 530 | continue |
| 531 | } |
| 532 | |
| 533 | for targetPurpose, targetKey := range keyMap { |
| 534 | switch targetPurpose { |
| 535 | case gomatrixserverlib.CrossSigningKeyPurposeMaster: |
| 536 | if res.MasterKeys == nil { |
| 537 | res.MasterKeys = map[string]gomatrixserverlib.CrossSigningKey{} |
| 538 | } |
| 539 | res.MasterKeys[targetUserID] = targetKey |
| 540 | |
| 541 | case gomatrixserverlib.CrossSigningKeyPurposeSelfSigning: |
| 542 | if res.SelfSigningKeys == nil { |
| 543 | res.SelfSigningKeys = map[string]gomatrixserverlib.CrossSigningKey{} |
| 544 | } |
| 545 | res.SelfSigningKeys[targetUserID] = targetKey |
| 546 | |
| 547 | case gomatrixserverlib.CrossSigningKeyPurposeUserSigning: |
| 548 | if res.UserSigningKeys == nil { |
| 549 | res.UserSigningKeys = map[string]gomatrixserverlib.CrossSigningKey{} |
| 550 | } |
| 551 | res.UserSigningKeys[targetUserID] = targetKey |
| 552 | } |
| 553 | } |
| 554 | |
| 555 | for _, targetKeyID := range forTargetUser { |
| 556 | // Get own signatures only. |
| 557 | sigMap, err := a.DB.CrossSigningSigsForTarget(ctx, targetUserID, targetUserID, targetKeyID) |
| 558 | if err != nil && err != sql.ErrNoRows { |
| 559 | res.Error = &api.KeyError{ |
| 560 | Err: fmt.Sprintf("a.DB.CrossSigningSigsForTarget: %s", err), |
| 561 | } |
| 562 | return |
| 563 | } |
| 564 | |
| 565 | for sourceUserID, forSourceUser := range sigMap { |
| 566 | for sourceKeyID, sourceSig := range forSourceUser { |
| 567 | if res.Signatures == nil { |
| 568 | res.Signatures = map[string]map[gomatrixserverlib.KeyID]types.CrossSigningSigMap{} |
| 569 | } |
| 570 | if _, ok := res.Signatures[targetUserID]; !ok { |
| 571 | res.Signatures[targetUserID] = map[gomatrixserverlib.KeyID]types.CrossSigningSigMap{} |
| 572 | } |
| 573 | if _, ok := res.Signatures[targetUserID][targetKeyID]; !ok { |
| 574 | res.Signatures[targetUserID][targetKeyID] = types.CrossSigningSigMap{} |
| 575 | } |
| 576 | if _, ok := res.Signatures[targetUserID][targetKeyID][sourceUserID]; !ok { |
| 577 | res.Signatures[targetUserID][targetKeyID][sourceUserID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.Base64Bytes{} |
| 578 | } |
| 579 | res.Signatures[targetUserID][targetKeyID][sourceUserID][sourceKeyID] = sourceSig |
| 580 | } |
nothing calls this directly
no test coverage detected