diff --git a/README.md b/README.md index b30af91..e44061b 100644 --- a/README.md +++ b/README.md @@ -11,28 +11,44 @@ Create a OAuth client at [google](https://console.cloud.google.com/) Create vapid keys for webpush this can be done via `npx web-push generate-vapid-keys` ```dotenv -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= +#Nuxt +NUXT_GOOGLE_CLIENT_ID= +NUXT_GOOGLE_CLIENT_SECRET= BETTER_AUTH_URL=http://localhost:3000 NUXT_PUBLIC_WEBPUSH_PUBLIC_KEY= -WEBPUSH_PRIVATE_KEY= + +#APi +API_WEBPUSH_PRIVATE_KEY= ``` -### Deployment +run `pnpm dev` to start the nuxt dev server\ +in /api run `cargo run` to start the api server + +### All ```dotenv -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= +# Nuxt +NUXT_GOOGLE_CLIENT_ID= +NUXT_GOOGLE_CLIENT_SECRET= NUXT_UPSTASH_URL= NUXT_UPSTASH_TOKEN= BETTER_AUTH_SECRET= BETTER_AUTH_URL= +BETTER_AUTH_DATABASE_PATH= NUXT_PUBLIC_WEBPUSH_PUBLIC_KEY= -WEBPUSH_PRIVATE_KEY= -NUXT_WEBPUSH_MAIL= + +NUXT_PUBLIC_API_BASE= + +# Api +API_WEBPUSH_PRIVATE_KEY= + +API_DATABASE_URL= + +API_AUTH_API_BASE= +API_SELF_API_BASE= ``` diff --git a/api/src/lib.rs b/api/src/lib.rs index a5128f7..8655f9b 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -44,8 +44,8 @@ pub async fn app( db_url: &str, test_user: Option, web_push_key: Option, - auth_api_base: Option, - self_api_base: Option, + auth_api_base: String, + self_api_base: String, ) -> eyre::Result { let state = AppState { db_connection: init_db(db_url).await?, @@ -53,8 +53,8 @@ pub async fn app( test_user, constants: Constants { web_push_key, - auth_api_base: auth_api_base.unwrap_or_else(|| "http://localhost:3000".to_string()), - self_api_base: self_api_base.unwrap_or_else(|| "http://localhost:8080".to_string()), + auth_api_base, + self_api_base, }, jwks_cache: JwksCache::default(), }; diff --git a/api/src/main.rs b/api/src/main.rs index 737b57e..122bcbd 100644 --- a/api/src/main.rs +++ b/api/src/main.rs @@ -8,20 +8,20 @@ async fn main() -> eyre::Result<()> { tracing_subscriber::fmt().with_max_level(Level::INFO).init(); dotenvy::dotenv().ok(); - let db_url = - env::var("DATABASE_URL").unwrap_or("sqlite://../.data/data_db.sqlite?mode=rwc".to_string()); - let port = env::var("PORT").unwrap_or("8080".to_string()); + let db_url = env( + "API_DATABASE_URL", + "sqlite://../.data/data_db.sqlite?mode=rwc", + ); - let web_push_key = env::var("WEBPUSH_PRIVATE_KEY").ok(); + let web_push_key = env::var("API_WEBPUSH_PRIVATE_KEY").ok(); - let auth_api_base = env::var("AUTH_API_BASE").ok(); - let self_api_base = env::var("SELF_API_BASE").ok(); - - info!("Starting server on port {}", port); + let auth_api_base = env("API_AUTH_API_BASE", "http://localhost:3000"); + let self_api_base = env("API_SELF_API_BASE", "http://localhost:8080"); let app = app(&db_url, None, web_push_key, auth_api_base, self_api_base).await?; - let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{port}")) + info!("Starting server"); + let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:8080")) .await .expect("failed to bind listener"); @@ -29,3 +29,7 @@ async fn main() -> eyre::Result<()> { Ok(()) } + +fn env(key: &str, default: &str) -> String { + env::var(key).unwrap_or(default.to_string()) +} diff --git a/api/tests/common/client.rs b/api/tests/common/client.rs index 258b634..d62555d 100644 --- a/api/tests/common/client.rs +++ b/api/tests/common/client.rs @@ -132,8 +132,8 @@ pub async fn get_client() -> Client { "sqlite://../.data/data_db.sqlite?mode=rwc", Some(user), None, - None, - None, + "http://localhost:3000".to_string(), + "http://localhost:8080".to_string(), ) .await .unwrap(); diff --git a/app/composables/useInitData.ts b/app/composables/useInitData.ts index 8adbfeb..b0764db 100644 --- a/app/composables/useInitData.ts +++ b/app/composables/useInitData.ts @@ -41,7 +41,7 @@ export async function useInitdata(id: Ref) { if (id.value) Init.all(); else reset(); }); - }, 100); + }, 1000); }); await callOnce(async () => { diff --git a/server/plugins/configValidation.ts b/server/plugins/configValidation.ts index aa6f331..988173e 100644 --- a/server/plugins/configValidation.ts +++ b/server/plugins/configValidation.ts @@ -3,20 +3,16 @@ export default defineNitroPlugin(() => { const missing: string[] = []; - if (!config.webpush.privateKey) { - missing.push("NUXT_WEBPUSH_PRIVATE_KEY"); - } - if (!config.public.webpush.publicKey) { missing.push("NUXT_PUBLIC_WEBPUSH_PUBLIC_KEY"); } - if (!process.env.GOOGLE_CLIENT_ID) { - missing.push("GOOGLE_CLIENT_ID"); + if (!process.env.NUXT_GOOGLE_CLIENT_ID) { + missing.push("NUXT_GOOGLE_CLIENT_ID"); } - if (!process.env.GOOGLE_CLIENT_SECRET) { - missing.push("GOOGLE_CLIENT_SECRET"); + if (!process.env.NUXT_GOOGLE_CLIENT_SECRET) { + missing.push("NUXT_GOOGLE_CLIENT_SECRET"); } if (missing.length > 0) { diff --git a/server/utils/auth.ts b/server/utils/auth.ts index a508a52..9572ee4 100644 --- a/server/utils/auth.ts +++ b/server/utils/auth.ts @@ -4,15 +4,17 @@ import { betterAuth } from "better-auth"; import { jwt, testUtils } from "better-auth/plugins"; export const auth = betterAuth({ - database: new DatabaseSync("./.data/sqlite.db"), + database: new DatabaseSync( + process.env.BETTER_AUTH_DATABASE_PATH ?? "./.data/sqlite.db", + ), session: { expiresIn: 3600 * 24 * 30, // 30 days updateAge: 3600 * 24, // 1 day }, socialProviders: { google: { - clientId: process.env.GOOGLE_CLIENT_ID!, - clientSecret: process.env.GOOGLE_CLIENT_SECRET!, + clientId: process.env.NUXT_GOOGLE_CLIENT_ID!, + clientSecret: process.env.NUXT_GOOGLE_CLIENT_SECRET!, prompt: "select_account", }, },