diff --git a/db/db-sqlx-postgres/src/errors.rs b/db/db-sqlx-postgres/src/errors.rs index 29d2e843..cd2350d7 100644 --- a/db/db-sqlx-postgres/src/errors.rs +++ b/db/db-sqlx-postgres/src/errors.rs @@ -33,6 +33,8 @@ pub fn map_register_err(e: Error) -> DBError { DBError::EmailTaken } else if msg.contains("mcaptcha_users_secret_key") { DBError::SecretTaken + } else if msg.contains("mcaptcha_config_key_key") { + DBError::CaptchaKeyTaken } else { DBError::DBError(Box::new(Error::Database(err))) } diff --git a/db/db-sqlx-postgres/src/lib.rs b/db/db-sqlx-postgres/src/lib.rs index df9c285a..b755c008 100644 --- a/db/db-sqlx-postgres/src/lib.rs +++ b/db/db-sqlx-postgres/src/lib.rs @@ -278,6 +278,23 @@ impl MCDatabase for Database { .map_err(map_register_err)?; Ok(()) } + + /// create new captcha + async fn create_captcha(&self, username: &str, p: &CreateCaptcha) -> DBResult<()> { + sqlx::query!( + "INSERT INTO mcaptcha_config + (key, user_id, duration, name) + VALUES ($1, (SELECT ID FROM mcaptcha_users WHERE name = $2), $3, $4)", + p.key, + username, + p.duration as i32, + p.description, + ) + .execute(&self.pool) + .await + .map_err(map_register_err)?; + Ok(()) + } } fn now_unix_time_stamp() -> i64 { diff --git a/db/db-sqlx-postgres/src/tests.rs b/db/db-sqlx-postgres/src/tests.rs index 49da6461..e2e44e97 100644 --- a/db/db-sqlx-postgres/src/tests.rs +++ b/db/db-sqlx-postgres/src/tests.rs @@ -29,6 +29,10 @@ async fn everyting_works() { const NAME: &str = "postgresuser"; const PASSWORD: &str = "pasdfasdfasdfadf"; const SECRET1: &str = "postgressecret1"; + // captcha config + const CAPTCHA_SECRET: &str = "postgrescaptchasecret"; + const CAPTCHA_DESCRIPTION: &str = "postgrescaptchadescription"; + const CAPTCHA_DURATION: i32 = 30; let url = env::var("POSTGRES_DATABASE_URL").unwrap(); let pool_options = PgPoolOptions::new().max_connections(2); @@ -42,5 +46,11 @@ async fn everyting_works() { hash: PASSWORD, secret: SECRET1, }; - database_works(&db, &p).await; + + let c = CreateCaptcha { + duration: CAPTCHA_DURATION, + key: CAPTCHA_SECRET, + description: CAPTCHA_DESCRIPTION, + }; + database_works(&db, &p, &c).await; }