fix: Sanitize channel names in CQL queries

This commit is contained in:
April Hall 2025-02-07 11:20:10 -05:00
parent 81b9c032cd
commit c9a7b77765
No known key found for this signature in database
GPG Key ID: A49AC35CB186266C

View File

@ -5,6 +5,14 @@ interface Messages {
error: Error | null;
}
function sanitizeChannelName(channelName: string) {
return channelName
.toLowerCase()
.replaceAll(' ', '-')
.replaceAll(/[^a-z-]+/g, '')
.replaceAll('-', '_');
}
class Db {
private client: cassandra.Client = new cassandra.Client({
contactPoints: ['localhost'],
@ -32,6 +40,7 @@ class Db {
// Create Channel Method
async createChannel(channelName: string) {
try {
channelName = sanitizeChannelName(channelName);
await this.client.execute(`
CREATE TABLE IF NOT EXISTS channels.${channelName} (
id UUID,
@ -50,6 +59,7 @@ class Db {
async sendMessage(channelName: string, content: string, sender: string, id: string) {
try {
const now = new Date();
channelName = sanitizeChannelName(channelName);
await this.client.execute(`INSERT INTO channels.${channelName} (id, message_content, channel_name, timestamp, sender) VALUES (?, ?, ?, ?, ?)`, {
id,
message_content: content,
@ -89,6 +99,7 @@ class Db {
// Get messages method
async getMessages(channelName: string, limit: number): Promise<Messages> {
try {
channelName = sanitizeChannelName(channelName);
const res = await this.client.execute(`SELECT * FROM channels.${channelName} WHERE channel_name = ? ORDER BY timestamp DESC LIMIT ${limit}`, {
channel_name: channelName,
});