Unfinished totally broken and far from done push
This commit is contained in:
parent
6dd3379cde
commit
8aa7714ae6
|
@ -2,6 +2,17 @@ cmake_minimum_required(VERSION 3.0)
|
||||||
|
|
||||||
project(pengobox)
|
project(pengobox)
|
||||||
|
|
||||||
add_executable(pengobox main.cpp)
|
SET(CMAKE_CXX_STANDARD 17)
|
||||||
|
SET(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
|
|
||||||
|
find_package(SQLite3 REQUIRED)
|
||||||
|
find_package(OpenSSL REQUIRED)
|
||||||
|
|
||||||
|
add_executable(
|
||||||
|
pengobox
|
||||||
|
src/main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(pengobox PUBLIC pthread dl ssl crypto sqlite3)
|
||||||
|
|
||||||
install(TARGETS pengobox RUNTIME DESTINATION bin)
|
install(TARGETS pengobox RUNTIME DESTINATION bin)
|
||||||
|
|
16
src/main.cpp
Normal file
16
src/main.cpp
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "sql.h"
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
std::cout << "[Info]\tStarting PengoBox..." << std::endl;
|
||||||
|
pengoSQL* s = new pengoSQL();
|
||||||
|
// Check it's not stupid.
|
||||||
|
if (s->response_code != SQLITE_OK) {
|
||||||
|
// It's stupid.
|
||||||
|
perror("<SQL>: Initialization failed.");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
std::cout << "Hello, world!" << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
53
src/network.cpp
Normal file
53
src/network.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#define MAX_CLIENTS 100
|
||||||
|
#define AUTOPORT 5150
|
||||||
|
#define RoomPortMin 6000
|
||||||
|
#define RoomPortMax 6100
|
||||||
|
|
||||||
|
class MasterNetwork {
|
||||||
|
public:
|
||||||
|
MasterNetwork() {
|
||||||
|
fd_set readfds;
|
||||||
|
for (i = 0; i < MAX_CLIENTS; i++) {
|
||||||
|
clients[i] = 0;
|
||||||
|
}
|
||||||
|
if ((master_socket = socket(AF_INET , SOCK_STREAM , 0)) == 0) {
|
||||||
|
perror("<Network>: Socket failed.");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if (setsockopt(master_socket, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(opt)) < 0) {
|
||||||
|
perror("<Network>: setsockopt failed.");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
address.sin_family = AF_INET;
|
||||||
|
address.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
address.sin_port = htons(AUTOPORT);
|
||||||
|
|
||||||
|
if (bind(master_socket, (struct sockaddr *)&address, sizeof(address)) < 0) {
|
||||||
|
perror("<Network>: Failed to bind.");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
printf("AutoServer listening on port %d.\n", AUTOPORT);
|
||||||
|
|
||||||
|
if (listen(master_socket, 5) < 0) {
|
||||||
|
perror("<Network>: Unable to listen.");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
addrlen = sizeof(address);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
FD_SET(master_socket, &readfds);
|
||||||
|
max_sd = master_socket;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
int master_socket;
|
||||||
|
int max_sd;
|
||||||
|
int clients[MAX_CLIENTS];
|
||||||
|
int fresh_socket;
|
||||||
|
struct sockaddr_in address;
|
||||||
|
char buffer[256];
|
||||||
|
int addrlen;
|
||||||
|
}
|
12
src/packets/SessInit.cpp
Normal file
12
src/packets/SessInit.cpp
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef PropertyList
|
||||||
|
#include "../scape/propertylist.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class SessInit : public NetPacket {
|
||||||
|
public:
|
||||||
|
SessInit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
const int type = 6;
|
||||||
|
}
|
63
src/sql.h
Normal file
63
src/sql.h
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#ifndef SQL_H
|
||||||
|
#define SQL_H
|
||||||
|
#include <sqlite3.h>
|
||||||
|
#include <random>
|
||||||
|
#include <string>
|
||||||
|
#include <openssl/sha.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
unsigned char* sha256(const char* text) {
|
||||||
|
unsigned int len = strlen ((const char*) text);
|
||||||
|
unsigned char hash [32];
|
||||||
|
SHA256((const unsigned char*)text, len, hash);
|
||||||
|
unsigned char* output = hash;
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
class pengoSQL {
|
||||||
|
public:
|
||||||
|
sqlite3 *db;
|
||||||
|
int response_code;
|
||||||
|
char* response_message = 0;
|
||||||
|
|
||||||
|
pengoSQL() {
|
||||||
|
response_code = sqlite3_open("pbox.db", &db);
|
||||||
|
if (response_code == SQLITE_OK) {
|
||||||
|
response_code = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Accounts(name TEXT PRIMARY KEY NOT NULL, password CHAR(32) NOT NULL, serial CHAR(16), email CHAR(255));", NULL, 0, &response_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!userExists("admin")) {
|
||||||
|
std::mt19937 generator{std::random_device{}()};
|
||||||
|
std::uniform_int_distribution<int> distribution{'a', 'z'};
|
||||||
|
std::string pw(16, '\0');
|
||||||
|
for(auto& dis: pw)
|
||||||
|
dis = distribution(generator);
|
||||||
|
if (createUser("admin", pw.c_str(), "0000000000000000")) printf("Admin user created.\n\tUsername: admin\n\tPassword: %s\n", pw.c_str());
|
||||||
|
else printf("Error creating admin user.\n");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
bool userExists(const char* username) {
|
||||||
|
sqlite3_stmt* stmt;
|
||||||
|
sqlite3_prepare_v2(db, "SELECT * FROM Accounts WHERE username = ?;", -1, &stmt, 0);
|
||||||
|
sqlite3_bind_text(stmt, 1, username, -1, NULL);
|
||||||
|
int step = sqlite3_step(stmt);
|
||||||
|
sqlite3_finalize(stmt);
|
||||||
|
if (step == SQLITE_ROW) { return true; }
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool createUser(const char* username, const char* password, const char* serial) {
|
||||||
|
sqlite3_stmt* stmt;
|
||||||
|
int result = sqlite3_prepare_v2(db, "INSERT INTO Accounts(name, password) VALUES (?, ?)", -1, &stmt, 0);
|
||||||
|
sqlite3_bind_text(stmt, 1, username, -1, NULL);
|
||||||
|
sqlite3_bind_text(stmt, 2, (const char*)sha256(password), -1, NULL);
|
||||||
|
sqlite3_bind_text(stmt, 3, serial, -1, NULL);
|
||||||
|
sqlite3_step(stmt);
|
||||||
|
return result == SQLITE_DONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void close() { sqlite3_close(db); }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user