1
0
KF2-Dev-Scripts/WebAdmin/Classes/WebAdminSystemSettings.uc
2020-12-13 18:01:13 +03:00

341 lines
13 KiB
Ucode

/**
* Configuration settings for the WebAdmin
*
* Copyright 2009 Epic Games, Inc. All Rights Reserved
*
* @author Michiel 'elmuerte' Hendriks
*/
class WebAdminSystemSettings extends WebAdminSettings implements(IQueryHandler);
`include(WebAdmin.uci)
var WebAdmin webadmin;
var QHCurrent qhcurrent;
var ChatLog chatlog;
var SettingsRenderer settingsRenderer;
//!localized
var localized string menuSystem, menuSystemDesc, msgSettingsSaved;
function init(WebAdmin webapp)
{
webadmin = webapp;
}
function delayedInit()
{
local IQueryHandler qh;
local Object o;
foreach webadmin.handlers(qh)
{
if (qh.IsA('QHCurrent'))
{
o = qh;
qhcurrent = QHCurrent(o);
}
}
foreach webadmin.WorldInfo.AllActors(class'ChatLog', chatlog)
{
break;
}
}
function cleanup()
{
settingsRenderer = none;
qhcurrent = none;
chatlog = none;
webadmin = none;
}
function registerMenuItems(WebAdminMenu menu)
{
menu.addMenu("/webadmin", menuSystem, self, menuSystemDesc, 999);
menu.addMenu("/system/allowancecache", "", self, "Rebuild the mutator allowance cache.");
}
function bool handleQuery(WebAdminQuery q)
{
switch (q.request.URI)
{
case "/webadmin":
handleSettings(q);
return true;
case "/system/allowancecache":
handleRebuildAllowanceCache(q);
return true;
}
return false;
}
function bool unhandledQuery(WebAdminQuery q);
function decoratePage(WebAdminQuery q);
function bool producesXhtml()
{
return true;
}
function handleRebuildAllowanceCache(WebAdminQuery q)
{
local array<DCEGameInfo> gts;
local int i;
if (q.request.getVariable("action") ~= "rebuild")
{
webadmin.dataStoreCache.allowanceCache.length = 0;
gts = webadmin.dataStoreCache.getGameTypes();
for (i = 0; i < gts.length; i++)
{
webadmin.dataStoreCache.getMutators(gts[i].data.ClassName);
}
webadmin.addMessage(q, "Mutator allowance cache has been rebuild.");
}
webadmin.addMessage(q, "<form action=\""$WebAdmin.Path$q.Request.URI$"\" method=\"post\">"
$"<p>Only rebuild the mutator cache when the server is empty. It is strongly adviced to restart the game after rebuilding has been completed.</p>"
$"<p><button type=\"submit\" name=\"action\" value=\"rebuild\">Rebuild cache</button></p></form>", MT_Warning);
q.response.Subst("page.title", "Rebuild Mutator Allowance Cache");
webadmin.sendPage(q, "message.html");
}
function handleSettings(WebAdminQuery q)
{
local ISettingsPrivileges privs;
if (settingsRenderer == none)
{
delayedInit();
loadSettings();
settingsRenderer = new class'SettingsRenderer';
settingsRenderer.init(webadmin.path);
}
if (q.request.getVariable("action") ~= "save")
{
class'QHDefaults'.static.applySettings(self, q.request);
saveSettings();
webadmin.addMessage(q, msgSettingsSaved);
}
privs = q.user.getSettingsPrivileges();
if (privs != none)
{
privs.setBasePrivilegeUri(webadmin.getAuthURL(q.request.uri));
}
settingsRenderer.render(self, q.response,, privs);
q.response.subst("liveAdjustStyle", "style=\"display: none;\"");
webadmin.sendPage(q, "default_settings_general.html");
}
/**
* Load the webadmin settings
*/
protected function loadSettings()
{
// generic
SetStringPropertyByName('AuthenticationClass', webadmin.AuthenticationClass);
SetStringPropertyByName('SessionHandlerClass', webadmin.SessionHandlerClass);
SetIntPropertyByName('bHttpAuth', int(webadmin.bHttpAuth));
SetStringPropertyByName('startpage', webadmin.startpage);
SetIntPropertyByName('bChatLog', int(webadmin.bChatLog));
SetIntPropertyByName('bUseStrictContentType', int(webadmin.bUseStrictContentType));
SetIntPropertyByName('sessionOctetValidation', webadmin.sessionOctetValidation);
SetIntPropertyByName('MaxAuthFails', webadmin.MaxAuthFails);
// qhcurrent
if (qhcurrent != none)
{
SetIntPropertyByName('ChatRefresh', qhcurrent.ChatRefresh);
SetIntPropertyByName('bConsoleEnabled', int(qhcurrent.bConsoleEnabled));
SetStringArrayPropertyByName('denyUrlOptions', qhcurrent.denyUrlOptions, chr(10));
SetStringArrayPropertyByName('denyConsoleCommands', qhcurrent.denyConsoleCommands, chr(10));
SetIntPropertyByName('bAdminConsoleCommandsHack', int(qhcurrent.bAdminConsoleCommandsHack));
SetStringPropertyByName('AdminCommandHandlerClass', qhcurrent.AdminCommandHandlerClass);
SetIntPropertyByName('bEnableTeamChat', int(qhcurrent.bEnableTeamChat));
SetIntPropertyByName('hideNews', int(qhcurrent.hideNews));
}
else {
SetIntPropertyByName('ChatRefresh', class'QHCurrent'.default.ChatRefresh);
SetIntPropertyByName('bConsoleEnabled', int(class'QHCurrent'.default.bConsoleEnabled));
SetStringArrayPropertyByName('denyUrlOptions', class'QHCurrent'.default.denyUrlOptions, chr(10));
SetStringArrayPropertyByName('denyConsoleCommands', class'QHCurrent'.default.denyConsoleCommands, chr(10));
SetIntPropertyByName('bAdminConsoleCommandsHack', int(class'QHCurrent'.default.bAdminConsoleCommandsHack));
SetStringPropertyByName('AdminCommandHandlerClass', class'QHCurrent'.default.AdminCommandHandlerClass);
SetIntPropertyByName('bEnableTeamChat', int(class'QHCurrent'.default.bEnableTeamChat));
SetIntPropertyByName('hideNews', int(class'QHCurrent'.default.hideNews));
}
if (chatlog != none)
{
SetStringPropertyByName('chatLogFilename', chatlog.filename);
SetIntPropertyByName('chatLogUnique', int(chatlog.bUnique));
SetIntPropertyByName('chatLogIncludeTimeStamp', int(chatlog.bIncludeTimeStamp));
}
else {
SetStringPropertyByName('chatLogFilename', class'ChatLog'.default.filename);
SetIntPropertyByName('chatLogUnique', int(class'ChatLog'.default.bUnique));
SetIntPropertyByName('chatLogIncludeTimeStamp', int(class'ChatLog'.default.bIncludeTimeStamp));
}
}
function saveSettings()
{
local int intval;
// generic
GetStringPropertyByName('AuthenticationClass', webadmin.AuthenticationClass);
GetStringPropertyByName('SessionHandlerClass', webadmin.SessionHandlerClass);
if (GetIntPropertyByName('bHttpAuth', intval))
{
webadmin.bHttpAuth = intval != 0;
}
GetStringPropertyByName('startpage', webadmin.startpage);
if (GetIntPropertyByName('bChatLog', intval))
{
webadmin.bChatLog = intval != 0;
}
if (GetIntPropertyByName('bUseStrictContentType', intval))
{
webadmin.bUseStrictContentType = intval != 0;
}
GetIntPropertyByName('sessionOctetValidation', webadmin.sessionOctetValidation);
GetIntPropertyByName('MaxAuthFails', webadmin.MaxAuthFails);
webadmin.SaveConfig();
// qhcurrent
if (qhcurrent != none)
{
GetIntPropertyByName('ChatRefresh', qhcurrent.ChatRefresh);
if (GetIntPropertyByName('bConsoleEnabled', intval))
{
qhcurrent.bConsoleEnabled = intval != 0;
}
GetStringArrayPropertyByName('denyUrlOptions', qhcurrent.denyUrlOptions, chr(10));
GetStringArrayPropertyByName('denyConsoleCommands', qhcurrent.denyConsoleCommands, chr(10));
if (GetIntPropertyByName('bAdminConsoleCommandsHack', intval))
{
qhcurrent.bAdminConsoleCommandsHack = intval != 0;
}
GetStringPropertyByName('AdminCommandHandlerClass', qhcurrent.AdminCommandHandlerClass);
if (GetIntPropertyByName('bEnableTeamChat', intval))
{
qhcurrent.bEnableTeamChat = intval != 0;
}
if (GetIntPropertyByName('hideNews', intval))
{
qhcurrent.hideNews = intval != 0;
}
qhcurrent.SaveConfig();
}
else {
GetIntPropertyByName('ChatRefresh', class'QHCurrent'.default.ChatRefresh);
if (GetIntPropertyByName('bConsoleEnabled', intval))
{
class'QHCurrent'.default.bConsoleEnabled = intval != 0;
}
GetStringArrayPropertyByName('denyUrlOptions', class'QHCurrent'.default.denyUrlOptions, chr(10));
GetStringArrayPropertyByName('denyConsoleCommands', class'QHCurrent'.default.denyConsoleCommands, chr(10));
if (GetIntPropertyByName('bAdminConsoleCommandsHack', intval))
{
class'QHCurrent'.default.bAdminConsoleCommandsHack = intval != 0;
}
GetStringPropertyByName('AdminCommandHandlerClass', class'QHCurrent'.default.AdminCommandHandlerClass);
if (GetIntPropertyByName('bEnableTeamChat', intval))
{
class'QHCurrent'.default.bEnableTeamChat = intval != 0;
}
if (GetIntPropertyByName('hideNews', intval))
{
class'QHCurrent'.default.hideNews = intval != 0;
}
class'QHCurrent'.static.StaticSaveConfig();
}
// chatlog
if (chatlog != none)
{
GetStringPropertyByName('chatLogFilename', chatlog.filename);
if (GetIntPropertyByName('chatLogUnique', intval))
{
chatlog.bUnique = intval != 0;
}
if (GetIntPropertyByName('chatLogIncludeTimeStamp', intval))
{
chatlog.bIncludeTimeStamp = intval != 0;
}
chatlog.SaveConfig();
}
else {
GetStringPropertyByName('chatLogFilename', class'ChatLog'.default.filename);
if (GetIntPropertyByName('chatLogUnique', intval))
{
class'ChatLog'.default.bUnique = intval != 0;
}
if (GetIntPropertyByName('chatLogIncludeTimeStamp', intval))
{
class'ChatLog'.default.bIncludeTimeStamp = intval != 0;
}
class'ChatLog'.static.StaticSaveConfig();
}
}
defaultProperties
{
SettingsGroups.Add((groupId="General",pMin=0,pMax=20))
SettingsGroups.Add((groupId="ChatLogging",pMin=20,pMax=30))
SettingsGroups.Add((groupId="Authentication",pMin=30,pMax=40))
SettingsGroups.Add((groupId="Advanced",pMin=100,pMax=120))
// generic
Properties.Add((PropertyId=100,Data=(Type=SDT_String)))
Properties.Add((PropertyId=101,Data=(Type=SDT_String)))
Properties.Add((PropertyId=30,Data=(Type=SDT_Int32)))
Properties.Add((PropertyId=0,Data=(Type=SDT_String)))
Properties.Add((PropertyId=20,Data=(Type=SDT_Int32)))
Properties.Add((PropertyId=102,Data=(Type=SDT_Int32)))
PropertyMappings.Add((Id=100,Name="AuthenticationClass" ,MappingType=PVMT_RawValue,MinVal=0,MaxVal=256))
PropertyMappings.Add((Id=101,name="SessionHandlerClass" ,MappingType=PVMT_RawValue,MinVal=0,MaxVal=256))
PropertyMappings.Add((Id=30,name="bHttpAuth" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
PropertyMappings.Add((Id=0,name="startpage" ,MappingType=PVMT_RawValue,MinVal=0,MaxVal=256))
PropertyMappings.Add((Id=20,name="bChatLog" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
PropertyMappings.Add((Id=102,name="bUseStrictContentType" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
// qhcurrent
Properties.Add((PropertyId=1,Data=(Type=SDT_Int32)))
Properties.Add((PropertyId=2,Data=(Type=SDT_Int32)))
Properties.Add((PropertyId=3,Data=(Type=SDT_String)))
Properties.Add((PropertyId=4,Data=(Type=SDT_String)))
Properties.Add((PropertyId=104,Data=(Type=SDT_Int32)))
Properties.Add((PropertyId=103,Data=(Type=SDT_String)))
Properties.Add((PropertyId=5,Data=(Type=SDT_Int32)))
Properties.Add((PropertyId=6,Data=(Type=SDT_Int32)))
PropertyMappings.Add((Id=1,name="ChatRefresh" ,MappingType=PVMT_Ranged,MinVal=0,MaxVal=9999,RangeIncrement=10))
PropertyMappings.Add((Id=2,name="bConsoleEnabled" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
PropertyMappings.Add((Id=3,name="denyUrlOptions" ,MappingType=PVMT_RawValue,MinVal=0,MaxVal=1024))
PropertyMappings.Add((Id=4,name="denyConsoleCommands" ,MappingType=PVMT_RawValue,MinVal=0,MaxVal=1024))
PropertyMappings.Add((Id=104,name="bAdminConsoleCommandsHack" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
PropertyMappings.Add((Id=103,name="AdminCommandHandlerClass" ,MappingType=PVMT_RawValue,MinVal=0,MaxVal=256))
PropertyMappings.Add((Id=5,name="bEnableTeamChat" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
PropertyMappings.Add((Id=6,name="hideNews" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
// chatlog
Properties.Add((PropertyId=21,Data=(Type=SDT_String)))
Properties.Add((PropertyId=22,Data=(Type=SDT_Int32)))
Properties.Add((PropertyId=23,Data=(Type=SDT_Int32)))
PropertyMappings.Add((Id=21,name="chatLogFilename" ,MappingType=PVMT_RawValue,MinVal=0,MaxVal=256))
PropertyMappings.Add((Id=22,name="chatLogUnique" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
PropertyMappings.Add((Id=23,name="chatLogIncludeTimeStamp" ,MappingType=PVMT_IdMapped,ValueMappings=((Id=0 ),(Id=1 ))))
Properties.Add((PropertyId=31,Data=(Type=SDT_Int32)))
PropertyMappings.Add((Id=31,name="sessionOctetValidation" ,MappingType=PVMT_PredefinedValues,PredefinedValues=((Value1=0,Type=SDT_Int32),(Value1=1,Type=SDT_Int32),(Value1=2,Type=SDT_Int32),(Value1=3,Type=SDT_Int32),(Value1=4,Type=SDT_Int32)),MinVal=0,MaxVal=4,RangeIncrement=1))
Properties.Add((PropertyId=32,Data=(Type=SDT_Int32)))
PropertyMappings.Add((Id=32,name="MaxAuthFails",MappingType=PVMT_Ranged,MinVal=0,MaxVal=9999,RangeIncrement=1))
}