From a67c7559b97ea134ab55e4e877da6a6caa1eef89 Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Mon, 10 Apr 2023 15:17:08 +0200
Subject: [PATCH] settings/security: generate paper key
---
Cargo.lock | 10 ++++
.../database/queries/users/set_paper_key.sql | 5 ++
crates/database/sqlx-data.json | 10 ++++
crates/database/src/tables/users.rs | 14 ++++++
crates/ezidam/src/icons.rs | 4 +-
crates/ezidam/src/routes/settings.rs | 1 +
crates/ezidam/src/routes/settings/security.rs | 50 +++++++++++++++++++
.../pages/settings/security.html.tera | 50 ++++++++++++++++++-
crates/hash/Cargo.toml | 1 +
crates/hash/src/lib.rs | 2 +
crates/hash/src/paper_key.rs | 26 ++++++++++
crates/users/src/database.rs | 14 +++++-
12 files changed, 183 insertions(+), 4 deletions(-)
create mode 100644 crates/database/queries/users/set_paper_key.sql
create mode 100644 crates/hash/src/paper_key.rs
diff --git a/Cargo.lock b/Cargo.lock
index 83c0a73..64e3c90 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -935,6 +935,15 @@ dependencies = [
"slab",
]
+[[package]]
+name = "gen_passphrase"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f20bae32fbc2a12fe5c574fc0a9834ba7f70abe51c8efe315dedc7a07fd58287"
+dependencies = [
+ "nanorand",
+]
+
[[package]]
name = "generator"
version = "0.7.3"
@@ -1061,6 +1070,7 @@ name = "hash"
version = "0.0.0"
dependencies = [
"argon2",
+ "gen_passphrase",
"nanoid",
"nanoid-dictionary",
"rand_core",
diff --git a/crates/database/queries/users/set_paper_key.sql b/crates/database/queries/users/set_paper_key.sql
new file mode 100644
index 0000000..cc9632e
--- /dev/null
+++ b/crates/database/queries/users/set_paper_key.sql
@@ -0,0 +1,5 @@
+update users
+
+set paper_key = ?
+
+where id is ?
\ No newline at end of file
diff --git a/crates/database/sqlx-data.json b/crates/database/sqlx-data.json
index 7e61b54..d2980fb 100644
--- a/crates/database/sqlx-data.json
+++ b/crates/database/sqlx-data.json
@@ -420,6 +420,16 @@
},
"query": "select id,\n created_at as \"created_at: DateTime\",\n updated_at as \"updated_at: DateTime\",\n business_name,\n business_logo,\n url\n\nfrom settings\n\nwhere id is 0\n"
},
+ "68cfa3d135eb4cdbdbcb3b943518b4ac09c371af689c444eb439a37f91ecf7a5": {
+ "describe": {
+ "columns": [],
+ "nullable": [],
+ "parameters": {
+ "Right": 2
+ }
+ },
+ "query": "update users\n\nset paper_key = ?\n\nwhere id is ?"
+ },
"69752cc2a3fc91d4e7a39e0b167695f431380bd40df9638b5df3534715de04b0": {
"describe": {
"columns": [
diff --git a/crates/database/src/tables/users.rs b/crates/database/src/tables/users.rs
index 8992685..e894b96 100644
--- a/crates/database/src/tables/users.rs
+++ b/crates/database/src/tables/users.rs
@@ -135,4 +135,18 @@ impl Users {
Ok((query.rows_affected() == 1).then_some(()))
}
+
+ pub async fn set_paper_key(
+ conn: impl SqliteExecutor<'_>,
+ id: &str,
+ paper_key: Option<&str>,
+ ) -> Result