Skip to content

Commit 6f19596

Browse files
feat: Added checking unsupported 1.19 versions
1 parent 16d1b8d commit 6f19596

File tree

7 files changed

+49
-14
lines changed

7 files changed

+49
-14
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
/Cargo.lock
33
/out
44
/.vscode/settings.json
5-
/server_icon.png
5+
/server_icon.png
6+
/config.toml

config.example.toml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
[api]
2+
addr = "0.0.0.0"
3+
port = 8008
4+
code_life_time = 300
5+
6+
[server]
7+
addr = "0.0.0.0"
8+
port = 25566
9+
timeout = 20
10+
server_ip = "localhost"
11+
12+
[server.config]
13+
server_name = "mc-oauth-rs"
14+
protocol = 0
15+
version = "1.21"
16+
auth_url = "https://sessionserver.mojang.com/session/minecraft/hasJoined?username={{NAME}}&serverId={{HASH}}"
17+
18+
[server.status]
19+
description = "§6mc-oauth.andcool.ru"
20+
players_max = 0
21+
players_online = 0
22+
icon_path = "server_icon.png"
23+
24+
[messages]
25+
success = "Hello, §6{{NAME}}§r! Your code is: §a{{CODE}}"
26+
bad_session = "§cFailed to login: Invalid session (Try restarting your game and the launcher)"
27+
using_proxy = "§cYou are using a proxy!"

src/handlers/handshake.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ impl MinecraftServer {
1414
pub async fn handle_handshake(&mut self) -> Result<()> {
1515
let handshake = HandshakePacket::parse(&mut self.buffer)?;
1616

17-
self.session.proto_ver = Some(handshake.proto_ver);
17+
self.session.proto_ver = handshake.proto_ver;
1818
self.session.next_state = match handshake.next_state {
1919
1 => NextStateEnum::Status,
2020
2 => NextStateEnum::Login,

src/handlers/login_start.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
use crate::{packets::login_start::LoginStartPacket, server::MinecraftServer};
2+
use anyhow::Error;
23

34
impl MinecraftServer {
45
/**
56
Handle login start packet from client
67
*/
7-
pub fn handle_login_start(&mut self) -> anyhow::Result<()> {
8+
pub async fn handle_login_start(&mut self) -> anyhow::Result<()> {
89
let packet = LoginStartPacket::parse(&mut self.buffer)?;
910
self.session.nickname = Some(packet.name);
1011
self.session.uuid = packet.uuid;
12+
13+
if self.session.proto_ver >= 759 && self.session.proto_ver <= 762 {
14+
self.send_disconnect(
15+
"Sorry, Minecraft 1.19.* clients not supported yet.\nTry using another version of client."
16+
.to_string(),
17+
)
18+
.await?;
19+
return Err(Error::msg("Client using unsupported version!"));
20+
}
1121
Ok(())
1222
}
1323
}

src/responses/encryption.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ impl MinecraftServer {
1010
pub async fn send_encryption(&mut self) -> Result<()> {
1111
let public_der = self.keys.to_public_key().to_public_key_der()?.into_vec();
1212

13-
let proto_ver = match self.session.proto_ver {
14-
Some(x) => x,
15-
None => unreachable!(),
13+
let should_authenticate = if self.session.proto_ver >= 766 {
14+
Some(true)
15+
} else {
16+
None
1617
};
17-
let should_authenticate = if proto_ver >= 766 { Some(true) } else { None };
1818

1919
let packet = EncryptionRequestPacket::new(
2020
self.session.server_id.clone(),

src/responses/status.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ impl MinecraftServer {
1414
pub async fn send_status(&mut self) -> Result<()> {
1515
let config = get_config().await;
1616
let proto_ver = if config.server.config.protocol == 0 {
17-
match self.session.proto_ver {
18-
Some(x) => x,
19-
None => unreachable!(),
20-
}
17+
self.session.proto_ver
2118
} else {
2219
config.server.config.protocol
2320
};

src/server.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub enum NextStateEnum {
2424
#[derive(Debug)]
2525
pub struct Session {
2626
pub server_id: String,
27-
pub proto_ver: Option<usize>,
27+
pub proto_ver: usize,
2828
pub next_state: NextStateEnum,
2929
pub nickname: Option<String>,
3030
pub uuid: Option<Uuid>,
@@ -40,7 +40,7 @@ impl Session {
4040

4141
Self {
4242
server_id: config.server.config.server_name.clone(),
43-
proto_ver: None,
43+
proto_ver: 0,
4444
next_state: NextStateEnum::Unknown,
4545
nickname: None,
4646
uuid: None,
@@ -128,7 +128,7 @@ impl MinecraftServer {
128128
NextStateEnum::Status => self.send_status().await?, // Send status response
129129
NextStateEnum::Login => {
130130
// Handle login start
131-
self.handle_login_start()?;
131+
self.handle_login_start().await?;
132132
self.send_encryption().await?;
133133
}
134134
NextStateEnum::Unknown => self.handle_handshake().await?, // Handle handshake

0 commit comments

Comments
 (0)