feat: add server list page

This commit is contained in:
2025-12-25 23:57:47 +01:00
parent e7fe00c48d
commit c07d6072fd
18 changed files with 2193 additions and 692 deletions

View File

@@ -1,9 +1,8 @@
use std::{env, str::FromStr, sync::Mutex, time::Duration};
use sqlx::{
ConnectOptions, Sqlite, SqlitePool,
pool::PoolConnection,
sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions, SqliteSynchronous},
SqlitePool,
sqlite::{SqliteConnectOptions, SqliteJournalMode, SqliteSynchronous},
};
static DATABASE_POOL: Mutex<Option<SqlitePool>> = Mutex::new(None);

View File

@@ -19,14 +19,15 @@ pub async fn get_access_token() -> Result<String, Box<dyn Error>> {
let pool = db::get_pool().await?;
let tok = query!("SELECT * FROM tokens WHERE is_refresh = 0 ORDER BY expires_at DESC LIMIT 1")
.fetch_one(&pool)
.await?
.token;
.await?;
Ok(tok)
dbg!(&tok);
Ok(tok.token)
}
pub async fn get_authed_api_config() -> Result<configuration::Configuration, Box<dyn Error>> {
let mut conf = configuration::Configuration::default();
conf.bearer_access_token = Some(get_access_token().await?);
Ok(conf)
}

View File

@@ -8,11 +8,13 @@ use crate::{auth, db};
pub fn init_scheduler(rt: Handle) -> Scheduler {
let scheduler = Scheduler::new();
let trigger_every_5min =
Trigger::with_identity("5min_trigger", "default_group").every(Duration::from_mins(5));
let trigger_every_5min = Trigger::with_identity("5min_trigger", "default_group")
.every(Duration::from_mins(5))
.repeat(u32::max_value());
let trigger_every_3min =
Trigger::with_identity("3min_trigger", "default_group").every(Duration::from_mins(3));
let trigger_every_3min = Trigger::with_identity("3min_trigger", "default_group")
.every(Duration::from_mins(3))
.repeat(u32::max_value());
let rt_cleanup = rt.clone();
let cleanup_tokens_job = Job::with_identity("cleanup_tokens_job", "default_group", move || {

View File

@@ -10,6 +10,7 @@ mod db;
mod helper;
mod jobs;
mod models;
mod servers;
#[get("/api/hello")]
async fn hello() -> impl Responder {
@@ -47,6 +48,7 @@ async fn main() -> std::io::Result<()> {
.service(auth::is_scp_logged_in)
.service(auth::start_flow)
.service(auth::get_user)
.service(servers::list_servers)
.service(
Files::new("/", "./frontend/dist")
.index_file("index.html")

14
src/servers.rs Normal file
View File

@@ -0,0 +1,14 @@
use actix_web::{Responder, get};
use crate::helper;
#[get("/api/servers")]
pub async fn list_servers() -> impl Responder {
let config = helper::get_authed_api_config().await.unwrap();
let response =
scp_core::apis::default_api::api_v1_servers_get(&config, None, None, None, None, None)
.await
.unwrap();
serde_json::to_string(&response).unwrap()
}