public/IAdminSystem.h
author Scott Ehlert <ds@alliedmods.net>
Mon Feb 05 08:58:03 2007 +0000 (2007-02-05)
changeset 432 77112e9620fa
parent 431 b74d813f23fb
child 433 d699e31199ad
permissions -rw-r--r--
Worst commit ever, but I have removed some unnecessary things
dvander@372
     1
/**
dvander@375
     2
 * vim: set ts=4 :
dvander@372
     3
 * ===============================================================
dvander@376
     4
 * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. 
dvander@376
     5
 * All rights reserved.
dvander@372
     6
 * ===============================================================
dvander@372
     7
 *
dvander@379
     8
 *  This file is part of the SourceMod/SourcePawn SDK.  This file may only be 
dvander@379
     9
 * used or modified under the Terms and Conditions of its License Agreement, 
dvander@379
    10
 * which is found in public/licenses/LICENSE.txt.  As of this notice, derivative 
dvander@379
    11
 * works must be licensed under the GNU General Public License (version 2 or 
dvander@379
    12
 * greater).  A copy of the GPL is included under public/licenses/GPL.txt.
dvander@379
    13
 * 
dvander@379
    14
 * To view the latest information, see: http://www.sourcemod.net/license.php
dvander@372
    15
 *
dvander@372
    16
 * Version: $Id$
dvander@372
    17
 */
dvander@372
    18
dvander@335
    19
#ifndef _INCLUDE_SOURCEMOD_ADMINISTRATION_SYSTEM_H_
dvander@335
    20
#define _INCLUDE_SOURCEMOD_ADMINISTRATION_SYSTEM_H_
dvander@335
    21
dvander@335
    22
#include <IShareSys.h>
dvander@335
    23
dvander@335
    24
#define SMINTERFACE_ADMINSYS_NAME		"IAdminSys"
dvander@335
    25
#define SMINTERFACE_ADMINSYS_VERSION	1
dvander@335
    26
dvander@335
    27
/**
dvander@372
    28
 * @file IAdminSystem.h
dvander@372
    29
 * @brief Defines the interface to manage the Admin Users/Groups and Override caches.
dvander@372
    30
 *
dvander@335
    31
 *   The administration system is more of a volatile cache than a system.  It is designed to be 
dvander@335
    32
 * temporary rather than permanent, in order to compensate for more storage methods.  For example,
dvander@335
    33
 * a flat file might be read into the cache all at once.  But a MySQL-based system might only cache
dvander@335
    34
 * admin permissions when that specific admin connects.  
dvander@335
    35
 *
dvander@335
    36
 *   The override cache is the simplest to explain.  Any time an override is added, any existing 
dvander@335
    37
 * and all future commands will gain a new access level set by the override.  If unset, the default
dvander@335
    38
 * access level is restored.  This cache is dynamically changeable.
dvander@335
    39
 *
dvander@335
    40
 *   The group cache contains, for each group:
dvander@335
    41
 *	1] A set of inherent flags - fully readable/writable.
dvander@335
    42
 *  2] An immunity table - insertion and retrieval only.
dvander@335
    43
 *  3] An override table - insertion and retrieval only.
dvander@335
    44
 *   Individual groups can be invalidated entirely.  It should be considered an expensive
dvander@335
    45
 *  operation, since each admin needs to be patched up to not reference the group.
dvander@404
    46
 *
dvander@404
    47
 *   For more information, see the SourceMod Development wiki.
dvander@335
    48
 */
dvander@335
    49
dvander@335
    50
namespace SourceMod
dvander@335
    51
{
dvander@372
    52
	/**
dvander@372
    53
	 * @brief Access levels (flags) for admins.
dvander@372
    54
	 */
dvander@335
    55
	enum AdminFlag
dvander@335
    56
	{
dvander@335
    57
		Admin_None = 0,
dvander@372
    58
		Admin_Reservation,		/**< Reserved slot */
dvander@372
    59
		Admin_Kick,				/**< Kick another user */
dvander@372
    60
		Admin_Ban,				/**< Ban another user */
dvander@372
    61
		Admin_Unban,			/**< Unban another user */
dvander@372
    62
		Admin_Slay,				/**< Slay/kill/damage another user */
dvander@372
    63
		Admin_Changemap,		/**< Change the map */
dvander@372
    64
		Admin_Convars,			/**< Change basic convars */
dvander@372
    65
		Admin_Configs,			/**< Change configs */
dvander@372
    66
		Admin_Chat,				/**< Special chat privileges */
dvander@372
    67
		Admin_Vote,				/**< Special vote privileges */
dvander@372
    68
		Admin_Password,			/**< Set a server password */
dvander@372
    69
		Admin_RCON,				/**< Use RCON */
dvander@372
    70
		Admin_Cheats,			/**< Change sv_cheats and use its commands */
dvander@372
    71
		Admin_Root,				/**< All access by default */
dvander@335
    72
		/* --- */
dvander@335
    73
		AdminFlags_TOTAL,
dvander@335
    74
	};
dvander@335
    75
dvander@372
    76
	/**
dvander@372
    77
	 * @brief Specifies which type of command to override (command or command group).
dvander@372
    78
	 */
dvander@335
    79
	enum OverrideType
dvander@335
    80
	{
dvander@372
    81
		Override_Command = 1,	/**< Command */
dvander@372
    82
		Override_CommandGroup,	/**< Command group */
dvander@335
    83
	};
dvander@335
    84
dvander@372
    85
	/**
dvander@372
    86
	 * @brief Specifies how a command is overridden for a user group.
dvander@372
    87
	 */
dvander@335
    88
	enum OverrideRule
dvander@335
    89
	{
dvander@372
    90
		Command_Deny = 0,		/**< Deny access */
dvander@372
    91
		Command_Allow = 1,		/**< Allow access */
dvander@335
    92
	};
dvander@335
    93
dvander@372
    94
	/**
dvander@372
    95
	 * @brief Specifies a generic immunity type.
dvander@372
    96
	 */
dvander@335
    97
	enum ImmunityType
dvander@335
    98
	{
dvander@372
    99
		Immunity_Default = 1,	/**< Immune from everyone with no immunity */
dvander@372
   100
		Immunity_Global,		/**< Immune from everyone (except root admins) */
dvander@335
   101
	};
dvander@335
   102
dvander@372
   103
	/**
dvander@404
   104
	 * @brief Defines user access modes.
dvander@404
   105
	 */
dvander@404
   106
	enum AccessMode
dvander@404
   107
	{
dvander@404
   108
		Access_Real,		/**< Access the user has inherently */
dvander@404
   109
		Access_Effective,	/**< Access the user has from their groups */
dvander@404
   110
	};
dvander@404
   111
dvander@404
   112
	/**
dvander@372
   113
	 * @brief Represents an index to one group.
dvander@372
   114
	 */
dvander@335
   115
	typedef int		GroupId;
dvander@335
   116
dvander@404
   117
	/**
dvander@404
   118
	 * @brief Represents an index to one user entry.
dvander@404
   119
	 */
dvander@404
   120
	typedef int		AdminId;
dvander@404
   121
dvander@336
   122
	#define ADMIN_CACHE_OVERRIDES	(1<<0)
dvander@336
   123
	#define ADMIN_CACHE_ADMINS		(1<<1)
dvander@336
   124
	#define ADMIN_CACHE_GROUPS		((1<<2)|ADMIN_CACHE_ADMINS)
dvander@336
   125
dvander@372
   126
	/**
dvander@372
   127
	 * @brief Represents an invalid/nonexistant group or an erroneous operation.
dvander@372
   128
	 */
dvander@335
   129
	#define INVALID_GROUP_ID	-1
dvander@335
   130
dvander@372
   131
	/**
dvander@404
   132
	 * @brief Represents an invalid/nonexistant user or an erroneous operation.
dvander@404
   133
	 */
dvander@404
   134
	#define INVALID_ADMIN_ID	-1
dvander@404
   135
dvander@404
   136
	/**
dvander@372
   137
	 * @brief Provides callbacks for admin cache operations.
dvander@372
   138
	 */
dvander@336
   139
	class IAdminListener
dvander@336
   140
	{
dvander@336
   141
	public:
dvander@336
   142
		/**
dvander@336
   143
		 * Called when part of the admin cache needs to be rebuilt.  
dvander@336
   144
		 * Groups should always be rebuilt before admins.
dvander@336
   145
		 *
dvander@336
   146
		 * @param cache_flags	Flags for which cache to dump.
dvander@336
   147
		 */
dvander@336
   148
		virtual void OnRebuildAdminCache(int cache_flags) =0;
dvander@336
   149
	};
dvander@336
   150
dvander@335
   151
	/**
dvander@372
   152
	 * @brief Provides functions for manipulating the admin options cache.
dvander@335
   153
	 */
dvander@335
   154
	class IAdminSystem : public SMInterface
dvander@335
   155
	{
dvander@335
   156
	public:
dvander@335
   157
		const char *GetInterfaceName()
dvander@335
   158
		{
dvander@335
   159
			return SMINTERFACE_ADMINSYS_NAME;
dvander@335
   160
		}
dvander@335
   161
		unsigned int GetInterfaceVersion()
dvander@335
   162
		{
dvander@335
   163
			return SMINTERFACE_ADMINSYS_VERSION;
dvander@335
   164
		}
dvander@335
   165
	public:
dvander@335
   166
		/**
dvander@335
   167
		 * @brief Adds a global command flag override.  Any command registered with this name
dvander@335
   168
		 * will assume the new flag.  This is applied retroactively as well.
dvander@335
   169
		 *
dvander@335
   170
		 * @param cmd			String containing command name (case sensitive).
dvander@335
   171
		 * @param type			Override type (specific command or group).
dvander@335
   172
		 * @param flag			New admin flag.
dvander@335
   173
		 */
dvander@335
   174
		virtual void AddCommandOverride(const char *cmd, OverrideType type, AdminFlag flag) =0;
dvander@335
   175
dvander@335
   176
		/**
dvander@335
   177
		 * @brief Returns a command override.
dvander@335
   178
		 *
dvander@335
   179
		 * @param cmd			String containing command name (case sensitive).
dvander@335
   180
		 * @param type			Override type (specific command or group).
dvander@335
   181
		 * @param pFlag			Optional pointer to the set flag.
dvander@335
   182
		 * @return				True if there is an override, false otherwise.
dvander@335
   183
		 */
dvander@335
   184
		virtual bool GetCommandOverride(const char *cmd, OverrideType type, AdminFlag *pFlag) =0;
dvander@335
   185
dvander@335
   186
		/**
dvander@335
   187
		 * @brief Unsets a command override.
dvander@335
   188
		 *
dvander@335
   189
		 * @param cmd			String containing command name (case sensitive).
dvander@335
   190
		 * @param type			Override type (specific command or group).
dvander@335
   191
		 */
dvander@335
   192
		virtual void UnsetCommandOverride(const char *cmd, OverrideType type) =0;
dvander@335
   193
dvander@335
   194
		/**
dvander@335
   195
		 * @brief Adds a new group.  Name must be unique.
dvander@335
   196
		 *
dvander@335
   197
		 * @param group_name	String containing the group name.
dvander@335
   198
		 * @return				A new group id, INVALID_GROUP_ID if it already exists.
dvander@335
   199
		 */
dvander@335
   200
		virtual GroupId AddGroup(const char *group_name) =0;
dvander@335
   201
dvander@335
   202
		/**
dvander@335
   203
		 * @brief Finds a group by name.
dvander@335
   204
		 *
dvander@335
   205
		 * @param group_name	String containing the group name.
dvander@335
   206
		 * @return				A group id, or INVALID_GROUP_ID if not found.
dvander@335
   207
		 */
dvander@335
   208
		virtual GroupId FindGroupByName(const char *group_name) =0;
dvander@335
   209
dvander@335
   210
		/**
dvander@335
   211
		 * @brief Adds or removes a flag from a group's flag set.
dvander@335
   212
		 * Note: These are called "add flags" because they add to a user's flags.
dvander@335
   213
		 *
dvander@335
   214
		 * @param id			Group id.
dvander@335
   215
		 * @param flag			Admin flag to toggle.
dvander@335
   216
		 * @param enabled		True to set the flag, false to unset/disable.
dvander@335
   217
		 */
dvander@335
   218
		virtual void SetGroupAddFlag(GroupId id, AdminFlag flag, bool enabled) =0;
dvander@335
   219
dvander@335
   220
		/**
dvander@335
   221
		 * @brief Gets the set value of an add flag on a group's flag set.
dvander@335
   222
		 *
dvander@335
   223
		 * @param id			Group id.
dvander@335
   224
		 * @param flag			Admin flag to retrieve.
dvander@335
   225
		 * @return				True if enabled, false otherwise,
dvander@335
   226
		 */
dvander@335
   227
		virtual bool GetGroupAddFlag(GroupId id, AdminFlag flag) =0;
dvander@335
   228
dvander@335
   229
		/**
dvander@336
   230
		 * @brief Returns an array of flag bits that are added to a user from their group.
dvander@335
   231
		 * Note: These are called "add flags" because they add to a user's flags.
dvander@335
   232
		 *
dvander@335
   233
		 * @param id			GroupId of the group.
dvander@336
   234
		 * @param flags			Array to store flags bits in.
dvander@335
   235
		 * @param total			Total number of flags that can be stored in the array.
dvander@335
   236
		 * @return				Number of flags that were written to the array.
dvander@335
   237
		 */
dvander@336
   238
		virtual unsigned int GetGroupAddFlagBits(GroupId id, bool flags[], unsigned int total) =0;
dvander@335
   239
dvander@335
   240
		/**
dvander@335
   241
		 * @brief Toggles a generic immunity type.
dvander@335
   242
		 *
dvander@335
   243
		 * @param id			Group id.
dvander@335
   244
		 * @param type			Generic immunity type.
dvander@335
   245
		 * @param enabled		True to enable, false otherwise.
dvander@335
   246
		 */
dvander@335
   247
		virtual void SetGroupGenericImmunity(GroupId id, ImmunityType type, bool enabled) =0;
dvander@335
   248
dvander@335
   249
		/**
dvander@335
   250
		 * @brief Returns whether or not a group has global immunity.
dvander@335
   251
		 *
dvander@335
   252
		 * @param id			Group id.
dvander@335
   253
		 * @param type			Generic immunity type.
dvander@335
   254
		 * @return				True if the group has this immunity, false otherwise.
dvander@335
   255
		 */
dvander@335
   256
		virtual bool GetGroupGenericImmunity(GroupId id, ImmunityType type) =0;
dvander@335
   257
dvander@335
   258
		/**
dvander@335
   259
		 * @brief Adds immunity to a specific group.
dvander@335
   260
		 *
dvander@335
   261
		 * @param id			Group id.
dvander@335
   262
		 * @param other_id		Group id to receive immunity to.
dvander@335
   263
		 */
dvander@335
   264
		virtual void AddGroupImmunity(GroupId id, GroupId other_id) =0;
dvander@335
   265
dvander@335
   266
		/**
dvander@335
   267
		 * @brief Returns the number of specific group immunities.
dvander@335
   268
		 *
dvander@335
   269
		 * @param id			Group id.
dvander@335
   270
		 * @return				Number of group immunities.
dvander@335
   271
		 */
dvander@335
   272
		virtual unsigned int GetGroupImmunityCount(GroupId id) =0;
dvander@335
   273
dvander@335
   274
		/**
dvander@335
   275
		 * @brief Returns a group that this group is immune to given an index.
dvander@335
   276
		 *
dvander@335
   277
		 * @param id			Group id.
dvander@335
   278
		 * @param number		Index from 0 to N-1, from GetGroupImmunities().
dvander@335
   279
		 * @return				GroupId that this group is immune to.
dvander@335
   280
		 */
dvander@335
   281
		virtual GroupId GetGroupImmunity(GroupId id, unsigned int number) =0;
dvander@335
   282
dvander@335
   283
		/**
dvander@335
   284
		 * @brief Adds a group-specific override type.
dvander@335
   285
		 *
dvander@335
   286
		 * @param id			Group id.
dvander@335
   287
		 * @param name			String containing command name (case sensitive).
dvander@335
   288
		 * @param type			Override type (specific command or group).
dvander@335
   289
		 * @param rule			Override allow/deny setting.
dvander@335
   290
		 */
dvander@335
   291
		virtual void AddGroupCommandOverride(GroupId id,
dvander@335
   292
											 const char *name,
dvander@335
   293
											 OverrideType type,
dvander@335
   294
											 OverrideRule rule) =0;
dvander@335
   295
dvander@335
   296
		/**
dvander@335
   297
		 * @brief Retrieves a group-specific command override.
dvander@335
   298
		 *
dvander@335
   299
		 * @param id			Group id.
dvander@335
   300
		 * @param name			String containing command name (case sensitive).
dvander@335
   301
		 * @param type			Override type (specific command or group).
dvander@372
   302
		 * @param pRule			Optional pointer to store allow/deny setting.
dvander@335
   303
		 * @return				True if an override exists, false otherwise.
dvander@335
   304
		 */
dvander@335
   305
		virtual bool GetGroupCommandOverride(GroupId id,
dvander@335
   306
											 const char *name,
dvander@335
   307
											 OverrideType type,
dvander@335
   308
											 OverrideRule *pRule) =0;
dvander@335
   309
dvander@335
   310
		/**
dvander@336
   311
		 * @brief Tells the admin system to dump a portion of the cache.  
dvander@336
   312
		 * This calls into plugin forwards to rebuild the cache.
dvander@336
   313
		 *
dvander@336
   314
		 * @param cache_flags	Flags for which cache to dump.  Specifying groups also dumps admins.
dvander@336
   315
		 * @param rebuild		If true, the rebuild forwards/events will fire.
dvander@335
   316
		 */
dvander@336
   317
		virtual void DumpAdminCache(int cache_flags, bool rebuild) =0;
dvander@336
   318
dvander@336
   319
		/**
dvander@336
   320
		 * @brief Adds an admin interface listener.
dvander@336
   321
		 *
dvander@336
   322
		 * @param pListener		Pointer to an IAdminListener to add.
dvander@336
   323
		 */
dvander@336
   324
		virtual void AddAdminListener(IAdminListener *pListener) =0;
dvander@336
   325
dvander@336
   326
		/**
dvander@336
   327
		 * @brief Removes an admin interface listener.
dvander@336
   328
		 *
dvander@336
   329
		 * @param pListener		Pointer to an IAdminListener to remove.
dvander@336
   330
		 */
dvander@336
   331
		virtual void RemoveAdminListener(IAdminListener *pListener) =0;
dvander@404
   332
dvander@404
   333
		/**
dvander@404
   334
		 * @brief Registers an authentication identity type.
dvander@404
   335
		 * Note: Default types are "steam," "name," and "ip."
dvander@404
   336
		 *
dvander@404
   337
		 * @param name			String containing the type name.
dvander@404
   338
		 */
dvander@404
   339
		virtual void RegisterAuthIdentType(const char *name) =0;
dvander@404
   340
dvander@404
   341
		/**
dvander@404
   342
		 * @brief Creates a new user entry.
dvander@404
   343
		 *
dvander@404
   344
		 * @param name		Name for this entry (does not have to be unique).
dvander@404
   345
		 *					Specify NULL for an anonymous admin.
dvander@404
   346
		 * @return			A new AdminId index.
dvander@404
   347
		 */
dvander@404
   348
		virtual AdminId CreateAdmin(const char *name) =0;
dvander@404
   349
dvander@404
   350
		/**
dvander@404
   351
		 * @brief Gets an admin's user name.
dvander@404
   352
		 *
dvander@404
   353
		 * @param id		AdminId index for this admin.
dvander@404
   354
		 * @return			A string containing the admin's name, or NULL
dvander@404
   355
		 *					if the admin was created anonymously.
dvander@404
   356
		 */
dvander@404
   357
		virtual const char *GetAdminName(AdminId id) =0;
dvander@404
   358
dvander@404
   359
		/**
dvander@404
   360
		 * @brief Binds a user entry to a particular auth method.
dvander@404
   361
		 * This bind must be unique.
dvander@404
   362
		 *
dvander@404
   363
		 * @param id		AdminId index of the admin.
dvander@404
   364
		 * @param auth		Auth method to use.
dvander@404
   365
		 * @param ident		Identity string to bind to.
dvander@404
   366
		 * @return			True on success, false if auth method was not found,
dvander@404
   367
		 *					id was invalid, or ident was already taken.
dvander@404
   368
		 */
dvander@404
   369
		virtual bool BindAdminIdentity(AdminId id, const char *auth, const char *ident) =0;
dvander@404
   370
dvander@404
   371
		/**
dvander@404
   372
		 * @brief Sets whether or not a flag is enabled on an admin.
dvander@404
   373
		 *
dvander@404
   374
		 * @param id		AdminId index of the admin.
dvander@404
   375
		 * @param flag		Admin flag to use.
dvander@404
   376
		 * @param enabled	True to enable, false to disable.
dvander@404
   377
		 */
dvander@404
   378
		virtual void SetAdminFlag(AdminId id, AdminFlag flag, bool enabled) =0;
dvander@404
   379
dvander@404
   380
		/**
dvander@404
   381
		 * @brief Returns whether or not a flag is enabled on an admin.
dvander@404
   382
		 *
dvander@404
   383
		 * @param id		AdminId index of the admin.
dvander@404
   384
		 * @param flag		Admin flag to use.
dvander@404
   385
		 * @param mode		Access mode to check.
dvander@404
   386
		 * @return			True if enabled, false otherwise.
dvander@404
   387
		 */
dvander@404
   388
		virtual bool GetAdminFlag(AdminId id, AdminFlag flag, AccessMode mode) =0;
dvander@404
   389
dvander@404
   390
		/**
dvander@404
   391
		 * @brief Returns a bitarray of flags enabled on an admin.
dvander@404
   392
		 *
dvander@404
   393
		 * @param id		AdminId index of the admin.
dvander@404
   394
		 * @param flag		Array to store flag bits in.
dvander@404
   395
		 * @param total		Maximum size of the flag array.
dvander@404
   396
		 * @param mode		Access mode to use.
dvander@404
   397
		 * @return			Number of flags written to the array.
dvander@404
   398
		 */
dvander@404
   399
		virtual unsigned int GetAdminFlags(AdminId id, 
dvander@404
   400
										   bool flags[], 
dvander@404
   401
										   unsigned int total, 
dvander@404
   402
										   AccessMode mode) =0;
dvander@404
   403
dvander@404
   404
		/**
dvander@404
   405
		 * @brief Adds a group to an admin's inherited group list.  
dvander@404
   406
		 * Any flags the group has will be added to the admin's effective flags.
dvander@404
   407
		 *
dvander@404
   408
		 * @param id		AdminId index of the admin.
dvander@404
   409
		 * @param gid		GroupId index of the group.
dvander@404
   410
		 * @return			True on success, false on invalid input or duplicate membership.
dvander@404
   411
		 */
dvander@404
   412
		virtual bool AdminInheritGroup(AdminId id, GroupId gid) =0;
dvander@404
   413
dvander@404
   414
		/**
dvander@404
   415
		 * @brief Returns the number of groups this admin is a member of.
dvander@404
   416
		 * 
dvander@404
   417
		 * @param id		AdminId index of the admin.
dvander@404
   418
		 * @return			Number of groups this admin is a member of.
dvander@404
   419
		 */
dvander@404
   420
		virtual unsigned int GetAdminGroupCount(AdminId id) =0;
dvander@404
   421
dvander@404
   422
		/**
dvander@404
   423
		 * @brief Returns group information from an admin.
dvander@404
   424
		 *
dvander@404
   425
		 * @param id		AdminId index of the admin.
dvander@404
   426
		 * @param index		Group number to retrieve, from 0 to N-1, where N
dvander@404
   427
		 *					is the value of GetAdminGroupCount(id).
dvander@404
   428
		 * @param name		Optional pointer to store the group's name.
dvander@404
   429
		 * @return			A GroupId index and a name pointer, or
dvander@404
   430
		 *					INVALID_GROUP_ID and NULL if an error occurred.
dvander@404
   431
		 */
dvander@404
   432
		virtual GroupId GetAdminGroup(AdminId id, unsigned int index, const char **name) =0;
dvander@404
   433
		
dvander@404
   434
		/**
dvander@404
   435
		 * @brief Sets a password on an admin.
dvander@404
   436
		 *
dvander@404
   437
		 * @param id		AdminId index of the admin.
dvander@404
   438
		 * @param passwd	String containing the password.
dvander@404
   439
		 */
dvander@404
   440
		virtual void SetAdminPassword(AdminId id, const char *password) =0;
dvander@404
   441
dvander@404
   442
		/**
dvander@404
   443
		 * @brief Gets an admin's password.
dvander@404
   444
		 *
dvander@404
   445
		 * @param id		AdminId index of the admin.
dvander@404
   446
		 * @return			Password of the admin, or NULL if none.
dvander@404
   447
		 */
dvander@404
   448
		virtual const char *GetAdminPassword(AdminId id) =0;
dvander@404
   449
		
dvander@404
   450
		/**
dvander@404
   451
		 * @brief Attempts to find an admin by an auth method and an identity.
dvander@404
   452
		 *
dvander@404
   453
		 * @param auth		Auth method to try.
dvander@404
   454
		 * @param identity	Identity string to look up.
dvander@404
   455
		 * @return			An AdminId index if found, INVALID_ADMIN_ID otherwise.
dvander@404
   456
		 */
dvander@404
   457
		virtual AdminId FindAdminByIdentity(const char *auth, const char *identity) =0;
dvander@404
   458
dvander@404
   459
		/**
dvander@404
   460
		 * @brief Invalidates an admin from the cache so its resources can be re-used.
dvander@404
   461
		 *
dvander@404
   462
		 * @param id		AdminId index to invalidate.
dvander@404
   463
		 * @return			True on success, false otherwise.
dvander@404
   464
		 */
dvander@404
   465
		virtual bool InvalidateAdmin(AdminId id) =0;
dvander@335
   466
	};
ds@432
   467
}
dvander@335
   468
dvander@335
   469
#endif //_INCLUDE_SOURCEMOD_ADMINISTRATION_SYSTEM_H_