summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-10-06 19:41:34 -0400
committerKjetil Orbekk <kj@orbekk.com>2022-10-06 19:41:34 -0400
commit806faef4b75173892ecea4ccd4a14178320c89a4 (patch)
treeb77b07d5f353504580a158864c2098b46a4e038e
parent49a8ffab0c1fbac3f683d6fd186aec4b2bf8b0a0 (diff)
Serve webapp from backend
-rw-r--r--server/.env1
-rw-r--r--server/src/main.rs36
2 files changed, 22 insertions, 15 deletions
diff --git a/server/.env b/server/.env
index 4609cab..14d8663 100644
--- a/server/.env
+++ b/server/.env
@@ -1,2 +1,3 @@
RUST_LOG=info
ROCKET_PROFILE=development
+WEBAPP_PATH=../webapp/dist/ \ No newline at end of file
diff --git a/server/src/main.rs b/server/src/main.rs
index 3c8409a..0e9fa84 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -1,15 +1,16 @@
#[macro_use]
extern crate rocket;
-use std::result::Result;
use chrono::{DateTime, Utc};
+use rocket::fs::FileServer;
use rocket::http::uri::Reference;
-use rocket::http::{Cookie, CookieJar,Status};
-use rocket::response::Redirect;
+use rocket::http::{Cookie, CookieJar, Status};
+use rocket::outcome::Outcome;
use rocket::request::{self, FromRequest};
+use rocket::response::Redirect;
use rocket::Request;
use serde::{Deserialize, Serialize};
-use rocket::outcome::Outcome;
+use std::result::Result;
use openidconnect::core::{
CoreAuthenticationFlow, CoreClient, CoreProviderMetadata, CoreResponseType, CoreUserInfoClaims,
@@ -34,17 +35,22 @@ struct User {}
impl User {
async fn from_request_helper(req: &Request<'_>) -> Result<User, anyhow::Error> {
- let cookie = req.cookies().get_private(USER_COOKIE).ok_or(
- anyhow::anyhow!("no cookie"))?;
+ let cookie = req
+ .cookies()
+ .get_private(USER_COOKIE)
+ .ok_or(anyhow::anyhow!("no cookie"))?;
let user_cookie: UserCookie = serde_json::from_str(cookie.value())?;
let client = keycloak_client().await;
- let token = client.exchange_refresh_token(&user_cookie.refresh_token)
- .request_async(async_http_client).await?;
- let user_info: CoreUserInfoClaims = client.user_info(token.access_token().clone(), None)?
- .request_async(async_http_client)
- .await?;
- log::info!("Got user_info: {:?}", user_info);
+ let token = client
+ .exchange_refresh_token(&user_cookie.refresh_token)
+ .request_async(async_http_client)
+ .await?;
+ let user_info: CoreUserInfoClaims = client
+ .user_info(token.access_token().clone(), None)?
+ .request_async(async_http_client)
+ .await?;
+ log::info!("Got user_info: {:?}", user_info);
Ok(User {})
}
}
@@ -146,11 +152,11 @@ async fn keycloak_callback(jar: &CookieJar<'_>, code: &str, state: &str) -> Redi
async fn main() -> Result<(), anyhow::Error> {
dotenv::dotenv().ok();
env_logger::init();
- log::debug!("hello");
rocket::build()
- .mount("/", routes![index, login, keycloak_callback])
+ .mount("/api", routes![index, login, keycloak_callback])
+ .mount("/", FileServer::from(std::env::var("WEBAPP_PATH").unwrap()))
.launch()
- .await;
+ .await?;
Ok(())
}