65 lines
2.2 KiB
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);
|
|
}
|