diff --git a/Client/TeamTalkClassic/TeamTalk.rc b/Client/TeamTalkClassic/TeamTalk.rc index cee54494a9..89c2ef77e2 100644 --- a/Client/TeamTalkClassic/TeamTalk.rc +++ b/Client/TeamTalkClassic/TeamTalk.rc @@ -1540,8 +1540,8 @@ IDR_MAINFRAME ICON "res\\TeamTalk.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 5,22,0,5194 - PRODUCTVERSION 5,22,0,5194 + FILEVERSION 5,22,0,5195 + PRODUCTVERSION 5,22,0,5195 FILEFLAGSMASK 0x1fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -1558,12 +1558,12 @@ BEGIN BEGIN VALUE "CompanyName", "BearWare.dk" VALUE "FileDescription", "TeamTalk voice conferencing client" - VALUE "FileVersion", "5, 22, 0, 5194" + VALUE "FileVersion", "5, 22, 0, 5195" VALUE "InternalName", "TeamTalk5.exe" VALUE "LegalCopyright", "Copyright (c) 2005-2020, BearWare.dk. All rights reserved." VALUE "OriginalFilename", "TeamTalk5.exe" VALUE "ProductName", "BearWare.dk TeamTalk" - VALUE "ProductVersion", "5, 22, 0, 5194" + VALUE "ProductVersion", "5, 22, 0, 5195" END END BLOCK "VarFileInfo" diff --git a/Client/qtTeamTalk/mainwindow.rc b/Client/qtTeamTalk/mainwindow.rc index 9570e7b7a5..737d95c7e6 100644 --- a/Client/qtTeamTalk/mainwindow.rc +++ b/Client/qtTeamTalk/mainwindow.rc @@ -53,8 +53,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 5,22,0,5194 - PRODUCTVERSION 5,22,0,5194 + FILEVERSION 5,22,0,5195 + PRODUCTVERSION 5,22,0,5195 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -71,12 +71,12 @@ BEGIN BEGIN VALUE "CompanyName", "BearWare.dk" VALUE "FileDescription", "TeamTalk Conferencing Client" - VALUE "FileVersion", "5, 22, 0, 5194" + VALUE "FileVersion", "5, 22, 0, 5195" VALUE "InternalName", "TeamTalk 5" VALUE "LegalCopyright", "Copyright (c) 2005-2020, BearWare.dk. All rights reserved." VALUE "OriginalFilename", "TeamTalk5.exe" VALUE "ProductName", "BearWare.dk TeamTalk 5" - VALUE "ProductVersion", "5, 22, 0, 5194" + VALUE "ProductVersion", "5, 22, 0, 5195" END END BLOCK "VarFileInfo" diff --git a/Documentation/TeamTalk/TeamTalk5.dox b/Documentation/TeamTalk/TeamTalk5.dox index d2c591f42b..a4b72f1575 100644 --- a/Documentation/TeamTalk/TeamTalk5.dox +++ b/Documentation/TeamTalk/TeamTalk5.dox @@ -48,7 +48,7 @@ PROJECT_NAME = "TeamTalk Help" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "Version 5.22.0.5194" +PROJECT_NUMBER = "Version 5.22.0.5195" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Documentation/TeamTalkSDK/TeamTalk.Java.dox b/Documentation/TeamTalkSDK/TeamTalk.Java.dox index 06f2d13216..95d24c7f3a 100644 --- a/Documentation/TeamTalkSDK/TeamTalk.Java.dox +++ b/Documentation/TeamTalkSDK/TeamTalk.Java.dox @@ -48,7 +48,7 @@ PROJECT_NAME = "TeamTalk 5 Java DLL" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "Version 5.22.0.5194 - Unreleased" +PROJECT_NUMBER = "Version 5.22.0.5195 - Unreleased" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Documentation/TeamTalkSDK/TeamTalk.NET.dox b/Documentation/TeamTalkSDK/TeamTalk.NET.dox index d340f26984..a5b47404cc 100644 --- a/Documentation/TeamTalkSDK/TeamTalk.NET.dox +++ b/Documentation/TeamTalkSDK/TeamTalk.NET.dox @@ -48,7 +48,7 @@ PROJECT_NAME = "TeamTalk 5 .NET DLL" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "Version 5.22.0.5194 - Unreleased" +PROJECT_NUMBER = "Version 5.22.0.5195 - Unreleased" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Documentation/TeamTalkSDK/TeamTalk.dox b/Documentation/TeamTalkSDK/TeamTalk.dox index 86c090de07..242df8ba4b 100644 --- a/Documentation/TeamTalkSDK/TeamTalk.dox +++ b/Documentation/TeamTalkSDK/TeamTalk.dox @@ -48,7 +48,7 @@ PROJECT_NAME = "TeamTalk 5 C-API DLL" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "Version 5.22.0.5194 - Unreleased" +PROJECT_NUMBER = "Version 5.22.0.5195 - Unreleased" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Library/TeamTalk.NET/AssemblyInfo.cs b/Library/TeamTalk.NET/AssemblyInfo.cs index 6f43de3b40..6e36931906 100644 --- a/Library/TeamTalk.NET/AssemblyInfo.cs +++ b/Library/TeamTalk.NET/AssemblyInfo.cs @@ -58,5 +58,5 @@ // Build Number // Revision // -[assembly: AssemblyVersion("5.22.0.5194")] +[assembly: AssemblyVersion("5.22.0.5195")] diff --git a/Library/TeamTalkLib/TeamTalkDefs.h b/Library/TeamTalkLib/TeamTalkDefs.h index 2dc59116e4..8fa5e4d0eb 100644 --- a/Library/TeamTalkLib/TeamTalkDefs.h +++ b/Library/TeamTalkLib/TeamTalkDefs.h @@ -24,9 +24,9 @@ #if !defined(TEAMTALKDEFS_H) #define TEAMTALKDEFS_H -#define TEAMTALK_VERSION "5.22.0.5194" -#define TEAMTALK_RC_VERSION 5,22,0,5194 -#define TEAMTALK_RC_FILEVERSION "5, 22, 0, 5194" +#define TEAMTALK_VERSION "5.22.0.5195" +#define TEAMTALK_RC_VERSION 5,22,0,5195 +#define TEAMTALK_RC_FILEVERSION "5, 22, 0, 5195" #define TEAMTALK_VERSION_POSTFIX " - Unreleased" #if defined(ENABLE_TEAMTALKPRO) @@ -35,6 +35,9 @@ #define WEBLOGIN_BEARWARE_USERNAME "bearware" #define WEBLOGIN_BEARWARE_POSTFIX "@bearware.dk" #define WEBLOGIN_URL "https://login.bearware.dk/teamtalk/weblogin.php?" +constexpr auto WEBLOGIN_SPAMBOT_USERNAME = "spambot" WEBLOGIN_BEARWARE_POSTFIX; +constexpr auto SPAMBOT_SUBMIT_URL = "https://www.bearware.dk/teamtalk/tt5servers.php"; +constexpr auto WEBLOGIN_PING_URL = "https://login.bearware.dk/teamtalk/weblogin.php?ping=1"; #else #define TEAMTALK_LIB_NAME "TeamTalk5" #endif diff --git a/Library/TeamTalkLib/bin/ttsrv/ServerConfig.cpp b/Library/TeamTalkLib/bin/ttsrv/ServerConfig.cpp index dc77f27039..7affee81fd 100644 --- a/Library/TeamTalkLib/bin/ttsrv/ServerConfig.cpp +++ b/Library/TeamTalkLib/bin/ttsrv/ServerConfig.cpp @@ -27,10 +27,10 @@ #include "AppInfo.h" #include "ServerXML.h" -#include "mystd/MyStd.h" +#include "TeamTalkDefs.h" #include "myace/MyACE.h" #include "myace/MyINet.h" -#include "TeamTalkDefs.h" +#include "mystd/MyStd.h" #include "teamtalk/Commands.h" #include "teamtalk/Common.h" #include "teamtalk/Log.h" @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -287,6 +288,164 @@ void ConfigureUserAccount(UserAccount user, teamtalk::ServerXML& xmlSettings) } #if defined(ENABLE_TEAMTALKPRO) + +static std::string GetMyIPAddress() +{ + std::string xml; + switch (HttpGetRequest(WEBLOGIN_PING_URL, xml)) + { + case 1 : + { + teamtalk::XMLDocument xmldoc("teamtalk", "1.0"); + if (xmldoc.Parse(xml)) + { + return xmldoc.GetValue(false, "teamtalk/ipaddress", ""); + } + } + } + return {}; +} + +static bool SubmitSpamBotServer(teamtalk::ServerXML& xmlSettings) +{ + cout << "Do you wish to submit your TeamTalk Pro server for SpamBot monitoring? "; + if (!PrintGetBool(true)) + return true; + + while (!LoginBearWare(xmlSettings)) + { + cout << "Try again? "; + if (!PrintGetBool(true)) + break; + } + + auto myipaddr = GetMyIPAddress(); + std::cout << "What is the public IP-address of your server? "; + myipaddr = PrintGetString(myipaddr); + std::cout << "What is the TCP port of your server? "; + int const tcpport = PrintGetInt(xmlSettings.GetHostTcpPort(DEFAULT_TCPPORT)); + std::cout << "What is the UDP port of your server? "; + int const udpport = PrintGetInt(xmlSettings.GetHostUdpPort(DEFAULT_UDPPORT)); + std::cout << "Is the server encrypted? "; + bool const encrypted = PrintGetBool(!xmlSettings.GetCertificateFile().empty()); + + std::string bearwareid; + std::string token; + xmlSettings.GetBearWareWebLogin(bearwareid, token); + std::map formdata; + formdata["client"] = TEAMTALK_LIB_NAME; + formdata["version"] = TEAMTALK_VERSION; + formdata["action"] = "spambotsubmit"; // TODO: make endpoint + formdata["username"] = bearwareid; + formdata["token"] = token; + // TODO: query user for input + formdata["ipaddress"] = myipaddr; + formdata["tcpport"] = std::to_string(tcpport); + formdata["udpport"] = std::to_string(udpport); + formdata["encrypted"] = encrypted ? "true" : "false"; + + std::string xml; + switch (HttpPostRequest(SPAMBOT_SUBMIT_URL, formdata, xml)) + { + default : + case -1 : + case 0 : + return false; + case 1 : + return true; + } +} + +static bool RemoveSpamBotServer(teamtalk::ServerXML& xmlSettings) +{ + cout << "Do you wish to remove your TeamTalk Pro server from SpamBot monitoring? "; + if (!PrintGetBool(true)) + return true; + + while (!LoginBearWare(xmlSettings)) + { + cout << "Try again? "; + if (!PrintGetBool(true)) + break; + } + + auto myipaddr = GetMyIPAddress(); + std::cout << "What is the registered IP-address of your server? "; + myipaddr = PrintGetString(myipaddr); + std::cout << "What is the TCP port of your server? "; + int const tcpport = PrintGetInt(xmlSettings.GetHostTcpPort(DEFAULT_TCPPORT)); + + std::string bearwareid; + std::string token; + xmlSettings.GetBearWareWebLogin(bearwareid, token); + std::map formdata; + formdata["client"] = TEAMTALK_LIB_NAME; + formdata["version"] = TEAMTALK_VERSION; + formdata["action"] = "spambotremove"; // TODO: make endpoint + formdata["username"] = bearwareid; + formdata["token"] = token; + formdata["ipaddress"] = myipaddr; + formdata["tcpport"] = std::to_string(tcpport); + + std::string xml; + switch (HttpPostRequest(SPAMBOT_SUBMIT_URL, formdata, xml)) + { + default : + case -1 : + case 0 : + return false; + case 1 : + return true; + } +} + +static void ConfigureSpamBotUserAccount(UserAccount user, teamtalk::ServerXML& xmlSettings) +{ + cout << "Creating SpamBot web-login account." << endl; + user.username = ACE_TEXT( WEBLOGIN_SPAMBOT_USERNAME ); + user.passwd = ACE_TEXT(""); + + cout << "Available user types:" << endl; + cout << "\t1. Default user." << endl; + cout << "\t2. Administrator." << endl; + cout << "Select user type:"; + switch(PrintGetInt(1)) + { + case 2 : + user.usertype = USERTYPE_ADMIN; + break; + case 1 : + default : + { + user.usertype = USERTYPE_DEFAULT; + int userrights = USERRIGHT_NONE; + + cout << "User can see all other users on server: "; + userrights = PrintGetBool((USERRIGHT_DEFAULT & USERRIGHT_VIEW_ALL_USERS) != 0)? + (userrights | USERRIGHT_VIEW_ALL_USERS) : (userrights & ~USERRIGHT_VIEW_ALL_USERS); + + cout << "User can kick users off the server: "; + userrights = PrintGetBool((USERRIGHT_DEFAULT & USERRIGHT_KICK_USERS) != 0)? + (userrights | USERRIGHT_KICK_USERS) : (userrights & ~USERRIGHT_KICK_USERS); + + cout << "User can ban users from the server: "; + userrights = PrintGetBool((USERRIGHT_DEFAULT & USERRIGHT_BAN_USERS) != 0)? + (userrights | USERRIGHT_BAN_USERS) : (userrights & ~USERRIGHT_BAN_USERS); + + user.userrights = userrights; + } + break; + } + + xmlSettings.RemoveUser(UnicodeToUtf8(user.username).c_str()); + xmlSettings.AddNewUser(user); + + if (!SubmitSpamBotServer(xmlSettings)) + { + cout << "Failed to submit SpamBot." << endl; + } +} + void ConfigureEncryption(bool& certverifyonce, int& certdepth, ACE_TString& cadir, ACE_TString& keyfile, ACE_TString& certfile, ACE_TString& cafile, @@ -531,6 +690,7 @@ void RunWizard(teamtalk::ServerXML& xmlSettings) CREATE_USERACCOUNT, #if defined(ENABLE_TEAMTALKPRO) CREATE_USERACCOUNT_BEARWARE, + CREATE_USERACCOUNT_SPAMBOT, #endif DELETE_USERACCOUNT, QUIT_USERACCOUNTS @@ -626,6 +786,9 @@ void RunWizard(teamtalk::ServerXML& xmlSettings) user.passwd = ACE_TEXT(""); ConfigureUserAccount(user, xmlSettings); break; + case CREATE_USERACCOUNT_SPAMBOT : + ConfigureSpamBotUserAccount(user, xmlSettings); + break; #endif /* ENABLE_TEAMTALKPRO */ case DELETE_USERACCOUNT : { diff --git a/Library/TeamTalkLib/bin/ttsrv/ttsrv.rc b/Library/TeamTalkLib/bin/ttsrv/ttsrv.rc index 26478971b1..ba80b544c2 100644 --- a/Library/TeamTalkLib/bin/ttsrv/ttsrv.rc +++ b/Library/TeamTalkLib/bin/ttsrv/ttsrv.rc @@ -71,8 +71,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 5,22,0,5194 - PRODUCTVERSION 5,22,0,5194 + FILEVERSION 5,22,0,5195 + PRODUCTVERSION 5,22,0,5195 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -93,7 +93,7 @@ BEGIN #else VALUE "FileDescription", "TeamTalk Conferencing Server" #endif - VALUE "FileVersion", "5, 22, 0, 5194" + VALUE "FileVersion", "5, 22, 0, 5195" VALUE "InternalName", "tt5srv.exe" VALUE "LegalCopyright", "Copyright (c) 2002-2020, BearWare.dk. All rights reserved." VALUE "OriginalFilename", "tt5srv.exe" @@ -102,7 +102,7 @@ BEGIN #else VALUE "ProductName", "TeamTalk Conferencing Server" #endif - VALUE "ProductVersion", "5, 22, 0, 5194" + VALUE "ProductVersion", "5, 22, 0, 5195" END END BLOCK "VarFileInfo" diff --git a/Library/TeamTalk_DLL/TeamTalk.h b/Library/TeamTalk_DLL/TeamTalk.h index 64c3b582d1..cfa5dfb924 100644 --- a/Library/TeamTalk_DLL/TeamTalk.h +++ b/Library/TeamTalk_DLL/TeamTalk.h @@ -16,7 +16,7 @@ * client's version can be seen in the @a szVersion member of the * #User struct. */ -#define TEAMTALK_VERSION "5.22.0.5194" +#define TEAMTALK_VERSION "5.22.0.5195" #if defined(WIN32) diff --git a/Library/TeamTalk_DLL/TeamTalkSrv.h b/Library/TeamTalk_DLL/TeamTalkSrv.h index 6ef76ce12f..50a0c410c5 100644 --- a/Library/TeamTalk_DLL/TeamTalkSrv.h +++ b/Library/TeamTalk_DLL/TeamTalkSrv.h @@ -18,7 +18,7 @@ * client's version can be seen in the @a szVersion member of the * #User struct. */ -#define TEAMTALK_SERVER_VERSION "5.22.0.5194" +#define TEAMTALK_SERVER_VERSION "5.22.0.5195" #ifdef __cplusplus extern "C" { diff --git a/Setup/Portable/Makefile b/Setup/Portable/Makefile index ba621a3b16..325985ed1c 100644 --- a/Setup/Portable/Makefile +++ b/Setup/Portable/Makefile @@ -1,4 +1,4 @@ -VERSION="v5.22.0.5194" +VERSION="v5.22.0.5195" OUTPUT_DEST=./ INSTALLDIR?=$(TEAMTALK_INSTALLDIR)