bom/network/server/Login.gd
2024-01-22 23:41:48 +01:00

56 lines
1.1 KiB
GDScript

extends PacketHandler
enum {
SUCCESS = 0,
FAIL = 1,
}
var accounts := {
"user1": Account.new("password"),
"user2": Account.new("password"),
}
func _ready():
%Server.set_handler(Packet.LOGIN, self)
func handle_packet(data: PackedByteArray, peer: PacketPeer):
var client = %Server.peer_to_client(peer)
if client.is_logged_in():
return
var data_string = data.get_string_from_utf8()
var login_request = JSON.parse_string(data_string)
if login_request.size() < 2:
fail_login(peer)
return
var username = login_request[0]
var password = login_request[1]
if !accounts.has(username):
fail_login(peer)
return
if accounts[username].password != password:
fail_login(peer)
return
client.auth_token = generate_auth_token()
var buffer := StreamPeerBuffer.new()
buffer.put_8(Packet.LOGIN)
buffer.put_8(SUCCESS)
buffer.put_data(client.auth_token.to_ascii_buffer())
peer.put_packet(buffer.data_array)
func fail_login(peer: PacketPeer):
var buffer := StreamPeerBuffer.new()
buffer.put_8(Packet.LOGIN)
buffer.put_8(FAIL)
peer.put_packet(buffer.data_array)
func generate_auth_token() -> String:
return "secret"