From 71b083895d4c0927f572114596d5aa012e97626b Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Wed, 15 Mar 2023 22:00:04 +0100
Subject: [PATCH] apps: sql + get valid one, get by id, insert, generate app
id, generate secret
---
Cargo.lock | 15 ++
crates/apps/Cargo.toml | 14 ++
crates/apps/src/database.rs | 61 ++++++++
crates/apps/src/error.rs | 8 ++
crates/apps/src/lib.rs | 31 +++++
.../migrations/20230314174914_apps.down.sql | 1 +
.../migrations/20230314174914_apps.up.sql | 22 +++
crates/database/queries/apps/get_one.sql | 13 ++
.../database/queries/apps/get_one_by_id.sql | 11 ++
crates/database/queries/apps/insert.sql | 2 +
crates/database/sqlx-data.json | 130 ++++++++++++++++++
crates/database/src/tables.rs | 2 +
crates/database/src/tables/apps.rs | 62 +++++++++
crates/ezidam/Cargo.toml | 1 +
crates/hash/Cargo.toml | 2 +
crates/hash/src/lib.rs | 2 +
crates/hash/src/secret.rs | 31 +++++
crates/id/src/app.rs | 80 +++++++++++
crates/id/src/lib.rs | 2 +
19 files changed, 490 insertions(+)
create mode 100644 crates/apps/Cargo.toml
create mode 100644 crates/apps/src/database.rs
create mode 100644 crates/apps/src/error.rs
create mode 100644 crates/apps/src/lib.rs
create mode 100644 crates/database/migrations/20230314174914_apps.down.sql
create mode 100644 crates/database/migrations/20230314174914_apps.up.sql
create mode 100644 crates/database/queries/apps/get_one.sql
create mode 100644 crates/database/queries/apps/get_one_by_id.sql
create mode 100644 crates/database/queries/apps/insert.sql
create mode 100644 crates/database/src/tables/apps.rs
create mode 100644 crates/hash/src/secret.rs
create mode 100644 crates/id/src/app.rs
diff --git a/Cargo.lock b/Cargo.lock
index 3898ecb..e3751d8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -78,6 +78,18 @@ version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+[[package]]
+name = "apps"
+version = "0.0.0"
+dependencies = [
+ "chrono",
+ "database",
+ "hash",
+ "id",
+ "thiserror",
+ "url",
+]
+
[[package]]
name = "argon2"
version = "0.4.1"
@@ -769,6 +781,7 @@ dependencies = [
name = "ezidam"
version = "0.1.0"
dependencies = [
+ "apps",
"database_pool",
"erased-serde",
"futures",
@@ -1140,6 +1153,8 @@ name = "hash"
version = "0.0.0"
dependencies = [
"argon2",
+ "nanoid",
+ "nanoid-dictionary",
"rand_core",
"thiserror",
]
diff --git a/crates/apps/Cargo.toml b/crates/apps/Cargo.toml
new file mode 100644
index 0000000..22c7578
--- /dev/null
+++ b/crates/apps/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "apps"
+version = "0.0.0"
+edition = "2021"
+
+[dependencies]
+thiserror = { workspace = true }
+chrono = { workspace = true }
+url = { workspace = true }
+
+# local crates
+id = { path = "../id" }
+database = { path = "../database" }
+hash = { path = "../hash" }
diff --git a/crates/apps/src/database.rs b/crates/apps/src/database.rs
new file mode 100644
index 0000000..4f46f03
--- /dev/null
+++ b/crates/apps/src/database.rs
@@ -0,0 +1,61 @@
+use crate::error::Error;
+use crate::App;
+use database::sqlx::SqliteExecutor;
+use database::Apps as DatabaseApps;
+use hash::Secret;
+use id::AppID;
+use url::Url;
+
+impl From for App {
+ fn from(db: DatabaseApps) -> Self {
+ Self {
+ id: AppID(db.id),
+ created_at: db.created_at,
+ updated_at: db.updated_at,
+ is_archived: db.is_archived,
+ label: db.label,
+ redirect_uri: db.redirect_uri,
+ secret: db.secret,
+ is_confidential: db.is_confidential,
+ }
+ }
+}
+
+impl App {
+ pub async fn insert(
+ conn: impl SqliteExecutor<'_>,
+ id: &AppID,
+ label: &str,
+ redirect_uri: &Url,
+ secret: &Secret,
+ is_confidential: bool,
+ ) -> Result