mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
Security fixes for PR announcer
Thanks @Giacom for the info! PR announcer is now able to authenticate with Nickserv. Communications key moved out of config controller. Even better Regex validation. Reading now has even more exception handling.
This commit is contained in:
@@ -21,6 +21,10 @@ var/tinted_weldhelh = 1
|
||||
var/Debug = 0 // global debug switch
|
||||
var/Debug2 = 0
|
||||
|
||||
//Server API key
|
||||
var/global/comms_key = "default_pwd"
|
||||
var/global/comms_allowed = 0 //By default, the server does not allow messages to be sent to it, unless the key is strong enough (this is to prevent misconfigured servers from becoming vulnerable)
|
||||
|
||||
|
||||
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
|
||||
var/MAX_EX_DEVESTATION_RANGE = 3
|
||||
|
||||
@@ -101,9 +101,6 @@
|
||||
var/rename_cyborg = 0
|
||||
var/ooc_during_round = 0
|
||||
|
||||
var/comms_key = "default_pwd" //Server API key
|
||||
var/comms_allowed = 0 //By default, the server does not allow messages to be sent to it, unless the key is strong enough (this is to prevent misconfigured servers from becoming victims)
|
||||
|
||||
//Used for modifying movement speed for mobs.
|
||||
//Unversal modifiers
|
||||
var/run_speed = 0
|
||||
@@ -269,9 +266,9 @@
|
||||
if("automute_on")
|
||||
automute_on = 1
|
||||
if("comms_key")
|
||||
comms_key = value
|
||||
global.comms_key = value
|
||||
if(value != "default_pwd" && length(value) > 6) //It's the default value or less than 6 characters long, warn badmins
|
||||
comms_allowed = 1
|
||||
global.comms_allowed = 1
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ var/next_external_rsc = 0
|
||||
if(holder)
|
||||
add_admin_verbs()
|
||||
admin_memo_show()
|
||||
if((config.comms_key == "default_pwd" || length(config.comms_key) <= 6) && config.comms_allowed) //It's the default value or less than 6 characters long, but it somehow didn't disable comms.
|
||||
if((global.comms_key == "default_pwd" || length(global.comms_key) <= 6) && global.comms_allowed) //It's the default value or less than 6 characters long, but it somehow didn't disable comms.
|
||||
src << "<span class='danger'>The server's API key is either too short or is the default value! Consider changing it immediately!</span>"
|
||||
|
||||
log_client_to_db()
|
||||
|
||||
+2
-2
@@ -162,8 +162,8 @@
|
||||
return list2params(s)
|
||||
else if (copytext(T,1,9) == "announce")
|
||||
var/input[] = params2list(T)
|
||||
if(config.comms_allowed)
|
||||
if(input["key"] != config.comms_key)
|
||||
if(global.comms_allowed)
|
||||
if(input["key"] != global.comms_key)
|
||||
return "Bad Key"
|
||||
else
|
||||
#define CHAT_PULLR 2048
|
||||
|
||||
@@ -4,4 +4,5 @@ commskey = this_is_a_test_key //API key of the server
|
||||
GitHub_bot_name = testbot_github //It'll get the data from this bot
|
||||
IRC_bot_name = testbot_BYOND //This'll be our name
|
||||
IRC_server = irc.rizon.net:6670 //format - server:port
|
||||
IRC_channel = #ircchannel
|
||||
IRC_channel = #ircchannel
|
||||
Nickserv_auth = _NONE_ //leave _NONE_ if your bot does not require nickserv authentication
|
||||
Binary file not shown.
@@ -37,6 +37,7 @@ namespace sendkeys_ss13
|
||||
public static string IRC_server = "test.net";
|
||||
public static int IRC_port = 11111;
|
||||
public static string IRC_channel = "#channel";
|
||||
public static string NickServAuth = null;
|
||||
|
||||
public static string[] merge_archive;
|
||||
public static bool mergeflag = false;
|
||||
@@ -57,10 +58,10 @@ namespace sendkeys_ss13
|
||||
catch (Exception)
|
||||
{
|
||||
IRCReconnectAttempt++;
|
||||
if (IRCReconnectAttempt <= 3)
|
||||
if (IRCReconnectAttempt <= 5)
|
||||
{
|
||||
Console.WriteLine("IRC server is unavaible at the moment. Reconnect attempt {0}...", IRCReconnectAttempt);
|
||||
System.Threading.Thread.Sleep(3000); //Reconnecting after 5 seconds.
|
||||
System.Threading.Thread.Sleep(5000); //Reconnecting after 5 seconds.
|
||||
Main(args);
|
||||
}
|
||||
else
|
||||
@@ -71,7 +72,17 @@ namespace sendkeys_ss13
|
||||
}
|
||||
}
|
||||
Console.WriteLine("Connected to IRC");
|
||||
irc.Login(IRC_bot_name, IRC_bot_name);
|
||||
try
|
||||
{
|
||||
irc.Login(IRC_bot_name, IRC_bot_name);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
irc.Login(IRC_bot_name + "_1", IRC_bot_name + "_1");
|
||||
Console.WriteLine("Bot name is already taken, trying alternate...");
|
||||
}
|
||||
if (NickServAuth != null)
|
||||
irc.SendMessage(SendType.Message, "NickServ", "identify " + NickServAuth);
|
||||
Console.WriteLine("Logged in");
|
||||
irc.RfcJoin(IRC_channel);
|
||||
Console.WriteLine("Joining {0}", IRC_channel);
|
||||
@@ -83,10 +94,10 @@ namespace sendkeys_ss13
|
||||
if (File.Exists("config.txt"))
|
||||
{
|
||||
StreamReader reader = new StreamReader("config.txt");
|
||||
string[] line = reader.ReadLine().Split(' ');
|
||||
string[] line = ReadLine_exception(reader);
|
||||
if (line[2] != null)
|
||||
{
|
||||
Match match1 = Regex.Match(line[2], @"(\d{1,3}.?){4}"); //rudimentary IP validation
|
||||
Match match1 = Regex.Match(line[2], @"^(\d{1,3}.?){4}$"); //rudimentary IP validation
|
||||
if (match1.Success)
|
||||
{
|
||||
serverIP = line[2];
|
||||
@@ -95,13 +106,12 @@ namespace sendkeys_ss13
|
||||
else
|
||||
{
|
||||
Console.WriteLine("IP cannot be validated.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
line = reader.ReadLine().Split(' ');
|
||||
line = ReadLine_exception(reader);
|
||||
if (line[2] != null)
|
||||
{
|
||||
Match match2 = Regex.Match(line[2], @"\d{1,5}"); //rudimentary port validation
|
||||
Match match2 = Regex.Match(line[2], @"^\d{1,5}$"); //rudimentary port validation
|
||||
if (match2.Success && (Convert.ToInt32(line[2]) < 65535))
|
||||
{
|
||||
serverPort = Convert.ToInt32(line[2]);
|
||||
@@ -110,10 +120,9 @@ namespace sendkeys_ss13
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Port cannot be validated.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
line = reader.ReadLine().Split(' ');
|
||||
line = ReadLine_exception(reader);
|
||||
if (line[2] != null)
|
||||
{
|
||||
commskey = line[2];
|
||||
@@ -122,9 +131,8 @@ namespace sendkeys_ss13
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No Commskey!");
|
||||
return;
|
||||
}
|
||||
line = reader.ReadLine().Split(' ');
|
||||
line = ReadLine_exception(reader);
|
||||
if (line[2] != null)
|
||||
{
|
||||
Github_bot_name = line[2];
|
||||
@@ -133,23 +141,21 @@ namespace sendkeys_ss13
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No botname found.");
|
||||
return;
|
||||
}
|
||||
line = reader.ReadLine().Split(' ');
|
||||
line = ReadLine_exception(reader);
|
||||
if (line[2] != null)
|
||||
{
|
||||
IRC_bot_name = line[2];
|
||||
Console.WriteLine("Read IRC bot name: " + Github_bot_name);
|
||||
Console.WriteLine("Read IRC bot name: " + IRC_bot_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No botname found.");
|
||||
return;
|
||||
}
|
||||
line = reader.ReadLine().Split(' ');
|
||||
line = ReadLine_exception(reader);
|
||||
if (line[2] != null)
|
||||
{
|
||||
Match match3 = Regex.Match(line[2], @"(.+)\:(\d{1,5})"); //rudimentary port validation
|
||||
Match match3 = Regex.Match(line[2], @"^(.+)\:(\d{1,5})$"); //rudimentary port validation
|
||||
if (match3.Success)
|
||||
{
|
||||
IRC_server = Convert.ToString(match3.Groups[1]);
|
||||
@@ -159,10 +165,9 @@ namespace sendkeys_ss13
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Server:port invalid.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
line = reader.ReadLine().Split(' ');
|
||||
line = ReadLine_exception(reader);
|
||||
if (line[2] != null)
|
||||
{
|
||||
IRC_channel = line[2];
|
||||
@@ -171,7 +176,16 @@ namespace sendkeys_ss13
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No channel found.");
|
||||
return;
|
||||
}
|
||||
line = ReadLine_exception(reader);
|
||||
if (line[2] != null && line[2] != "_NONE_")
|
||||
{
|
||||
NickServAuth = line[2];
|
||||
Console.WriteLine("Read Nickserv auth");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No NickServ auth chosen.");
|
||||
}
|
||||
reader.Close();
|
||||
}
|
||||
@@ -182,6 +196,21 @@ namespace sendkeys_ss13
|
||||
}
|
||||
}
|
||||
|
||||
private static string[] ReadLine_exception(StreamReader reader)
|
||||
{
|
||||
string[] readline = null;
|
||||
try
|
||||
{
|
||||
readline = reader.ReadLine().Split(' ');
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
readline[3] = "Error, couldn't read all lines of config file! Are you sure the config file has the right format?";
|
||||
return readline;
|
||||
}
|
||||
return readline;
|
||||
}
|
||||
|
||||
public static void OnChannelMessage(object sender, IrcEventArgs e)
|
||||
{
|
||||
if (e.Data.Nick == Github_bot_name)
|
||||
@@ -260,6 +289,7 @@ namespace sendkeys_ss13
|
||||
server.Connect(ip);
|
||||
server.Send(PACKETS);
|
||||
Console.WriteLine("- sent ;)");
|
||||
ServerReconnectAttempt = 0;
|
||||
output.Close();
|
||||
Console.WriteLine();
|
||||
}
|
||||
@@ -269,7 +299,7 @@ namespace sendkeys_ss13
|
||||
if(ServerReconnectAttempt <= 5)
|
||||
{
|
||||
Console.WriteLine("Server is not available at the moment. Reconnect attempt {0}...", ServerReconnectAttempt);
|
||||
System.Threading.Thread.Sleep(5000); //Reconnecting after 5 seconds.
|
||||
System.Threading.Thread.Sleep(15000); //Reconnecting after 15 seconds.
|
||||
SendPacket(output, PACKETS);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user