Added mojang authentication
This commit is contained in:
parent
149a3acc1d
commit
852934cd84
|
@ -8,7 +8,8 @@ license = "MIT"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
purple_cello_mc_protocol = { git = "https://github.com/PurpleCelloServer/purple_cello_mc_protocol.git", rev = "9ff2e95c66b1d773362936733273350e4bdd399a" }
|
purple_cello_mc_protocol = { git = "https://github.com/PurpleCelloServer/purple_cello_mc_protocol.git", rev = "196592ae78e3878843c3dea99323c1477da6d380" }
|
||||||
|
purple_cello_mojang_api = { git = "https://github.com/PurpleCelloServer/mojang_api.git", rev = "08848a0a95b338bdaead303ac646cb3347cf1af6" }
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
|
|
|
@ -13,6 +13,8 @@ use purple_cello_mc_protocol::{
|
||||||
login,
|
login,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use purple_cello_mojang_api::multiplayer_auth;
|
||||||
|
|
||||||
use crate::listener;
|
use crate::listener;
|
||||||
|
|
||||||
const EXPIRATION_DURATION: Duration = Duration::from_secs(3600);
|
const EXPIRATION_DURATION: Duration = Duration::from_secs(3600);
|
||||||
|
@ -162,23 +164,30 @@ purplecelloserver@gmail.com".to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn check_player_online(
|
async fn check_player(
|
||||||
proxy_info: &listener::ProxyInfo,
|
proxy_info: &listener::ProxyInfo,
|
||||||
player: Player,
|
player: Player,
|
||||||
client_conn: &mut ProtocolConnection<'_>,
|
client_conn: &mut ProtocolConnection<'_>,
|
||||||
) -> Result<PlayerAllowed> {
|
) -> Result<PlayerAllowed> {
|
||||||
let encryption_request = client_conn.create_encryption_request(
|
match proxy_info.online_status {
|
||||||
proxy_info.private_key.clone())?;
|
listener::OnlineStatus::Online => {
|
||||||
encryption_request.write(client_conn).await?;
|
let encryption_request = client_conn.create_encryption_request(
|
||||||
let encryption_response =
|
proxy_info.private_key.clone())?;
|
||||||
login::serverbound::EncryptionResponse::read(client_conn).await?;
|
encryption_request.write(client_conn).await?;
|
||||||
client_conn.handle_encryption_response(encryption_response)?;
|
let encryption_response =
|
||||||
// TODO: Make authentication verification request
|
login::serverbound::EncryptionResponse::read(client_conn).await?;
|
||||||
Ok(check_player_whitelist(player))
|
client_conn.handle_encryption_response(encryption_response)?;
|
||||||
}
|
let server_id = client_conn.server_id_hash().await?;
|
||||||
|
match multiplayer_auth::joined(&player.name, &server_id, None).await {
|
||||||
fn check_player_offline(player: Player) -> Result<PlayerAllowed> {
|
Ok(_) => Ok(check_player_whitelist(player)),
|
||||||
Ok(check_player_whitelist(player))
|
Err(_) =>
|
||||||
|
Ok(PlayerAllowed::False(
|
||||||
|
"Mojang Authentication Failed".to_string())),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
listener::OnlineStatus::Offline =>
|
||||||
|
Ok(check_player_whitelist(player)),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn respond_login(
|
pub async fn respond_login(
|
||||||
|
@ -222,12 +231,7 @@ async fn login_to_proxy(
|
||||||
player_uuid: start_packet.player_uuid,
|
player_uuid: start_packet.player_uuid,
|
||||||
};
|
};
|
||||||
|
|
||||||
match proxy_info.online_status {
|
check_player(proxy_info, player, client_conn).await
|
||||||
listener::OnlineStatus::Online =>
|
|
||||||
check_player_online(proxy_info, player, client_conn).await,
|
|
||||||
listener::OnlineStatus::Offline =>
|
|
||||||
check_player_offline(player),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn login_to_backend(
|
async fn login_to_backend(
|
||||||
|
|
Loading…
Reference in New Issue