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

166 lines
2.8 KiB
Ucode

/**
* A administrator record
*
* Copyright 2008 Epic Games, Inc. All Rights Reserved
*
* @author Michiel 'elmuerte' Hendriks
*/
class MultiAdminData extends Object perobjectconfig config(MultiAdmin);
`include(WebAdmin.uci)
/**
* The name to show. It does not have to be the same as the login name.
*/
var config string DisplayName;
/**
* The password for this user
*/
var private config string Password;
/**
* Which list to process first
*/
enum EAccessOrder
{
DenyAllow,
AllowDeny,
};
/**
* Sets the order in which the allow and deny options should be processed
*/
var config EAccessOrder Order;
/**
* URL segments to allow or deny. An empty list means "all".
*/
var config array<string> Allow, Deny;
/**
* if true this account is enabled
*/
var config bool bEnabled;
var array<string> cacheDenied;
var array<string> cacheAllowed;
/**
* return the display name
*/
function string getDisplayName()
{
if (len(DisplayName) == 0)
{
return string(name);
}
return DisplayName;
}
function setPassword(string pw)
{
if (len(pw) > 0)
{
Password = pw;
}
}
/**
* return true when the password matches
*/
function bool matchesPassword(string pw)
{
if (!bEnabled) return false;
if (len(password) == 40) // sha1 hash
{
return (Caps(Password) == Caps(pw));
}
return (Password == pw) && (len(pw) > 0);
}
/**
* Return true if this user can access this location. This is just the path part
* not the full uri as the IWebAdminUser gets.
*/
function bool canAccess(string loc)
{
local bool retval;
if (!bEnabled) return false;
if (cacheAllowed.find(loc) != INDEX_NONE) {
return true;
}
if (cacheDenied.find(loc) != INDEX_NONE) {
return false;
}
retval = internalCanAccess(loc);
if (retval) {
cacheAllowed.addItem(loc);
}
else {
cacheDenied.addItem(loc);
}
return retval;
}
protected function bool internalCanAccess(string loc)
{
if (Order == DenyAllow)
{
if (matchDenied(loc))
{
if (!matchAllowed(loc)) return false;
}
return true;
}
else if (Order == AllowDeny)
{
if (matchAllowed(loc)) return true;
if (matchDenied(loc)) return false;
return false;
}
return true;
}
/**
* True if the uri matches any entry
*/
function bool matchAllowed(string loc)
{
local string m;
foreach Allow(m)
{
if (class'WebAdminUtils'.static.maskedCompare(loc, m, true))
{
return true;
}
}
return false;
}
/**
* True if the uri matches any denied entry
*/
function bool matchDenied(string loc)
{
local string m;
foreach Deny(m)
{
if (class'WebAdminUtils'.static.maskedCompare(loc, m, true))
{
return true;
}
}
return false;
}
function clearAuthCache()
{
cacheDenied.length = 0;
cacheAllowed.length = 0;
}
defaultproperties
{
}