Fix uniqueness

This commit is contained in:
Neil Alexander 2022-04-26 10:18:50 +01:00
parent f87064d1fb
commit 811f7e76d4
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 7 additions and 32 deletions

View file

@ -552,35 +552,6 @@ func (a *KeyInternalAPI) QuerySignatures(ctx context.Context, req *api.QuerySign
} }
} }
for _, targetSection := range []map[string]gomatrixserverlib.CrossSigningKey{
res.MasterKeys,
res.SelfSigningKeys,
res.UserSigningKeys,
} {
for targetKeyID, section := range targetSection {
// Get own signatures only.
sigMap, err := a.DB.CrossSigningSigsForTarget(ctx, targetUserID, targetUserID, gomatrixserverlib.KeyID(targetKeyID))
if err != nil && err != sql.ErrNoRows {
res.Error = &api.KeyError{
Err: fmt.Sprintf("a.DB.CrossSigningSigsForTarget: %s", err),
}
return
}
for sourceUserID, forSourceUser := range sigMap {
for sourceKeyID, sourceSig := range forSourceUser {
if section.Signatures == nil {
section.Signatures = map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.Base64Bytes{}
}
if _, ok := res.Signatures[sourceUserID]; !ok {
section.Signatures[sourceUserID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.Base64Bytes{}
}
section.Signatures[sourceUserID][sourceKeyID] = sourceSig
}
}
}
}
for _, targetKeyID := range forTargetUser { for _, targetKeyID := range forTargetUser {
// Get own signatures only. // Get own signatures only.
sigMap, err := a.DB.CrossSigningSigsForTarget(ctx, targetUserID, targetUserID, targetKeyID) sigMap, err := a.DB.CrossSigningSigsForTarget(ctx, targetUserID, targetUserID, targetKeyID)

View file

@ -33,8 +33,10 @@ CREATE TABLE IF NOT EXISTS keyserver_cross_signing_sigs (
target_user_id TEXT NOT NULL, target_user_id TEXT NOT NULL,
target_key_id TEXT NOT NULL, target_key_id TEXT NOT NULL,
signature TEXT NOT NULL, signature TEXT NOT NULL,
PRIMARY KEY (origin_user_id, target_user_id, target_key_id) PRIMARY KEY (origin_user_id, origin_key_id, target_user_id, target_key_id)
); );
CREATE INDEX IF NOT EXISTS keyserver_cross_signing_sigs_idx ON keyserver_cross_signing_sigs (origin_user_id, target_user_id, target_key_id);
` `
const selectCrossSigningSigsForTargetSQL = "" + const selectCrossSigningSigsForTargetSQL = "" +
@ -44,7 +46,7 @@ const selectCrossSigningSigsForTargetSQL = "" +
const upsertCrossSigningSigsForTargetSQL = "" + const upsertCrossSigningSigsForTargetSQL = "" +
"INSERT INTO keyserver_cross_signing_sigs (origin_user_id, origin_key_id, target_user_id, target_key_id, signature)" + "INSERT INTO keyserver_cross_signing_sigs (origin_user_id, origin_key_id, target_user_id, target_key_id, signature)" +
" VALUES($1, $2, $3, $4, $5)" + " VALUES($1, $2, $3, $4, $5)" +
" ON CONFLICT (origin_user_id, target_user_id, target_key_id) DO UPDATE SET (origin_key_id, signature) = ($2, $5)" " ON CONFLICT (origin_user_id, origin_key_id, target_user_id, target_key_id) DO UPDATE SET signature = $5"
const deleteCrossSigningSigsForTargetSQL = "" + const deleteCrossSigningSigsForTargetSQL = "" +
"DELETE FROM keyserver_cross_signing_sigs WHERE target_user_id=$1 AND target_key_id=$2" "DELETE FROM keyserver_cross_signing_sigs WHERE target_user_id=$1 AND target_key_id=$2"

View file

@ -33,8 +33,10 @@ CREATE TABLE IF NOT EXISTS keyserver_cross_signing_sigs (
target_user_id TEXT NOT NULL, target_user_id TEXT NOT NULL,
target_key_id TEXT NOT NULL, target_key_id TEXT NOT NULL,
signature TEXT NOT NULL, signature TEXT NOT NULL,
PRIMARY KEY (origin_user_id, target_user_id, target_key_id) PRIMARY KEY (origin_user_id, origin_key_id, target_user_id, target_key_id)
); );
CREATE INDEX IF NOT EXISTS keyserver_cross_signing_sigs_idx ON keyserver_cross_signing_sigs (origin_user_id, target_user_id, target_key_id);
` `
const selectCrossSigningSigsForTargetSQL = "" + const selectCrossSigningSigsForTargetSQL = "" +