Skip to content

Commit

Permalink
Fix Sqlight usage to SQL sanitize
Browse files Browse the repository at this point in the history
  • Loading branch information
nicklanng committed Apr 8, 2024
1 parent 607db07 commit 01b2bb2
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 39 deletions.
74 changes: 40 additions & 34 deletions src/data/world.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -188,26 +188,26 @@ pub fn insert_exit(
) -> Result(Nil, Error) {
use conn <- sqlight.with_connection(conn_string)

let decoder = dynamic.element(0, dynamic.int)
let sql =
"INSERT INTO `exits` (`room_id`, `direction`, `target_id`) VALUES "
<> "("
<> int.to_string(room_id)
<> ", '"
<> dir_to_str(dir)
<> "',"
<> int.to_string(target_room_id)
<> "), "
<> "("
<> int.to_string(target_room_id)
<> ",'"
<> dir_to_str(reverse_dir)
<> "',"
<> int.to_string(room_id)
<> ")"
<> ";"
"INSERT INTO `exits` (`room_id`, `direction`, `target_id`) VALUES (?, ?, ?), (?, ?, ?) RETURNING id;"

case sqlight.exec(sql, on: conn) {
Ok(Nil) -> Ok(Nil)
case
sqlight.query(
sql,
on: conn,
with: [
sqlight.int(room_id),
sqlight.text(dir_to_str(dir)),
sqlight.int(target_room_id),
sqlight.int(target_room_id),
sqlight.text(dir_to_str(reverse_dir)),
sqlight.int(room_id),
],
expecting: decoder,
)
{
Ok(_) -> Ok(Nil)
Error(sqlight.SqlightError(_code, message, _offset)) -> {
Error(SqlError(message))
}
Expand All @@ -221,15 +221,18 @@ pub fn update_room_name(
) -> Result(Nil, Error) {
use conn <- sqlight.with_connection(conn_string)

let sql =
"UPDATE `rooms` SET `name` = '"
<> name
<> "' WHERE id = "
<> int.to_string(room_id)
<> ";"
let decoder = dynamic.element(0, dynamic.int)
let sql = "UPDATE `rooms` SET `name` = ? WHERE `id` = ? RETURNING id;"

case sqlight.exec(sql, on: conn) {
Ok(Nil) -> Ok(Nil)
case
sqlight.query(
sql,
on: conn,
with: [sqlight.text(name), sqlight.int(room_id)],
expecting: decoder,
)
{
Ok(_) -> Ok(Nil)
Error(sqlight.SqlightError(_code, message, _offset)) -> {
Error(SqlError(message))
}
Expand All @@ -243,15 +246,18 @@ pub fn update_room_description(
) -> Result(Nil, Error) {
use conn <- sqlight.with_connection(conn_string)

let sql =
"UPDATE `rooms` SET `description` = '"
<> description
<> "' WHERE id = "
<> int.to_string(room_id)
<> ";"
let decoder = dynamic.element(0, dynamic.int)
let sql = "UPDATE `rooms` SET `description` = ? WHERE `id` = ? RETURNING id;"

case sqlight.exec(sql, on: conn) {
Ok(Nil) -> Ok(Nil)
case
sqlight.query(
sql,
on: conn,
with: [sqlight.text(description), sqlight.int(room_id)],
expecting: decoder,
)
{
Ok(_) -> Ok(Nil)
Error(sqlight.SqlightError(_code, message, _offset)) -> {
Error(SqlError(message))
}
Expand Down
7 changes: 2 additions & 5 deletions src/simulation.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -835,11 +835,8 @@ fn list_entities(
|> list.filter(fn(entity) { entity.id != viewer_id })
|> list.fold(#([], []), fn(acc, entity) {
let sentient_query =
entity.data
|> dataentity.query(dataentity.QuerySentient(False))
let name_query =
entity.data
|> dataentity.query(dataentity.QueryName(None))
dataentity.query(entity.data, dataentity.QuerySentient(False))
let name_query = dataentity.query(entity.data, dataentity.QueryName(None))

case name_query, sentient_query {
dataentity.QueryName(Some(name)), dataentity.QuerySentient(True) -> #(
Expand Down

0 comments on commit 01b2bb2

Please sign in to comment.