Auth fixes (#664)
* Auth fixes * destroy flows after use * fix comp err * add bearer err msg
This commit is contained in:
parent
039d26feeb
commit
ca0468b8d5
@ -1197,6 +1197,7 @@ pub async fn login_from_minecraft(
|
|||||||
access_token: token,
|
access_token: token,
|
||||||
}) = flow
|
}) = flow
|
||||||
{
|
{
|
||||||
|
Flow::remove(&login.flow, &redis).await?;
|
||||||
let provider = AuthProvider::Microsoft;
|
let provider = AuthProvider::Microsoft;
|
||||||
let oauth_user = provider.get_user(&token).await?;
|
let oauth_user = provider.get_user(&token).await?;
|
||||||
let user_id_opt = provider.get_user_id(&oauth_user.id, &**client).await?;
|
let user_id_opt = provider.get_user_id(&oauth_user.id, &**client).await?;
|
||||||
|
|||||||
@ -64,6 +64,12 @@ pub async fn route(
|
|||||||
x.value_mut().clone()
|
x.value_mut().clone()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ws_conn_try!(
|
||||||
|
"Removing login flow" StatusCode::INTERNAL_SERVER_ERROR,
|
||||||
|
Flow::remove(code, &redis).await
|
||||||
|
=> ws_conn
|
||||||
|
);
|
||||||
|
|
||||||
let access_token = ws_conn_try!(
|
let access_token = ws_conn_try!(
|
||||||
"OAuth token exchange" StatusCode::INTERNAL_SERVER_ERROR,
|
"OAuth token exchange" StatusCode::INTERNAL_SERVER_ERROR,
|
||||||
stages::access_token::fetch_token(
|
stages::access_token::fetch_token(
|
||||||
@ -122,7 +128,7 @@ pub async fn route(
|
|||||||
let flow = &ws_conn_try!(
|
let flow = &ws_conn_try!(
|
||||||
"Error creating microsoft login request flow." StatusCode::INTERNAL_SERVER_ERROR,
|
"Error creating microsoft login request flow." StatusCode::INTERNAL_SERVER_ERROR,
|
||||||
Flow::MicrosoftLogin {
|
Flow::MicrosoftLogin {
|
||||||
access_token: bearer_token.clone(),
|
access_token: access_token.access_token.clone(),
|
||||||
}
|
}
|
||||||
.insert(Duration::hours(1), &redis)
|
.insert(Duration::hours(1), &redis)
|
||||||
.await
|
.await
|
||||||
|
|||||||
@ -22,6 +22,6 @@ pub async fn fetch_bearer(token: &str, uhs: &str) -> Result<String, Authenticati
|
|||||||
.and_then(serde_json::Value::as_str)
|
.and_then(serde_json::Value::as_str)
|
||||||
.map(String::from)
|
.map(String::from)
|
||||||
.ok_or(AuthenticationError::Custom(
|
.ok_or(AuthenticationError::Custom(
|
||||||
"Response didn't contain valid bearer token".to_string(),
|
format!("Response didn't contain valid bearer token. body: {body}"),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,6 @@ use crate::ratelimit::memory::{MemoryStore, MemoryStoreActor};
|
|||||||
use crate::ratelimit::middleware::RateLimiter;
|
use crate::ratelimit::middleware::RateLimiter;
|
||||||
use crate::util::cors::default_cors;
|
use crate::util::cors::default_cors;
|
||||||
use crate::util::env::{parse_strings_from_var, parse_var};
|
use crate::util::env::{parse_strings_from_var, parse_var};
|
||||||
use actix_files::Files;
|
|
||||||
use actix_web::{web, App, HttpServer};
|
use actix_web::{web, App, HttpServer};
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use deadpool_redis::{Config, Runtime};
|
use deadpool_redis::{Config, Runtime};
|
||||||
@ -414,10 +413,9 @@ async fn main() -> std::io::Result<()> {
|
|||||||
.app_data(web::Data::new(clickhouse.clone()))
|
.app_data(web::Data::new(clickhouse.clone()))
|
||||||
.app_data(web::Data::new(reader.clone()))
|
.app_data(web::Data::new(reader.clone()))
|
||||||
.app_data(active_sockets.clone())
|
.app_data(active_sockets.clone())
|
||||||
.configure(routes::root_config)
|
|
||||||
.configure(routes::v2::config)
|
.configure(routes::v2::config)
|
||||||
.configure(routes::v3::config)
|
.configure(routes::v3::config)
|
||||||
.service(Files::new("/", "assets/"))
|
.configure(routes::root_config)
|
||||||
.default_service(web::get().wrap(default_cors()).to(routes::not_found))
|
.default_service(web::get().wrap(default_cors()).to(routes::not_found))
|
||||||
})
|
})
|
||||||
.bind(dotenvy::var("BIND_ADDR").unwrap())?
|
.bind(dotenvy::var("BIND_ADDR").unwrap())?
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
use actix_web::HttpResponse;
|
use actix_web::{get, HttpResponse};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
|
||||||
|
#[get("/")]
|
||||||
pub async fn index_get() -> HttpResponse {
|
pub async fn index_get() -> HttpResponse {
|
||||||
let data = json!({
|
let data = json!({
|
||||||
"name": "modrinth-labrinth",
|
"name": "modrinth-labrinth",
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
use crate::file_hosting::FileHostingError;
|
use crate::file_hosting::FileHostingError;
|
||||||
use crate::util::cors::default_cors;
|
use crate::util::cors::default_cors;
|
||||||
|
use actix_files::Files;
|
||||||
use actix_web::http::StatusCode;
|
use actix_web::http::StatusCode;
|
||||||
use actix_web::{web, HttpResponse};
|
use actix_web::{web, HttpResponse};
|
||||||
use futures::FutureExt;
|
use futures::FutureExt;
|
||||||
@ -15,7 +16,6 @@ mod updates;
|
|||||||
pub use self::not_found::not_found;
|
pub use self::not_found::not_found;
|
||||||
|
|
||||||
pub fn root_config(cfg: &mut web::ServiceConfig) {
|
pub fn root_config(cfg: &mut web::ServiceConfig) {
|
||||||
cfg.route("", web::get().wrap(default_cors()).to(index::index_get));
|
|
||||||
cfg.service(
|
cfg.service(
|
||||||
web::scope("maven")
|
web::scope("maven")
|
||||||
.wrap(default_cors())
|
.wrap(default_cors())
|
||||||
@ -39,6 +39,12 @@ pub fn root_config(cfg: &mut web::ServiceConfig) {
|
|||||||
}.boxed_local()
|
}.boxed_local()
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
cfg.service(
|
||||||
|
web::scope("")
|
||||||
|
.wrap(default_cors())
|
||||||
|
.service(index::index_get)
|
||||||
|
.service(Files::new("/", "assets/")),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(thiserror::Error, Debug)]
|
#[derive(thiserror::Error, Debug)]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user