about summary refs log tree commit diff stats
path: root/crates/rocie-server/src/api/get/no_auth/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rocie-server/src/api/get/no_auth/state.rs')
-rw-r--r--crates/rocie-server/src/api/get/no_auth/state.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/crates/rocie-server/src/api/get/no_auth/state.rs b/crates/rocie-server/src/api/get/no_auth/state.rs
new file mode 100644
index 0000000..31cbfa5
--- /dev/null
+++ b/crates/rocie-server/src/api/get/no_auth/state.rs
@@ -0,0 +1,41 @@
+use actix_identity::Identity;
+use actix_web::{HttpResponse, Responder, Result, get, web};
+
+use crate::{app::App, storage::sql::user::User};
+
+/// Check if you are logged in
+#[utoipa::path(
+    responses(
+        (
+            status = OK,
+            description = "User login state checked",
+            body = bool
+        )
+    )
+)]
+#[get("/is-logged-in")]
+pub(crate) async fn is_logged_in(user: Option<Identity>) -> impl Responder {
+    HttpResponse::Ok().json(user.is_some())
+}
+
+/// Check if the server can be provisioned
+#[utoipa::path(
+    responses(
+        (
+            status = OK,
+            description = "Provisioning state checked",
+            body = bool
+        ),
+        (
+            status = INTERNAL_SERVER_ERROR,
+            description = "Server encountered error",
+            body = String
+        )
+    )
+)]
+#[get("/can-be-provisioned")]
+pub(crate) async fn can_be_provisioned(app: web::Data<App>) -> Result<impl Responder> {
+    let users = User::get_all(&app).await?;
+
+    Ok(HttpResponse::Ok().json(users.is_empty()))
+}