aboutsummaryrefslogtreecommitdiff
path: root/common/keydb/postgres
diff options
context:
space:
mode:
Diffstat (limited to 'common/keydb/postgres')
-rw-r--r--common/keydb/postgres/keydb.go32
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
}