diff options
Diffstat (limited to 'common/keydb/postgres')
-rw-r--r-- | common/keydb/postgres/keydb.go | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/common/keydb/postgres/keydb.go b/common/keydb/postgres/keydb.go index bf0ff69c..2dd8c866 100644 --- a/common/keydb/postgres/keydb.go +++ b/common/keydb/postgres/keydb.go @@ -18,6 +18,9 @@ package postgres import ( "context" "database/sql" + "math" + + "golang.org/x/crypto/ed25519" "github.com/matrix-org/gomatrixserverlib" ) @@ -32,7 +35,12 @@ type Database struct { // It creates the necessary tables if they don't already exist. // It prepares all the SQL statements that it will use. // Returns an error if there was a problem talking to the database. -func NewDatabase(dataSourceName string) (*Database, error) { +func NewDatabase( + dataSourceName string, + serverName gomatrixserverlib.ServerName, + serverKey ed25519.PublicKey, + serverKeyID gomatrixserverlib.KeyID, +) (*Database, error) { db, err := sql.Open("postgres", dataSourceName) if err != nil { return nil, err @@ -42,6 +50,28 @@ func NewDatabase(dataSourceName string) (*Database, error) { if err != nil { return nil, err } + // Store our own keys so that we don't end up making HTTP requests to find our + // own keys + index := gomatrixserverlib.PublicKeyLookupRequest{ + ServerName: serverName, + KeyID: serverKeyID, + } + value := gomatrixserverlib.PublicKeyLookupResult{ + VerifyKey: gomatrixserverlib.VerifyKey{ + Key: gomatrixserverlib.Base64String(serverKey), + }, + ValidUntilTS: math.MaxUint64 >> 1, + ExpiredTS: gomatrixserverlib.PublicKeyNotExpired, + } + err = d.StoreKeys( + context.Background(), + map[gomatrixserverlib.PublicKeyLookupRequest]gomatrixserverlib.PublicKeyLookupResult{ + index: value, + }, + ) + if err != nil { + return nil, err + } return d, nil } |