init projectmycelium
This commit is contained in:
65
src/config/oauth.rs
Normal file
65
src/config/oauth.rs
Normal file
@@ -0,0 +1,65 @@
|
||||
use oauth2::{basic::BasicClient, AuthUrl, ClientId, ClientSecret, RedirectUrl, TokenUrl};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use crate::config::get_app_config;
|
||||
|
||||
/// Gitea OAuth configuration
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct GiteaOAuthConfig {
|
||||
/// OAuth client
|
||||
pub client: BasicClient,
|
||||
/// Gitea instance URL
|
||||
pub instance_url: String,
|
||||
}
|
||||
|
||||
impl GiteaOAuthConfig {
|
||||
/// Creates a new Gitea OAuth configuration
|
||||
pub fn new() -> Self {
|
||||
// Get configuration from centralized ConfigurationBuilder
|
||||
let config = get_app_config();
|
||||
|
||||
let client_id = config.gitea_client_id()
|
||||
.expect("Missing GITEA_CLIENT_ID environment variable").to_string();
|
||||
let client_secret = config.gitea_client_secret()
|
||||
.expect("Missing GITEA_CLIENT_SECRET environment variable").to_string();
|
||||
let instance_url = config.gitea_instance_url()
|
||||
.expect("Missing GITEA_INSTANCE_URL environment variable").to_string();
|
||||
|
||||
// Create OAuth client
|
||||
let auth_url = format!("{}/login/oauth/authorize", instance_url);
|
||||
let token_url = format!("{}/login/oauth/access_token", instance_url);
|
||||
|
||||
let client = BasicClient::new(
|
||||
ClientId::new(client_id),
|
||||
Some(ClientSecret::new(client_secret)),
|
||||
AuthUrl::new(auth_url).unwrap(),
|
||||
Some(TokenUrl::new(token_url).unwrap()),
|
||||
)
|
||||
.set_redirect_uri(
|
||||
RedirectUrl::new(format!(
|
||||
"{}/auth/gitea/callback",
|
||||
config.app_url()
|
||||
))
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
Self {
|
||||
client,
|
||||
instance_url,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Gitea user information structure
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub struct GiteaUser {
|
||||
/// User ID
|
||||
pub id: i64,
|
||||
/// Username
|
||||
pub login: String,
|
||||
/// Full name
|
||||
pub full_name: String,
|
||||
/// Email address
|
||||
pub email: String,
|
||||
/// Avatar URL
|
||||
pub avatar_url: String,
|
||||
}
|
Reference in New Issue
Block a user