mirror of https://github.com/mautrix/go.git
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
// Copyright (c) 2022 Tulir Asokan
|
|
//
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
//go:build cgo && !nocrypto
|
|
|
|
package bridge
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/lib/pq"
|
|
"go.mau.fi/util/dbutil"
|
|
|
|
"maunium.net/go/mautrix/crypto"
|
|
"maunium.net/go/mautrix/id"
|
|
)
|
|
|
|
func init() {
|
|
crypto.PostgresArrayWrapper = pq.Array
|
|
}
|
|
|
|
type SQLCryptoStore struct {
|
|
*crypto.SQLCryptoStore
|
|
UserID id.UserID
|
|
GhostIDFormat string
|
|
}
|
|
|
|
var _ crypto.Store = (*SQLCryptoStore)(nil)
|
|
|
|
func NewSQLCryptoStore(db *dbutil.Database, log dbutil.DatabaseLogger, userID id.UserID, ghostIDFormat, pickleKey string) *SQLCryptoStore {
|
|
return &SQLCryptoStore{
|
|
SQLCryptoStore: crypto.NewSQLCryptoStore(db, log, "", "", []byte(pickleKey)),
|
|
UserID: userID,
|
|
GhostIDFormat: ghostIDFormat,
|
|
}
|
|
}
|
|
|
|
func (store *SQLCryptoStore) GetRoomJoinedOrInvitedMembers(ctx context.Context, roomID id.RoomID) (members []id.UserID, err error) {
|
|
var rows dbutil.Rows
|
|
rows, err = store.DB.Query(ctx, `
|
|
SELECT user_id FROM mx_user_profile
|
|
WHERE room_id=$1
|
|
AND (membership='join' OR membership='invite')
|
|
AND user_id<>$2
|
|
AND user_id NOT LIKE $3
|
|
`, roomID, store.UserID, store.GhostIDFormat)
|
|
if err != nil {
|
|
return
|
|
}
|
|
for rows.Next() {
|
|
var userID id.UserID
|
|
err = rows.Scan(&userID)
|
|
if err != nil {
|
|
return members, err
|
|
} else {
|
|
members = append(members, userID)
|
|
}
|
|
}
|
|
return
|
|
}
|