diff --git a/.env.example b/.env.example index 39662ed..491fb2d 100755 --- a/.env.example +++ b/.env.example @@ -6,6 +6,6 @@ SLACK_SIGNING_SECRET= # make sure to enable encryption in the feature flags to use this! # highly recommened for production # ENCRYPTION_KEY= -DATABASE_URL=sqlite://slackbot.db +DATABASE_URL=sqlite://plura.db # no trailing / please! -BASE_URL=https://slack-system-bot.wobbl.in +BASE_URL=https://plura.foxes.codes diff --git a/.sqlx/query-04fdce04aa13b6811ecdc0cbaa944ea11b0df9b267294dd734f41d9e9be91615.json b/.sqlx/query-04fdce04aa13b6811ecdc0cbaa944ea11b0df9b267294dd734f41d9e9be91615.json new file mode 100644 index 0000000..e149cc0 --- /dev/null +++ b/.sqlx/query-04fdce04aa13b6811ecdc0cbaa944ea11b0df9b267294dd734f41d9e9be91615.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n members.id as 'id: Id'\n FROM members\n JOIN systems ON members.system_id = systems.id\n WHERE members.id = $1 AND systems.owner_id = $2\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false + ] + }, + "hash": "04fdce04aa13b6811ecdc0cbaa944ea11b0df9b267294dd734f41d9e9be91615" +} diff --git a/.sqlx/query-0b21ef3cf3bf9af1800134943518bc2b0f71f6e198a2479b99562e83d135af3c.json b/.sqlx/query-0b21ef3cf3bf9af1800134943518bc2b0f71f6e198a2479b99562e83d135af3c.json new file mode 100644 index 0000000..c6d85d4 --- /dev/null +++ b/.sqlx/query-0b21ef3cf3bf9af1800134943518bc2b0f71f6e198a2479b99562e83d135af3c.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n DELETE FROM system_oauth_process\n WHERE csrf = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "0b21ef3cf3bf9af1800134943518bc2b0f71f6e198a2479b99562e83d135af3c" +} diff --git a/.sqlx/query-0d4a813957e336ae85b4300db9f05a1c13aefbb33b9b69590b604884bfa32732.json b/.sqlx/query-0d4a813957e336ae85b4300db9f05a1c13aefbb33b9b69590b604884bfa32732.json new file mode 100644 index 0000000..ffe1569 --- /dev/null +++ b/.sqlx/query-0d4a813957e336ae85b4300db9f05a1c13aefbb33b9b69590b604884bfa32732.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n owner_id as \"owner_id: user::Id\"\n FROM\n system_oauth_process\n WHERE csrf = $1\n ", + "describe": { + "columns": [ + { + "name": "owner_id: user::Id", + "ordinal": 0, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "0d4a813957e336ae85b4300db9f05a1c13aefbb33b9b69590b604884bfa32732" +} diff --git a/.sqlx/query-11e30e5ce59cf0822e6ebd41bf76a5af7c7e8cdd7667439452b502eaa1073697.json b/.sqlx/query-11e30e5ce59cf0822e6ebd41bf76a5af7c7e8cdd7667439452b502eaa1073697.json new file mode 100644 index 0000000..bb0c8dc --- /dev/null +++ b/.sqlx/query-11e30e5ce59cf0822e6ebd41bf76a5af7c7e8cdd7667439452b502eaa1073697.json @@ -0,0 +1,38 @@ +{ + "db_name": "SQLite", + "query": "\n INSERT INTO aliases (member_id, system_id, alias)\n VALUES ($1, $2, $3)\n RETURNING\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n system_id as \"system_id: system::Id\",\n alias\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "system_id: system::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "alias", + "ordinal": 3, + "type_info": "Text" + } + ], + "parameters": { + "Right": 3 + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "11e30e5ce59cf0822e6ebd41bf76a5af7c7e8cdd7667439452b502eaa1073697" +} diff --git a/.sqlx/query-1d4b80a8d013d14f336ad19a87447d3419fa8e11ee98d93ef07687deedd77bcd.json b/.sqlx/query-1d4b80a8d013d14f336ad19a87447d3419fa8e11ee98d93ef07687deedd77bcd.json new file mode 100644 index 0000000..e46c71f --- /dev/null +++ b/.sqlx/query-1d4b80a8d013d14f336ad19a87447d3419fa8e11ee98d93ef07687deedd77bcd.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT\n id as 'id: Id'\n FROM members\n WHERE id = $1 AND system_id = $2", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false + ] + }, + "hash": "1d4b80a8d013d14f336ad19a87447d3419fa8e11ee98d93ef07687deedd77bcd" +} diff --git a/.sqlx/query-1ec4205c64775babbb9e3390e0f473bdb5c4e6d17b8dcd3b2b3db274a3d0dc79.json b/.sqlx/query-1ec4205c64775babbb9e3390e0f473bdb5c4e6d17b8dcd3b2b3db274a3d0dc79.json new file mode 100644 index 0000000..c71a485 --- /dev/null +++ b/.sqlx/query-1ec4205c64775babbb9e3390e0f473bdb5c4e6d17b8dcd3b2b3db274a3d0dc79.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n DELETE FROM aliases\n WHERE id = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "1ec4205c64775babbb9e3390e0f473bdb5c4e6d17b8dcd3b2b3db274a3d0dc79" +} diff --git a/.sqlx/query-2780cd7eb560384850f1ddf60b4f6c4b361e8ea7dec98d9661726573b4d2caa4.json b/.sqlx/query-2780cd7eb560384850f1ddf60b4f6c4b361e8ea7dec98d9661726573b4d2caa4.json new file mode 100644 index 0000000..5e7a85c --- /dev/null +++ b/.sqlx/query-2780cd7eb560384850f1ddf60b4f6c4b361e8ea7dec98d9661726573b4d2caa4.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT\n id as 'id: Id'\n FROM aliases\n WHERE id = $1 AND system_id = $2", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false + ] + }, + "hash": "2780cd7eb560384850f1ddf60b4f6c4b361e8ea7dec98d9661726573b4d2caa4" +} diff --git a/.sqlx/query-2be64e1d7acc534d6afe2a205a463a8cf384951dca74c28ffb5b25da87f17309.json b/.sqlx/query-2be64e1d7acc534d6afe2a205a463a8cf384951dca74c28ffb5b25da87f17309.json new file mode 100644 index 0000000..a799670 --- /dev/null +++ b/.sqlx/query-2be64e1d7acc534d6afe2a205a463a8cf384951dca74c28ffb5b25da87f17309.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "UPDATE members SET enabled = $1 WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "2be64e1d7acc534d6afe2a205a463a8cf384951dca74c28ffb5b25da87f17309" +} diff --git a/.sqlx/query-2d94941a58c917d9a7d324b04ffd0a106d06565345a70f760eb5dc9c81ecff4d.json b/.sqlx/query-2d94941a58c917d9a7d324b04ffd0a106d06565345a70f760eb5dc9c81ecff4d.json new file mode 100644 index 0000000..cea676d --- /dev/null +++ b/.sqlx/query-2d94941a58c917d9a7d324b04ffd0a106d06565345a70f760eb5dc9c81ecff4d.json @@ -0,0 +1,44 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n system_id as \"system_id: system::Id\",\n text,\n typ\n FROM\n triggers\n WHERE\n system_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "system_id: system::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "text", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "typ", + "ordinal": 4, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + false + ] + }, + "hash": "2d94941a58c917d9a7d324b04ffd0a106d06565345a70f760eb5dc9c81ecff4d" +} diff --git a/.sqlx/query-2e030f837049b2992ed340b9ea6a091d2a9a06eb6eb72f1b4df5d8f3f863d3c7.json b/.sqlx/query-2e030f837049b2992ed340b9ea6a091d2a9a06eb6eb72f1b4df5d8f3f863d3c7.json new file mode 100644 index 0000000..233ba72 --- /dev/null +++ b/.sqlx/query-2e030f837049b2992ed340b9ea6a091d2a9a06eb6eb72f1b4df5d8f3f863d3c7.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n UPDATE systems\n SET currently_fronting_member_id = $1\n WHERE id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "2e030f837049b2992ed340b9ea6a091d2a9a06eb6eb72f1b4df5d8f3f863d3c7" +} diff --git a/.sqlx/query-4bcec39a53cba278c87c43b849749c6f7a91160c2514b05bb858e51cbb7f62eb.json b/.sqlx/query-4bcec39a53cba278c87c43b849749c6f7a91160c2514b05bb858e51cbb7f62eb.json new file mode 100644 index 0000000..5030ed7 --- /dev/null +++ b/.sqlx/query-4bcec39a53cba278c87c43b849749c6f7a91160c2514b05bb858e51cbb7f62eb.json @@ -0,0 +1,80 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n system_id as \"system_id: system::Id\",\n full_name,\n display_name,\n profile_picture_url,\n title,\n pronouns,\n name_pronunciation,\n name_recording_url,\n enabled,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM members\n WHERE id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "system_id: system::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "full_name", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "display_name", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "profile_picture_url", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "title", + "ordinal": 5, + "type_info": "Text" + }, + { + "name": "pronouns", + "ordinal": 6, + "type_info": "Text" + }, + { + "name": "name_pronunciation", + "ordinal": 7, + "type_info": "Text" + }, + { + "name": "name_recording_url", + "ordinal": 8, + "type_info": "Text" + }, + { + "name": "enabled", + "ordinal": 9, + "type_info": "Bool" + }, + { + "name": "created_at: time::PrimitiveDateTime", + "ordinal": 10, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + true, + true, + true, + true, + true, + false, + false + ] + }, + "hash": "4bcec39a53cba278c87c43b849749c6f7a91160c2514b05bb858e51cbb7f62eb" +} diff --git a/.sqlx/query-4ec129418f30d63744d239ce6b430b2553dc8279119783b43f779bc643b1f9a6.json b/.sqlx/query-4ec129418f30d63744d239ce6b430b2553dc8279119783b43f779bc643b1f9a6.json new file mode 100644 index 0000000..59ab06c --- /dev/null +++ b/.sqlx/query-4ec129418f30d63744d239ce6b430b2553dc8279119783b43f779bc643b1f9a6.json @@ -0,0 +1,44 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n system_id as \"system_id: system::Id\",\n text,\n typ\n FROM\n triggers\n WHERE member_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "system_id: system::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "text", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "typ", + "ordinal": 4, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + false + ] + }, + "hash": "4ec129418f30d63744d239ce6b430b2553dc8279119783b43f779bc643b1f9a6" +} diff --git a/.sqlx/query-6f8391494c3d7a309fba8e621cedf525d814b05ad3b824d51275a79d616e46d2.json b/.sqlx/query-6f8391494c3d7a309fba8e621cedf525d814b05ad3b824d51275a79d616e46d2.json new file mode 100644 index 0000000..a8e928f --- /dev/null +++ b/.sqlx/query-6f8391494c3d7a309fba8e621cedf525d814b05ad3b824d51275a79d616e46d2.json @@ -0,0 +1,38 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n system_id as \"system_id: system::Id\",\n alias\n FROM\n aliases\n WHERE\n system_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "system_id: system::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "alias", + "ordinal": 3, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "6f8391494c3d7a309fba8e621cedf525d814b05ad3b824d51275a79d616e46d2" +} diff --git a/.sqlx/query-72b92254bed36439057fe11e11e8da8e7c24b48da20a885fb6b21d8ee4b8aa63.json b/.sqlx/query-72b92254bed36439057fe11e11e8da8e7c24b48da20a885fb6b21d8ee4b8aa63.json new file mode 100644 index 0000000..311d858 --- /dev/null +++ b/.sqlx/query-72b92254bed36439057fe11e11e8da8e7c24b48da20a885fb6b21d8ee4b8aa63.json @@ -0,0 +1,32 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n message_id\n FROM\n message_logs\n WHERE\n member_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "message_id", + "ordinal": 2, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "72b92254bed36439057fe11e11e8da8e7c24b48da20a885fb6b21d8ee4b8aa63" +} diff --git a/.sqlx/query-74767c5301f932a80fde568387d0d1d3543e92d5c6c134981b1ace845c569135.json b/.sqlx/query-74767c5301f932a80fde568387d0d1d3543e92d5c6c134981b1ace845c569135.json new file mode 100644 index 0000000..2800a2d --- /dev/null +++ b/.sqlx/query-74767c5301f932a80fde568387d0d1d3543e92d5c6c134981b1ace845c569135.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT\n id as 'id: Id'\n FROM triggers\n WHERE id = $1 AND system_id = $2", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false + ] + }, + "hash": "74767c5301f932a80fde568387d0d1d3543e92d5c6c134981b1ace845c569135" +} diff --git a/.sqlx/query-7848fe19184280fc87ba466b55f8fa61ac7f7d5987c78fe561ee44da46244ef1.json b/.sqlx/query-7848fe19184280fc87ba466b55f8fa61ac7f7d5987c78fe561ee44da46244ef1.json new file mode 100644 index 0000000..de1e8ba --- /dev/null +++ b/.sqlx/query-7848fe19184280fc87ba466b55f8fa61ac7f7d5987c78fe561ee44da46244ef1.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n INSERT INTO system_oauth_process (owner_id, csrf)\n VALUES ($1, $2)\n ON CONFLICT (owner_id) DO UPDATE SET csrf = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "7848fe19184280fc87ba466b55f8fa61ac7f7d5987c78fe561ee44da46244ef1" +} diff --git a/.sqlx/query-7e43c0e944c2a60ef369978b848680384a8a5aef846941930c777dc94ba4b60e.json b/.sqlx/query-7e43c0e944c2a60ef369978b848680384a8a5aef846941930c777dc94ba4b60e.json new file mode 100644 index 0000000..8ea4a1c --- /dev/null +++ b/.sqlx/query-7e43c0e944c2a60ef369978b848680384a8a5aef846941930c777dc94ba4b60e.json @@ -0,0 +1,50 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n owner_id as \"owner_id: user::Id\",\n currently_fronting_member_id as \"currently_fronting_member_id: member::Id\",\n auto_switch_on_trigger,\n slack_oauth_token,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM\n systems\n WHERE owner_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "owner_id: user::Id", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "currently_fronting_member_id: member::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "auto_switch_on_trigger", + "ordinal": 3, + "type_info": "Bool" + }, + { + "name": "slack_oauth_token", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "created_at: time::PrimitiveDateTime", + "ordinal": 5, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + true, + false, + false, + false + ] + }, + "hash": "7e43c0e944c2a60ef369978b848680384a8a5aef846941930c777dc94ba4b60e" +} diff --git a/.sqlx/query-83319616c9a81980005676b35befdd41ec95a3117dc8b7f4215a54bf855950ca.json b/.sqlx/query-83319616c9a81980005676b35befdd41ec95a3117dc8b7f4215a54bf855950ca.json new file mode 100644 index 0000000..22e7cf1 --- /dev/null +++ b/.sqlx/query-83319616c9a81980005676b35befdd41ec95a3117dc8b7f4215a54bf855950ca.json @@ -0,0 +1,80 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: member::Id\",\n system_id as \"system_id: Id\",\n full_name,\n display_name,\n profile_picture_url,\n title,\n pronouns,\n name_pronunciation,\n name_recording_url,\n enabled,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM\n members\n WHERE system_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: member::Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "system_id: Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "full_name", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "display_name", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "profile_picture_url", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "title", + "ordinal": 5, + "type_info": "Text" + }, + { + "name": "pronouns", + "ordinal": 6, + "type_info": "Text" + }, + { + "name": "name_pronunciation", + "ordinal": 7, + "type_info": "Text" + }, + { + "name": "name_recording_url", + "ordinal": 8, + "type_info": "Text" + }, + { + "name": "enabled", + "ordinal": 9, + "type_info": "Bool" + }, + { + "name": "created_at: time::PrimitiveDateTime", + "ordinal": 10, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + true, + true, + true, + true, + true, + false, + false + ] + }, + "hash": "83319616c9a81980005676b35befdd41ec95a3117dc8b7f4215a54bf855950ca" +} diff --git a/.sqlx/query-8bd32a0c8934610e14a9fe524220e92423d9e38aa7c45198d0ec3a215c12d6c8.json b/.sqlx/query-8bd32a0c8934610e14a9fe524220e92423d9e38aa7c45198d0ec3a215c12d6c8.json new file mode 100644 index 0000000..da395d8 --- /dev/null +++ b/.sqlx/query-8bd32a0c8934610e14a9fe524220e92423d9e38aa7c45198d0ec3a215c12d6c8.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n UPDATE members\n SET full_name = $1, display_name = $2, profile_picture_url = $3, title = $4, pronouns = $5, name_pronunciation = $6, name_recording_url = $7\n WHERE id = $8\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 8 + }, + "nullable": [] + }, + "hash": "8bd32a0c8934610e14a9fe524220e92423d9e38aa7c45198d0ec3a215c12d6c8" +} diff --git a/.sqlx/query-a0857365f6f46169cedc2098d1c0c282b4380aac28674f37ba08aeea83626dee.json b/.sqlx/query-a0857365f6f46169cedc2098d1c0c282b4380aac28674f37ba08aeea83626dee.json new file mode 100644 index 0000000..a195bc1 --- /dev/null +++ b/.sqlx/query-a0857365f6f46169cedc2098d1c0c282b4380aac28674f37ba08aeea83626dee.json @@ -0,0 +1,50 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n owner_id as \"owner_id: user::Id\",\n currently_fronting_member_id as \"currently_fronting_member_id: member::Id\",\n auto_switch_on_trigger,\n slack_oauth_token,\n created_at as \"created_at: time::PrimitiveDateTime\"\n FROM systems\n WHERE id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "owner_id: user::Id", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "currently_fronting_member_id: member::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "auto_switch_on_trigger", + "ordinal": 3, + "type_info": "Bool" + }, + { + "name": "slack_oauth_token", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "created_at: time::PrimitiveDateTime", + "ordinal": 5, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + true, + false, + false, + false + ] + }, + "hash": "a0857365f6f46169cedc2098d1c0c282b4380aac28674f37ba08aeea83626dee" +} diff --git a/.sqlx/query-b0e278b61cecabadfe070e2806fc0303fedc4c86b81c9cada598b63ecb47badf.json b/.sqlx/query-b0e278b61cecabadfe070e2806fc0303fedc4c86b81c9cada598b63ecb47badf.json new file mode 100644 index 0000000..6617090 --- /dev/null +++ b/.sqlx/query-b0e278b61cecabadfe070e2806fc0303fedc4c86b81c9cada598b63ecb47badf.json @@ -0,0 +1,32 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n message_id\n FROM\n message_logs\n WHERE message_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "message_id", + "ordinal": 2, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "b0e278b61cecabadfe070e2806fc0303fedc4c86b81c9cada598b63ecb47badf" +} diff --git a/.sqlx/query-bfab0dd41442bcf5fede67398ad5453d7e723a5df43a540d44cf83f83e0dbd11.json b/.sqlx/query-bfab0dd41442bcf5fede67398ad5453d7e723a5df43a540d44cf83f83e0dbd11.json new file mode 100644 index 0000000..3636be5 --- /dev/null +++ b/.sqlx/query-bfab0dd41442bcf5fede67398ad5453d7e723a5df43a540d44cf83f83e0dbd11.json @@ -0,0 +1,44 @@ +{ + "db_name": "SQLite", + "query": "\n INSERT INTO triggers (member_id, system_id, typ, text)\n VALUES ($1, $2, $3, $4)\n RETURNING\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n system_id as \"system_id: system::Id\",\n typ,\n text\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "system_id: system::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "typ", + "ordinal": 3, + "type_info": "Integer" + }, + { + "name": "text", + "ordinal": 4, + "type_info": "Text" + } + ], + "parameters": { + "Right": 4 + }, + "nullable": [ + false, + false, + false, + false, + false + ] + }, + "hash": "bfab0dd41442bcf5fede67398ad5453d7e723a5df43a540d44cf83f83e0dbd11" +} diff --git a/.sqlx/query-c1330cef195b203f42fd1916c45a59715621353db22d5ee3f4c2b56b711241b8.json b/.sqlx/query-c1330cef195b203f42fd1916c45a59715621353db22d5ee3f4c2b56b711241b8.json new file mode 100644 index 0000000..09aa858 --- /dev/null +++ b/.sqlx/query-c1330cef195b203f42fd1916c45a59715621353db22d5ee3f4c2b56b711241b8.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT enabled FROM members WHERE id = $1", + "describe": { + "columns": [ + { + "name": "enabled", + "ordinal": 0, + "type_info": "Bool" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false + ] + }, + "hash": "c1330cef195b203f42fd1916c45a59715621353db22d5ee3f4c2b56b711241b8" +} diff --git a/.sqlx/query-c9de717842b3012917cfef30428e98666a25504d5c03f222afecfefb759f00d7.json b/.sqlx/query-c9de717842b3012917cfef30428e98666a25504d5c03f222afecfefb759f00d7.json new file mode 100644 index 0000000..c7ce612 --- /dev/null +++ b/.sqlx/query-c9de717842b3012917cfef30428e98666a25504d5c03f222afecfefb759f00d7.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n INSERT INTO members (full_name, display_name, profile_picture_url, title, pronouns, name_pronunciation, name_recording_url, system_id)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n RETURNING id\n ", + "describe": { + "columns": [ + { + "name": "id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 8 + }, + "nullable": [ + false + ] + }, + "hash": "c9de717842b3012917cfef30428e98666a25504d5c03f222afecfefb759f00d7" +} diff --git a/.sqlx/query-d28d88839f91859aa410470a5240d65bb0f46a99a198c06ff4d886bf8ba94784.json b/.sqlx/query-d28d88839f91859aa410470a5240d65bb0f46a99a198c06ff4d886bf8ba94784.json new file mode 100644 index 0000000..eaf7ee5 --- /dev/null +++ b/.sqlx/query-d28d88839f91859aa410470a5240d65bb0f46a99a198c06ff4d886bf8ba94784.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n DELETE FROM message_logs\n WHERE message_id = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "d28d88839f91859aa410470a5240d65bb0f46a99a198c06ff4d886bf8ba94784" +} diff --git a/.sqlx/query-dba6daa7ea09507aa91463a41e78424ae372d7e0c8b1bf2150d4e6588da2e9ab.json b/.sqlx/query-dba6daa7ea09507aa91463a41e78424ae372d7e0c8b1bf2150d4e6588da2e9ab.json new file mode 100644 index 0000000..5e9d335 --- /dev/null +++ b/.sqlx/query-dba6daa7ea09507aa91463a41e78424ae372d7e0c8b1bf2150d4e6588da2e9ab.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT\n member_id AS 'id: Id'\n FROM aliases\n WHERE alias = $1 AND system_id = $2", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false + ] + }, + "hash": "dba6daa7ea09507aa91463a41e78424ae372d7e0c8b1bf2150d4e6588da2e9ab" +} diff --git a/.sqlx/query-dbf3ee22f8ee9f2935acf109c4e620b5a5522a05a3def3a8d12140f77dc486f4.json b/.sqlx/query-dbf3ee22f8ee9f2935acf109c4e620b5a5522a05a3def3a8d12140f77dc486f4.json new file mode 100644 index 0000000..fcb9b32 --- /dev/null +++ b/.sqlx/query-dbf3ee22f8ee9f2935acf109c4e620b5a5522a05a3def3a8d12140f77dc486f4.json @@ -0,0 +1,44 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n members.id as \"id: member::Id\",\n display_name,\n profile_picture_url,\n triggers.text as trigger_text,\n triggers.typ\n FROM\n members\n JOIN\n triggers ON members.id = triggers.member_id\n WHERE\n -- See trigger.rs file for all types and names\n members.enabled = TRUE AND\n ((triggers.typ = 0 AND $1 LIKE '%' || triggers.text) OR\n (triggers.typ = 1 AND $1 LIKE triggers.text || '%'))\n ", + "describe": { + "columns": [ + { + "name": "id: member::Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "display_name", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "profile_picture_url", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "trigger_text", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "typ", + "ordinal": 4, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + true, + false, + false + ] + }, + "hash": "dbf3ee22f8ee9f2935acf109c4e620b5a5522a05a3def3a8d12140f77dc486f4" +} diff --git a/.sqlx/query-df793c15ed1ca3a4af1148ec9fec377aab3ccf7cfc38250515b4301f21f8809b.json b/.sqlx/query-df793c15ed1ca3a4af1148ec9fec377aab3ccf7cfc38250515b4301f21f8809b.json new file mode 100644 index 0000000..0556695 --- /dev/null +++ b/.sqlx/query-df793c15ed1ca3a4af1148ec9fec377aab3ccf7cfc38250515b4301f21f8809b.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n UPDATE triggers\n SET\n typ = coalesce($2, typ),\n text = coalesce($3, text)\n WHERE id = $1\n RETURNING\n id as \"id: Id\"\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 3 + }, + "nullable": [ + false + ] + }, + "hash": "df793c15ed1ca3a4af1148ec9fec377aab3ccf7cfc38250515b4301f21f8809b" +} diff --git a/.sqlx/query-e811964cfde379fed00e5941f976b9a384ca7c76324209ea15351a01f4dd5d64.json b/.sqlx/query-e811964cfde379fed00e5941f976b9a384ca7c76324209ea15351a01f4dd5d64.json new file mode 100644 index 0000000..7d80093 --- /dev/null +++ b/.sqlx/query-e811964cfde379fed00e5941f976b9a384ca7c76324209ea15351a01f4dd5d64.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: system::Id\"\n FROM\n systems\n ", + "describe": { + "columns": [ + { + "name": "id: system::Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 0 + }, + "nullable": [ + false + ] + }, + "hash": "e811964cfde379fed00e5941f976b9a384ca7c76324209ea15351a01f4dd5d64" +} diff --git a/.sqlx/query-e86320673d997dea93a80b855e7492b06aacee4ef9c6513f9bb745c03e69b2ac.json b/.sqlx/query-e86320673d997dea93a80b855e7492b06aacee4ef9c6513f9bb745c03e69b2ac.json new file mode 100644 index 0000000..efb3323 --- /dev/null +++ b/.sqlx/query-e86320673d997dea93a80b855e7492b06aacee4ef9c6513f9bb745c03e69b2ac.json @@ -0,0 +1,44 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n members.id,\n display_name,\n full_name,\n enabled,\n GROUP_CONCAT(aliases.alias, ', ') as aliases\n FROM\n members\n JOIN\n aliases ON members.id = aliases.member_id\n WHERE\n members.system_id = $1\n GROUP BY members.id\n ", + "describe": { + "columns": [ + { + "name": "id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "display_name", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "full_name", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "enabled", + "ordinal": 3, + "type_info": "Bool" + }, + { + "name": "aliases", + "ordinal": 4, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + false + ] + }, + "hash": "e86320673d997dea93a80b855e7492b06aacee4ef9c6513f9bb745c03e69b2ac" +} diff --git a/.sqlx/query-e8684fdb0052090f83b4e7a6950e8c36a75390ca1f24e2da867db5d4a2589224.json b/.sqlx/query-e8684fdb0052090f83b4e7a6950e8c36a75390ca1f24e2da867db5d4a2589224.json new file mode 100644 index 0000000..ad74f42 --- /dev/null +++ b/.sqlx/query-e8684fdb0052090f83b4e7a6950e8c36a75390ca1f24e2da867db5d4a2589224.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n DELETE FROM triggers\n WHERE id = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "e8684fdb0052090f83b4e7a6950e8c36a75390ca1f24e2da867db5d4a2589224" +} diff --git a/.sqlx/query-f1a53ac9fd2ed276b8b3b1f034f4ddcf493423533287f68b39aa81fe22d0297b.json b/.sqlx/query-f1a53ac9fd2ed276b8b3b1f034f4ddcf493423533287f68b39aa81fe22d0297b.json new file mode 100644 index 0000000..de7ffe5 --- /dev/null +++ b/.sqlx/query-f1a53ac9fd2ed276b8b3b1f034f4ddcf493423533287f68b39aa81fe22d0297b.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n UPDATE aliases\n SET alias = $2\n WHERE id = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "f1a53ac9fd2ed276b8b3b1f034f4ddcf493423533287f68b39aa81fe22d0297b" +} diff --git a/.sqlx/query-f29cae5d678ee34feb0d2811cbe283976da87c3fc97e279e74e0edde8d540544.json b/.sqlx/query-f29cae5d678ee34feb0d2811cbe283976da87c3fc97e279e74e0edde8d540544.json new file mode 100644 index 0000000..37b93ef --- /dev/null +++ b/.sqlx/query-f29cae5d678ee34feb0d2811cbe283976da87c3fc97e279e74e0edde8d540544.json @@ -0,0 +1,38 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n system_id as \"system_id: system::Id\",\n alias\n FROM\n aliases\n WHERE member_id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "system_id: system::Id", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "alias", + "ordinal": 3, + "type_info": "Text" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "f29cae5d678ee34feb0d2811cbe283976da87c3fc97e279e74e0edde8d540544" +} diff --git a/.sqlx/query-f67cd8c94467cfbaefe6bbfb8940144eda3cb92cf447d6d77736837e2cc04b9e.json b/.sqlx/query-f67cd8c94467cfbaefe6bbfb8940144eda3cb92cf447d6d77736837e2cc04b9e.json new file mode 100644 index 0000000..a66b9b7 --- /dev/null +++ b/.sqlx/query-f67cd8c94467cfbaefe6bbfb8940144eda3cb92cf447d6d77736837e2cc04b9e.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n INSERT INTO systems (owner_id, slack_oauth_token)\n VALUES ($1, $2)\n ON CONFLICT (owner_id) DO UPDATE SET slack_oauth_token = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "f67cd8c94467cfbaefe6bbfb8940144eda3cb92cf447d6d77736837e2cc04b9e" +} diff --git a/.sqlx/query-fb70767a8f81b4a0ff80331e9a2a3ef4d5b84f8bbaf713b6cc2db988786ed9b4.json b/.sqlx/query-fb70767a8f81b4a0ff80331e9a2a3ef4d5b84f8bbaf713b6cc2db988786ed9b4.json new file mode 100644 index 0000000..972b031 --- /dev/null +++ b/.sqlx/query-fb70767a8f81b4a0ff80331e9a2a3ef4d5b84f8bbaf713b6cc2db988786ed9b4.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT currently_fronting_member_id as \"id: member::Id\"\n FROM systems\n WHERE id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: member::Id", + "ordinal": 0, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + true + ] + }, + "hash": "fb70767a8f81b4a0ff80331e9a2a3ef4d5b84f8bbaf713b6cc2db988786ed9b4" +} diff --git a/.sqlx/query-fd7f6f5bb12f059c5c8ffb310d6ed2d5d4c9d525fd1bf2ee948fb1c07a6115f1.json b/.sqlx/query-fd7f6f5bb12f059c5c8ffb310d6ed2d5d4c9d525fd1bf2ee948fb1c07a6115f1.json new file mode 100644 index 0000000..f2ebb1e --- /dev/null +++ b/.sqlx/query-fd7f6f5bb12f059c5c8ffb310d6ed2d5d4c9d525fd1bf2ee948fb1c07a6115f1.json @@ -0,0 +1,32 @@ +{ + "db_name": "SQLite", + "query": "\n INSERT INTO message_logs (member_id, message_id)\n VALUES ($1, $2)\n RETURNING\n id as \"id: Id\",\n member_id as \"member_id: member::Id\",\n message_id\n ", + "describe": { + "columns": [ + { + "name": "id: Id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "member_id: member::Id", + "ordinal": 1, + "type_info": "Integer" + }, + { + "name": "message_id", + "ordinal": 2, + "type_info": "Text" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "fd7f6f5bb12f059c5c8ffb310d6ed2d5d4c9d525fd1bf2ee948fb1c07a6115f1" +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b72cfd9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,52 @@ +FROM rust:1.92 AS builder + +ARG APP_NAME=plura +WORKDIR /app + +RUN apt-get update && \ + apt-get install -y \ + clang \ + llvm-dev \ + libclang-dev \ + pkg-config \ + sqlite3 \ + libsqlite3-dev \ + git \ + musl-tools + +COPY . . + +ENV SQLX_OFFLINE=true + +RUN rustup target add x86_64-unknown-linux-musl && \ + cargo build --release --target x86_64-unknown-linux-musl && \ + cp ./target/x86_64-unknown-linux-musl/release/$APP_NAME /bin/server + +FROM alpine:latest AS final + +ARG UID=10001 + +# create non-root user +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser + +# create app + data dirs +WORKDIR /app +RUN mkdir -p /data && \ + chown -R appuser:appuser /app /data + +# copy binary +COPY --from=builder /bin/server /app/plura + +# switch to non-root +USER appuser + +EXPOSE 8080 + +CMD ["./plura"]