|
|
@@ -0,0 +1,35 @@
|
|
|
+use actix_web::{HttpResponse, web, post};
|
|
|
+use serde::Deserialize;
|
|
|
+use sqlx::PgPool;
|
|
|
+use uuid::Uuid;
|
|
|
+use serde_json::json;
|
|
|
+use crate::{
|
|
|
+ app_error::AppError,
|
|
|
+ logic::compare_password,
|
|
|
+ models::{
|
|
|
+ user::User,
|
|
|
+ home::Home
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+#[derive(Deserialize)]
|
|
|
+struct Body {
|
|
|
+ email: String,
|
|
|
+ password: String
|
|
|
+}
|
|
|
+
|
|
|
+#[post("/home/{home_id}/apikey")]
|
|
|
+pub async fn route(
|
|
|
+ db: web::Data<PgPool>,
|
|
|
+ params: web::Path<String>,
|
|
|
+ body: web::Json<Body>
|
|
|
+) -> Result<HttpResponse, AppError> {
|
|
|
+ let body = body.into_inner();
|
|
|
+ let email = body.email.to_lowercase();
|
|
|
+ let user = User::find_one_by_email(&db, &email).await?;
|
|
|
+ compare_password(&body.password, &user.pass_hash)?;
|
|
|
+ let home_id = Uuid::parse_str(¶ms.into_inner())?;
|
|
|
+ let new_key = Uuid::now_v7();
|
|
|
+ Home::update_api_key(&db, home_id, new_key).await?;
|
|
|
+ Ok(HttpResponse::Ok().json(json!({"success": true})))
|
|
|
+}
|