diff options
author | Joursoir <chat@joursoir.net> | 2020-12-06 19:47:25 +0000 |
---|---|---|
committer | Joursoir <chat@joursoir.net> | 2020-12-06 19:47:25 +0000 |
commit | e99a03a838ddcf9eecadc10a7f71837afac3b99c (patch) | |
tree | 092ac919a8a8090df9c01536f5169e27952f7776 /src | |
parent | 91d777da4f5baeac47b3097913b2407b45bc031e (diff) | |
download | want-chat-e99a03a838ddcf9eecadc10a7f71837afac3b99c.tar.gz want-chat-e99a03a838ddcf9eecadc10a7f71837afac3b99c.tar.bz2 want-chat-e99a03a838ddcf9eecadc10a7f71837afac3b99c.zip |
some changes in reg/auth; client: remove name in arguments
Diffstat (limited to 'src')
-rw-r--r-- | src/client_clui/Makefile (renamed from src/client/Makefile) | 0 | ||||
-rw-r--r-- | src/client_clui/client.cpp (renamed from src/client/client.cpp) | 12 | ||||
-rw-r--r-- | src/client_clui/clui.cpp (renamed from src/client/clui.cpp) | 0 | ||||
-rw-r--r-- | src/client_clui/clui.hpp (renamed from src/client/clui.hpp) | 0 | ||||
-rw-r--r-- | src/client_clui/user.cpp (renamed from src/client/user.cpp) | 17 | ||||
-rw-r--r-- | src/client_clui/user.hpp (renamed from src/client/user.hpp) | 5 | ||||
-rw-r--r-- | src/server/ChatRoom.cpp | 144 | ||||
-rw-r--r-- | src/server/ChatRoom.hpp | 1 | ||||
-rw-r--r-- | src/server/ChatRoom_cmd.cpp | 54 | ||||
-rw-r--r-- | src/server/ChatServer.cpp | 4 |
10 files changed, 100 insertions, 137 deletions
diff --git a/src/client/Makefile b/src/client_clui/Makefile index 071462b..071462b 100644 --- a/src/client/Makefile +++ b/src/client_clui/Makefile diff --git a/src/client/client.cpp b/src/client_clui/client.cpp index 8143b9e..83f8ef0 100644 --- a/src/client/client.cpp +++ b/src/client_clui/client.cpp @@ -3,20 +3,12 @@ #include <string.h> #include <unistd.h> +#include "../config.hpp" #include "user.hpp" -#define SERVER_IP "127.0.0.1" -static int port = 3030; - int main(int argc, char *argv[]) { - if(argc < 2) { - printf("Usage: client *name*\n"); - return 1; - } - initscr(); - //raw(); noecho(); int rows, columns; @@ -27,7 +19,7 @@ int main(int argc, char *argv[]) return 1; } - Client *user = Client::Start(SERVER_IP, port, argv[1]); + Client *user = Client::Start(SERVER_IP, SERVER_PORT); if(!user) { endwin(); perror("server"); diff --git a/src/client/clui.cpp b/src/client_clui/clui.cpp index 78fd226..78fd226 100644 --- a/src/client/clui.cpp +++ b/src/client_clui/clui.cpp diff --git a/src/client/clui.hpp b/src/client_clui/clui.hpp index 0373f95..0373f95 100644 --- a/src/client/clui.hpp +++ b/src/client_clui/clui.hpp diff --git a/src/client/user.cpp b/src/client_clui/user.cpp index 31cb5e5..d075751 100644 --- a/src/client/user.cpp +++ b/src/client_clui/user.cpp @@ -14,20 +14,7 @@ const int key_enter = 10; const int key_escape = 27; const int key_backspace = 127; -// - -Client::Client(int i_fd, char *username) : fd(i_fd), in_buf_used(0), - out_buf_used(0) -{ - int len = strlen(username); - char *name = new char[len+2]; - sprintf(name, "%s\n", username); - - write(i_fd, name, strlen(name)); - delete[] name; -} - -Client *Client::Start(const char* ip, int port, char *username) +Client *Client::Start(const char* ip, int port) { int client; client = socket(AF_INET, SOCK_STREAM, 0); @@ -49,7 +36,7 @@ Client *Client::Start(const char* ip, int port, char *username) sizeof(server_adress)); if(res == -1) return 0; - return new Client(client, username); + return new Client(client); } void Client::Run(ChatRoom *room) diff --git a/src/client/user.hpp b/src/client_clui/user.hpp index 1ae8427..a203320 100644 --- a/src/client/user.hpp +++ b/src/client_clui/user.hpp @@ -14,11 +14,12 @@ class Client { bool exit_flag; - Client(int i_fd, char *username); + Client(int i_fd) : fd(i_fd), in_buf_used(0), + out_buf_used(0), exit_flag(false) {} public: ~Client() { close(fd); } - static Client *Start(const char* ip, int port, char *username); + static Client *Start(const char* ip, int port); void Run(ChatRoom *room); void BreakLoop() { exit_flag = true; } void HandleButton(ChatRoom *room); diff --git a/src/server/ChatRoom.cpp b/src/server/ChatRoom.cpp index 50c364c..9d99251 100644 --- a/src/server/ChatRoom.cpp +++ b/src/server/ChatRoom.cpp @@ -25,58 +25,8 @@ ChatRoom::~ChatRoom() void ChatRoom::HandleMessage(UserInfo *u, const char *str) { - int status = u->GetStatus(); - if(status == wait_name) { - if(!CheckEnterNickname(u, str)) { - CloseSession(u); - return; - } - u->SetName(str); - - // query to server - char *msg = new char[DB_BUFFER_SIZE]; - sprintf(msg, "SELECT password FROM users WHERE name = '%s' LIMIT 1", str); - AnswerDB *ans = the_server->QuerySelect(msg); - if(ans) { - DB_ROW *row = ans->GetNextRow(); - - sprintf(msg, "Welcome to WantChat, %s!", u->GetName()); - u->Send(msg); - u->Send(" "); - u->Send("Welcome to anonymous chat in retro-style 80s."); - u->Send("Use our chat-client for more immersed."); - u->Send(" "); - u->Send("This project is open source :)"); - u->Send("Github: github.com/Joursoir/want-chat"); - u->Send(" "); - u->Send("To join to room using /join room_id"); - u->Send("You can find rooms using /rooms"); - u->Send(" "); - u->Send("For more detailed info: /help. Good chatting!"); - u->Send(" "); - - if(row) { - u->SetPassword((*row)[0]); - u->SetStatus(wait_login); - - u->Send("Please, log in using /login"); - } - else { - u->SetStatus(wait_reg); - u->Send("Please, create account using /reg"); - } - } - else { - // handling error - CloseSession(u); - return; - } - // query to server - - delete[] msg; - delete ans; - return; - } + if(u->GetStatus() != no_wait) + return Identification(u, str); if(str[0] == '/') { // if user sent a command int argc = 0; @@ -95,11 +45,7 @@ void ChatRoom::HandleMessage(UserInfo *u, const char *str) delete[] msg; } - else { - if(status == wait_reg) u->Send(first_reg); - else if(status == wait_login) u->Send(first_login); - else u->Send("In the lobby you can write only commands"); - } + else u->Send("In the lobby you can write only commands"); } const char *ChatRoom::GetSecretPass() @@ -157,6 +103,90 @@ void ChatRoom::CloseSession(UserInfo *u) serv->CloseConnection(u); } +void ChatRoom::Identification(UserInfo *u, const char *str) +{ + int status = u->GetStatus(); + if(status == wait_name) { + if(!CheckEnterNickname(u, str)) { + CloseSession(u); + return; + } + u->SetName(str); + + // query to server + char *msg = new char[DB_BUFFER_SIZE]; + sprintf(msg, "SELECT password FROM users WHERE name = '%s' LIMIT 1", str); + AnswerDB *ans = the_server->QuerySelect(msg); + if(ans) { + DB_ROW *row = ans->GetNextRow(); + + if(row) { + u->SetPassword((*row)[0]); + u->SetStatus(wait_login); + + sprintf(msg, "Hello, %s! Please, type your password:", u->GetName()); + u->Send(msg); + } + else { + u->SetStatus(wait_reg); + sprintf(msg, "First time here, %s? Please, come up and write password:", u->GetName()); + u->Send(msg); + } + } + else { + // handling error + CloseSession(u); + return; + } + // query to server + + delete[] msg; + delete ans; + } + else if(status == wait_reg) { + if(!CheckEnterPassword(u, str)) + return; + + // query to server (add to database) + char *msg = new char[DB_BUFFER_SIZE]; + sprintf(msg, "INSERT INTO users (name, password) VALUES ('%s', '%s')", u->GetName(), str); + if(the_server->QueryInsert(msg) != 0) { + perror("mariadb insert"); + } + // query to server + + sprintf(msg, "Congratulations, %s! You have registered successfully.", u->GetName()); + u->Send(msg); + delete[] msg; + + u->SetStatus(no_wait); + } + else if(status == wait_login) { + const char *right_pass = u->GetPassword(); + + if(strcmp(str, right_pass) != 0) + return u->Send("Password are not right, try again."); + + u->Send("Yeh, right password! Glad you came back to WhatChat."); + u->SetStatus(no_wait); + } + + if(u->GetStatus() == no_wait) { + u->Send(" "); + u->Send("Welcome to anonymous chat in retro-style 80s."); + u->Send("Use our chat-client for more immersed."); + u->Send(" "); + u->Send("This project is open source :)"); + u->Send("Github: github.com/Joursoir/want-chat"); + u->Send(" "); + u->Send("To join to room using /join room_id"); + u->Send("You can find rooms using /rooms"); + u->Send(" "); + u->Send("For more detailed info: /help. Good chatting!"); + u->Send(" "); + } +} + bool ChatRoom::CheckEnterNickname(UserInfo *u, const char *name) { int len = strlen(name); diff --git a/src/server/ChatRoom.hpp b/src/server/ChatRoom.hpp index 183dcc1..fa56fb2 100644 --- a/src/server/ChatRoom.hpp +++ b/src/server/ChatRoom.hpp @@ -39,6 +39,7 @@ private: static char **ParseToArg(const char *input, int &arrc); // in _cmd static bool CheckForbiddenSymbols(const char *str); // in _cmd + void Identification(UserInfo *u, const char *str); bool CheckEnterNickname(UserInfo *u, const char *name); bool CheckEnterPassword(UserInfo *u, const char *pass); diff --git a/src/server/ChatRoom_cmd.cpp b/src/server/ChatRoom_cmd.cpp index d37ad5e..8b1f6e9 100644 --- a/src/server/ChatRoom_cmd.cpp +++ b/src/server/ChatRoom_cmd.cpp @@ -23,18 +23,14 @@ const int cmd_id_create = 1; const int cmd_id_join = 2; const int cmd_id_exit = 3; const int cmd_id_rooms = 4; -const int cmd_id_reg = 5; -const int cmd_id_login = 6; -const int cmd_count = 7; +const int cmd_count = 5; const struct cmd_info cmd[cmd_count] = { {cmd_id_help, "/help", ChatRoom::Hash("/help"), USE_ANYWHERE, 0, "Usage: /help"}, {cmd_id_create, "/create", ChatRoom::Hash("/create"), USE_IN_LOBBY, 0, "Usage: /create [pass-key]"}, {cmd_id_join, "/join", ChatRoom::Hash("/join"), USE_IN_LOBBY, 1, "Usage: /join *id* [pass-key]"}, {cmd_id_exit, "/exit", ChatRoom::Hash("/exit"), USE_IN_ROOM, 0, "Usage: /exit"}, - {cmd_id_rooms, "/rooms", ChatRoom::Hash("/rooms"), USE_IN_LOBBY, 0, "Usage: /rooms"}, // print all public rooms - {cmd_id_reg, "/reg", ChatRoom::Hash("/reg"), USE_IN_LOBBY, 2, "Usage: /reg *pass* *pass*"}, - {cmd_id_login, "/login", ChatRoom::Hash("/login"), USE_IN_LOBBY, 1, "Usage: /login *pass*"} + {cmd_id_rooms, "/rooms", ChatRoom::Hash("/rooms"), USE_IN_LOBBY, 0, "Usage: /rooms"} // print all public rooms // IDEA: /clear - clear screen }; @@ -56,12 +52,6 @@ void ChatRoom::HandleCommand(UserInfo *u, int count, if(what_command == -1) return u->Send("Unknown command. Use: /help"); - enum_status status = u->GetStatus(); - if(status == wait_reg && what_command != cmd_id_reg) - return u->Send(first_reg); - if(status == wait_login && what_command != cmd_id_login) - return u->Send(first_login); - // scope of command: if(cmd[what_command].lobby_cmd == USE_IN_ROOM && code == std_id_lobby) return u->Send("You can use this command only in rooms!"); @@ -127,46 +117,6 @@ void ChatRoom::HandleCommand(UserInfo *u, int count, // in development break; } - - case cmd_id_reg: { - char *pass_one = argvar[1]; - char *pass_two = argvar[2]; - - if(!CheckEnterPassword(u, pass_one)) - return; - if(strcmp(pass_one, pass_two) != 0) - return u->Send("Passwords are not match, try again"); - - // query to server (add to database) - char *msg = new char[DB_BUFFER_SIZE]; - sprintf(msg, "INSERT INTO users (name, password) VALUES ('%s', '%s')", u->GetName(), pass_one); - if(the_server->QueryInsert(msg) != 0) { - perror("mariadb insert"); - } - // query to server - - sprintf(msg, "Congratulations, %s. You registered in WhatChat.", u->GetName()); - u->Send(msg); - delete[] msg; - u->SetStatus(no_wait); - break; - } - case cmd_id_login: { - CONSOLE_LOG("[!] pass\n"); - char *enter_pass = argvar[1]; - const char *right_pass = u->GetPassword(); - - if(strcmp(enter_pass, right_pass) != 0) - return u->Send("Password are not right, try again"); - - int msg_len = strlen("Hello, ! Glad you came back to WhatChat."); - char *msg = new char[msg_len + max_name_len]; - sprintf(msg, "Hello, %s! Glad you came back to WhatChat.", u->GetName()); - u->Send(msg); - delete[] msg; - u->SetStatus(no_wait); - break; - } default: break; } } diff --git a/src/server/ChatServer.cpp b/src/server/ChatServer.cpp index 2d700e9..7b6a9ea 100644 --- a/src/server/ChatServer.cpp +++ b/src/server/ChatServer.cpp @@ -12,7 +12,7 @@ const int qlen_for_listen = 6; ChatServer::ChatServer(EventSelector *sel, DatabaseManager *db, int fd) - : FdHandler(fd), the_selector(sel), dbase(db) + : FdHandler(fd), the_selector(sel), dbase(db), room(0) { the_selector->Add(this); lobby = new ChatRoom(this, std_id_lobby, 0); @@ -163,6 +163,8 @@ void ChatServer::Handle(bool r, bool w) talkers->AddUser(u); lobby->AddSession(u); the_selector->Add(u); + + u->Send("Welcome to WantChat! What is your name?"); } /////////////////////////////////////////////////////////////// |