Commit 7bd80a89 authored by Mo Firouz's avatar Mo Firouz
Browse files

Improve query to check block users on DM chat messages

parent 03b664d9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ func NewPipeline(config Config, db *sql.DB, socialClient *social.Client, tracker
}

func (p *pipeline) processRequest(logger zap.Logger, session *session, envelope *Envelope) {
	logger.Debug(fmt.Sprintf("Received %T message", envelope.Payload), zap.String("collation_id", envelope.CollationId))
	logger.Debug(fmt.Sprintf("Received %T message", envelope.Payload))

	switch envelope.Payload.(type) {
	case *Envelope_Logout:
+10 −20
Original line number Diff line number Diff line
@@ -537,26 +537,16 @@ func (p *pipeline) isGroupMember(userID uuid.UUID, groupID []byte) (bool, error)
}

func (p *pipeline) userExistsAndDoesNotBlock(checkUserID []byte, blocksUserID []byte) (bool, error) {
	var uid []byte
	var state sql.NullInt64
	err := p.db.QueryRow(`SELECT u.id, ue.state
FROM users u
LEFT JOIN user_edge ue ON u.id = ue.destination_id
WHERE u.id = $1
AND ue.source_id = $2`, checkUserID, blocksUserID).Scan(&uid, &state)
	if err != nil {
		if err == sql.ErrNoRows {
			// No such user.
			return false, nil
		}
		return false, err
	}
	if state.Valid {
		// User exists and has some relationship to the requester, check if it's a block.
		return state.Int64 != 3, nil
	}
	// User exists and has no relationship to the requester, so can't be a block.
	return true, nil
	var count int64
	err := p.db.QueryRow(`
SELECT COUNT(id) FROM users
WHERE id = $1 AND NOT EXISTS (
	SELECT state FROM user_edge
	WHERE source_id = $1 AND destination_id = $2 AND state = 3
)
`, checkUserID, blocksUserID).Scan(&count)

	return count != 0, err
}

// Assumes `topic` has already been validated, or was constructed internally.