Test 1 Can fetch a user's pushers

This commit is contained in:
Dan Peleg 2021-05-05 10:03:01 +03:00
parent c5247d390f
commit 092edee210
8 changed files with 74 additions and 91 deletions

View file

@ -52,10 +52,8 @@ CREATE TABLE IF NOT EXISTS pusher_pushers (
pushkey VARCHAR(512) NOT NULL,
-- The preferred language for receiving notifications (e.g. 'en' or 'en-US')
lang TEXT,
-- Required if kind is http. The URL to use to send notifications to.
url TEXT,
-- The format to use when sending notifications to the Push Gateway.
format TEXT
-- A dictionary of information for the pusher implementation itself.
data TEXT
);
-- Pushkey must be unique for a given user.
@ -63,16 +61,16 @@ CREATE UNIQUE INDEX IF NOT EXISTS pusher_app_id_pushkey_localpart_idx ON pusher_
`
const insertPusherSQL = "" +
"INSERT INTO pusher_pushers(localpart, session_id, pushkey, kind, app_id, app_display_name, device_display_name, profile_tag, lang, url, format) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)"
"INSERT INTO pusher_pushers(localpart, session_id, pushkey, kind, app_id, app_display_name, device_display_name, profile_tag, lang, data) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)"
const selectPushersByLocalpartSQL = "" +
"SELECT session_id, pushkey, kind, app_id, app_display_name, device_display_name, profile_tag, lang, url, format FROM pusher_pushers WHERE localpart = $1"
"SELECT session_id, pushkey, kind, app_id, app_display_name, device_display_name, profile_tag, lang, data FROM pusher_pushers WHERE localpart = $1"
const selectPusherByPushkeySQL = "" +
"SELECT session_id, pushkey, kind, app_id, app_display_name, device_display_name, profile_tag, lang, url, format FROM pusher_pushers WHERE localpart = $1 AND pushkey = $2"
"SELECT session_id, pushkey, kind, app_id, app_display_name, device_display_name, profile_tag, lang, data FROM pusher_pushers WHERE localpart = $1 AND pushkey = $2"
const updatePusherSQL = "" +
"UPDATE pusher_pushers SET kind = $1, app_id = $2, app_display_name = $3, device_display_name = $4, profile_tag = $5, lang = $6, url = $7, format = $8 WHERE localpart = $9 AND pushkey = $10"
"UPDATE pusher_pushers SET kind = $1, app_id = $2, app_display_name = $3, device_display_name = $4, profile_tag = $5, lang = $6, data = $7 WHERE localpart = $8 AND pushkey = $9"
const deletePusherSQL = "" +
"DELETE FROM pusher_pushers WHERE app_id = $1 AND pushkey = $2 AND localpart = $3"
@ -116,10 +114,10 @@ func (s *pushersStatements) prepare(db *sql.DB, server gomatrixserverlib.ServerN
// Returns nil error success.
func (s *pushersStatements) insertPusher(
ctx context.Context, txn *sql.Tx, session_id int64,
pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format, localpart string,
pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data, localpart string,
) error {
stmt := sqlutil.TxStmt(txn, s.insertPusherStmt)
_, err := stmt.ExecContext(ctx, localpart, session_id, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format)
_, err := stmt.ExecContext(ctx, localpart, session_id, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data)
logrus.Debugf("🥳 Created pusher %d", session_id)
return err
}
@ -138,8 +136,8 @@ func (s *pushersStatements) selectPushersByLocalpart(
for rows.Next() {
var pusher api.Pusher
var sessionid sql.NullInt64
var pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format sql.NullString
err = rows.Scan(&sessionid, &pushkey, &kind, &appid, &appdisplayname, &devicedisplayname, &profiletag, &lang, &url, &format)
var pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data sql.NullString
err = rows.Scan(&sessionid, &pushkey, &kind, &appid, &appdisplayname, &devicedisplayname, &profiletag, &lang, &data)
if err != nil {
return pushers, err
}
@ -167,11 +165,8 @@ func (s *pushersStatements) selectPushersByLocalpart(
if lang.Valid {
pusher.Language = lang.String
}
if url.Valid && format.Valid {
pusher.Data = api.PusherData{
URL: url.String,
Format: format.String,
}
if data.Valid {
pusher.Data = data.String
}
pusher.UserID = userutil.MakeUserID(localpart, s.serverName)
@ -187,10 +182,10 @@ func (s *pushersStatements) selectPusherByPushkey(
) (*api.Pusher, error) {
var pusher api.Pusher
var sessionid sql.NullInt64
var key, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format sql.NullString
var key, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data sql.NullString
stmt := s.selectPusherByPushkeyStmt
err := stmt.QueryRowContext(ctx, localpart, pushkey).Scan(&sessionid, &key, &kind, &appid, &appdisplayname, &devicedisplayname, &profiletag, &lang, &url, &format)
err := stmt.QueryRowContext(ctx, localpart, pushkey).Scan(&sessionid, &key, &kind, &appid, &appdisplayname, &devicedisplayname, &profiletag, &lang, &data)
if err == nil {
if sessionid.Valid {
@ -217,11 +212,8 @@ func (s *pushersStatements) selectPusherByPushkey(
if lang.Valid {
pusher.Language = lang.String
}
if url.Valid && format.Valid {
pusher.Data = api.PusherData{
URL: url.String,
Format: format.String,
}
if data.Valid {
pusher.Data = data.String
}
pusher.UserID = userutil.MakeUserID(localpart, s.serverName)
@ -231,10 +223,10 @@ func (s *pushersStatements) selectPusherByPushkey(
}
func (s *pushersStatements) updatePusher(
ctx context.Context, txn *sql.Tx, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format, localpart string,
ctx context.Context, txn *sql.Tx, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data, localpart string,
) error {
stmt := sqlutil.TxStmt(txn, s.updatePusherStmt)
_, err := stmt.ExecContext(ctx, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format, localpart, pushkey)
_, err := stmt.ExecContext(ctx, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data, localpart, pushkey)
return err
}

View file

@ -58,9 +58,9 @@ func NewDatabase(dbProperties *config.DatabaseOptions, serverName gomatrixserver
func (d *Database) CreatePusher(
ctx context.Context, session_id int64,
pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format, localpart string,
pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data, localpart string,
) error {
return d.pushers.insertPusher(ctx, nil, session_id, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format, localpart)
return d.pushers.insertPusher(ctx, nil, session_id, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data, localpart)
}
// GetPushersByLocalpart returns the pushers matching the given localpart.
@ -80,10 +80,10 @@ func (d *Database) GetPusherByPushkey(
// UpdatePusher updates the given pusher with the display name.
// Returns SQL error if there are problems and nil on success.
func (d *Database) UpdatePusher(
ctx context.Context, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format, localpart string,
ctx context.Context, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data, localpart string,
) error {
return sqlutil.WithTransaction(d.db, func(txn *sql.Tx) error {
return d.pushers.updatePusher(ctx, txn, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, url, format, localpart)
return d.pushers.updatePusher(ctx, txn, pushkey, kind, appid, appdisplayname, devicedisplayname, profiletag, lang, data, localpart)
})
}