kpmpgsmkii/server/src/client/login.c

65 lines
2.2 KiB
C

/*
* Kangaroo Punch MultiPlayer Game Server Mark II
* Copyright (C) 2020-2021 Scott Duensing
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "rest.h"
#include "login.h"
void clientApiLogin(ClientThreadT *client, PacketDecodeDataT *data) {
char *packetData = NULL;
char *user = NULL;
char *pass = NULL;
PacketEncodeDataT encoded = { 0 };
json_object *response = NULL;
uint8_t result = 0;
char *string = NULL;
char *buffer = NULL;
uint16_t length = 0;
packetContentUnpack(data->data, "ss", &user, &pass);
response = restRequest("USER_LOGIN", "ss",
"user", user,
"pass", pass
);
DEL(user);
DEL(pass);
if (response) {
string = (char *)json_object_get_string(json_object_object_get(response, "result"));
result = (string[0] == 't' || string[0] == 'T') ? 1 : 0;
buffer = (char *)json_object_get_string(json_object_object_get(response, "reason"));
} else {
// Something bad happened.
result = 0;
buffer = "Unknown error. Sorry.";
}
logWrite("Login: %d %s\r\n", result, buffer);
packetData = packetContentPack(&length, "is", result, buffer);
if (response) restRelease(response);
// Build packet.
encoded.control = PACKET_CONTROL_DAT;
encoded.packetType = PACKET_TYPE_LOGIN_RESULT;
encoded.channel = data->channel;
encoded.encrypt = 0;
packetEncode(client->packetThreadData, &encoded, packetData, length);
// Send it.
packetSend(client->packetThreadData, &encoded);
DEL(packetData);
}