store: move the access_hash and username to separate per-user table
Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
@@ -58,6 +58,32 @@ const (
|
||||
VALUES ($1, $2, $3)
|
||||
ON CONFLICT (user_id, channel_id) DO UPDATE SET access_hash=excluded.access_hash
|
||||
`
|
||||
|
||||
// User Access Hash Queries
|
||||
getUserAccessHashQuery = "SELECT access_hash FROM telegram_user_metadata WHERE receiver_id=$1 AND user_id=$2"
|
||||
setUserAccessHashQuery = `
|
||||
INSERT INTO telegram_user_metadata (receiver_id, user_id, access_hash)
|
||||
VALUES ($1, $2, $3)
|
||||
ON CONFLICT (receiver_id, user_id) DO UPDATE SET access_hash=excluded.access_hash
|
||||
`
|
||||
|
||||
// User Username Queries
|
||||
getUserUsernameQuery = "SELECT username FROM telegram_user_metadata WHERE receiver_id=$1 AND user_id=$2"
|
||||
setUserUsernameQuery = `
|
||||
INSERT INTO telegram_user_metadata (receiver_id, user_id, username)
|
||||
VALUES ($1, $2, $3)
|
||||
ON CONFLICT (receiver_id, user_id) DO UPDATE SET username=excluded.username
|
||||
`
|
||||
|
||||
// User Metadata Queries
|
||||
getUserMetadataQuery = "SELECT username, access_hash FROM telegram_user_metadata WHERE receiver_id=$1 AND user_id=$2"
|
||||
setUserMetadataQuery = `
|
||||
INSERT INTO telegram_user_metadata (receiver_id, user_id, username, access_hash)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
ON CONFLICT (receiver_id, user_id) DO UPDATE SET
|
||||
username=excluded.username,
|
||||
access_hash=excluded.access_hash
|
||||
`
|
||||
)
|
||||
|
||||
var _ session.Storage = (*ScopedStore)(nil)
|
||||
@@ -170,6 +196,45 @@ func (s *ScopedStore) SetChannelAccessHash(ctx context.Context, userID int64, ch
|
||||
return
|
||||
}
|
||||
|
||||
func (s *ScopedStore) GetUserAccessHash(ctx context.Context, userID int64) (accessHash int64, found bool, err error) {
|
||||
err = s.db.QueryRow(ctx, getUserAccessHashQuery, s.telegramUserID, userID).Scan(&accessHash)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return 0, false, nil
|
||||
}
|
||||
return accessHash, err == nil, err
|
||||
}
|
||||
|
||||
func (s *ScopedStore) SetUserAccessHash(ctx context.Context, userID, accessHash int64) (err error) {
|
||||
_, err = s.db.Exec(ctx, setUserAccessHashQuery, s.telegramUserID, userID, accessHash)
|
||||
return
|
||||
}
|
||||
|
||||
func (s *ScopedStore) GetUserUsername(ctx context.Context, userID int64) (username string, found bool, err error) {
|
||||
err = s.db.QueryRow(ctx, getUserUsernameQuery, s.telegramUserID, userID).Scan(&username)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return "", false, nil
|
||||
}
|
||||
return username, err == nil, err
|
||||
}
|
||||
|
||||
func (s *ScopedStore) SetUserUsername(ctx context.Context, userID int64, username string) (err error) {
|
||||
_, err = s.db.Exec(ctx, setUserUsernameQuery, s.telegramUserID, userID, username)
|
||||
return
|
||||
}
|
||||
|
||||
func (s *ScopedStore) GetUserMetadata(ctx context.Context, userID int64) (username string, accessHash int64, found bool, err error) {
|
||||
err = s.db.QueryRow(ctx, getUserMetadataQuery, s.telegramUserID, userID).Scan(&username, &accessHash)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return "", 0, false, nil
|
||||
}
|
||||
return username, accessHash, err == nil, err
|
||||
}
|
||||
|
||||
func (s *ScopedStore) SetUserMetadata(ctx context.Context, userID int64, username string, accessHash int64) (err error) {
|
||||
_, err = s.db.Exec(ctx, setUserMetadataQuery, s.telegramUserID, userID, username, accessHash)
|
||||
return
|
||||
}
|
||||
|
||||
// Helper Functions
|
||||
|
||||
func (s *ScopedStore) assertUserIDMatches(userID int64) {
|
||||
|
||||
@@ -31,6 +31,16 @@ CREATE TABLE telegram_channel_access_hashes (
|
||||
PRIMARY KEY (user_id, channel_id)
|
||||
);
|
||||
|
||||
CREATE TABLE telegram_user_metadata (
|
||||
receiver_id INTEGER,
|
||||
user_id INTEGER,
|
||||
|
||||
access_hash INTEGER NOT NULL,
|
||||
username TEXT,
|
||||
|
||||
PRIMARY KEY (receiver_id, user_id)
|
||||
);
|
||||
|
||||
CREATE TABLE telegram_file (
|
||||
id TEXT PRIMARY KEY,
|
||||
mxc TEXT NOT NULL,
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
-- v3: Move the user access hash to a table so it can be per-user
|
||||
|
||||
CREATE TABLE telegram_user_metadata (
|
||||
receiver_id INTEGER,
|
||||
user_id INTEGER,
|
||||
|
||||
access_hash INTEGER NOT NULL,
|
||||
username TEXT,
|
||||
|
||||
PRIMARY KEY (receiver_id, user_id)
|
||||
);
|
||||
|
||||
INSERT INTO telegram_user_metadata (receiver_id, user_id, access_hash, username)
|
||||
SELECT ul.id, g.id, g.metadata->>'access_hash', g.metadata->>'username'
|
||||
FROM user_login ul, ghost g;
|
||||
Reference in New Issue
Block a user