plugins/admin-flatfile/admin-simple.sp
author Scott Ehlert <ds@alliedmods.net>
Wed Aug 15 06:19:30 2007 +0000 (2007-08-15)
changeset 1330 ab94316bb52b
parent 1298 9cddbed74581
child 1403 ecb9c66fd4bb
permissions -rw-r--r--
Updated license headers on virtually all files with extremely minor changes in the name of some sort of strange consistency.
All plugin and include file headers also have been changed to say about GPL3 instead of GPL2.

(This day shall henceforth be known as the Eighty Column Massacre of '07)
dvander@637
     1
/**
ds@1330
     2
 * vim: set ts=4 :
ds@1330
     3
 * =============================================================================
ds@1330
     4
 * SourceMod Admin File Reader Plugin
dvander@637
     5
 * Reads the admins.cfg file.  Do not compile this directly.
ds@1330
     6
 *
ds@1330
     7
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
ds@1330
     8
 * =============================================================================
dvander@637
     9
 *
ds@1330
    10
 * This program is free software; you can redistribute it and/or modify it under
ds@1330
    11
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1330
    12
 * Free Software Foundation.
ds@1330
    13
 * 
ds@1330
    14
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1330
    15
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1330
    16
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1330
    17
 * details.
dvander@637
    18
 *
ds@1330
    19
 * You should have received a copy of the GNU General Public License along with
ds@1330
    20
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ds@1330
    21
 *
ds@1330
    22
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1330
    23
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1330
    24
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1330
    25
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1330
    26
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1330
    27
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1330
    28
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1330
    29
 * or <http://www.sourcemod.net/license.php>.
ds@908
    30
 *
ds@908
    31
 * Version: $Id$
dvander@637
    32
 */
ds@1330
    33
dvander@639
    34
public ReadSimpleUsers()
dvander@637
    35
{
dvander@637
    36
	BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/admins_simple.ini");
dvander@637
    37
	
dvander@637
    38
	new Handle:file = OpenFile(g_Filename, "rt");
dvander@637
    39
	if (file == INVALID_HANDLE)
dvander@637
    40
	{
dvander@637
    41
		ParseError("Could not open file!");
dvander@637
    42
		return;
dvander@637
    43
	}
dvander@637
    44
	
dvander@637
    45
	while (!IsEndOfFile(file))
dvander@637
    46
	{
dvander@637
    47
		decl String:line[255];
dvander@639
    48
		if (!ReadFileLine(file, line, sizeof(line)))
dvander@639
    49
		{
dvander@639
    50
			break;
dvander@639
    51
		}
dvander@637
    52
		
dvander@1107
    53
		/* Trim comments */
dvander@1107
    54
		new len = strlen(line);
dvander@1107
    55
		new bool:ignoring = false;
dvander@1107
    56
		for (new i=0; i<len; i++)
dvander@1107
    57
		{
dvander@1107
    58
			if (ignoring)
dvander@1107
    59
			{
dvander@1107
    60
				if (line[i] == '"')
dvander@1107
    61
				{
dvander@1107
    62
					ignoring = false;
dvander@1107
    63
				}
dvander@1107
    64
			} else {
dvander@1107
    65
				if (line[i] == '"')
dvander@1107
    66
				{
dvander@1107
    67
					ignoring = true;
dvander@1107
    68
				} else if (line[i] == ';') {
dvander@1107
    69
					line[i] = '\0';
dvander@1107
    70
					break;
dvander@1107
    71
				} else if (line[i] == '/'
dvander@1107
    72
							&& i != len - 1
dvander@1107
    73
							&& line[i+1] == '/')
dvander@1107
    74
				{
dvander@1107
    75
					line[i] = '\0';
dvander@1107
    76
					break;
dvander@1107
    77
				}
dvander@1107
    78
			}
dvander@1107
    79
		}
dvander@1107
    80
		
dvander@1107
    81
		TrimString(line);
dvander@1107
    82
		
dvander@637
    83
		if ((line[0] == '/' && line[1] == '/')
dvander@637
    84
			|| (line[0] == ';' || line[0] == '\0'))
dvander@637
    85
		{
dvander@637
    86
			continue;
dvander@637
    87
		}
dvander@637
    88
	
dvander@637
    89
		ReadAdminLine(line);
dvander@637
    90
	}
dvander@637
    91
	
dvander@637
    92
	CloseHandle(file);
dvander@637
    93
}
dvander@637
    94
dvander@637
    95
ReadAdminLine(const String:line[])
dvander@637
    96
{
dvander@637
    97
	new String:auth[64];
ds@1268
    98
	new cur_idx = BreakString(line, auth, sizeof(auth));
dvander@637
    99
	new idx = cur_idx;
dvander@637
   100
	
dvander@637
   101
	if (cur_idx == -1)
dvander@637
   102
	{
dvander@637
   103
		/* This line is bad... we need at least two parameters */
dvander@637
   104
		return;
dvander@637
   105
	}
dvander@637
   106
	
dvander@637
   107
	/* Create the admin */
dvander@637
   108
	new AdminId:admin = CreateAdmin(auth);
dvander@637
   109
	
dvander@637
   110
	/* Read flags */
dvander@637
   111
	new String:flags[64];	
ds@1268
   112
	cur_idx = BreakString(line[idx], flags, sizeof(flags));
dvander@637
   113
	idx += cur_idx;
dvander@637
   114
	
dvander@637
   115
	if (flags[0] == '@')
dvander@637
   116
	{
dvander@637
   117
		new GroupId:gid = FindAdmGroup(flags[1]);
dvander@637
   118
		if (gid == INVALID_GROUP_ID)
dvander@637
   119
		{
dvander@637
   120
			ParseError("Invalid group detected: %s", flags[1]);
dvander@637
   121
			return;
dvander@637
   122
		}
dvander@637
   123
		AdminInheritGroup(admin, gid);
dvander@637
   124
	} else {
dvander@637
   125
		new len = strlen(flags);
dvander@637
   126
		new bool:is_default = false;
dvander@637
   127
		for (new i=0; i<len; i++)
dvander@637
   128
		{
dvander@1298
   129
			if (flags[i] == '$')
dvander@637
   130
			{
dvander@1298
   131
				is_default = true;
dvander@1298
   132
			} else {
dvander@1298
   133
				new AdminFlag:flag;
dvander@1298
   134
				
dvander@1298
   135
				if (!FindFlagByChar(flags[i], flag))
dvander@637
   136
				{
dvander@637
   137
					ParseError("Invalid flag detected: %c", flags[i]);
dvander@1298
   138
					continue;
dvander@637
   139
				}
dvander@1298
   140
				SetAdminFlag(admin, flag, true);
dvander@637
   141
			}
dvander@637
   142
		}
dvander@637
   143
		
dvander@637
   144
		if (is_default)
dvander@637
   145
		{
dvander@637
   146
			new GroupId:gid = FindAdmGroup("Default");
dvander@637
   147
			if (gid != INVALID_GROUP_ID)
dvander@637
   148
			{
dvander@637
   149
				AdminInheritGroup(admin, gid);
dvander@637
   150
			}
dvander@637
   151
		}
dvander@637
   152
	}
dvander@637
   153
	
dvander@637
   154
	/* Lastly, is there a password? */
dvander@637
   155
	if (cur_idx != -1)
dvander@637
   156
	{
dvander@637
   157
		decl String:password[64];
ds@1268
   158
		BreakString(line[idx], password, sizeof(password));
dvander@637
   159
		SetAdminPassword(admin, password);
dvander@637
   160
	}
dvander@637
   161
	
dvander@637
   162
	/* Now, bind the identity to something */
dvander@637
   163
	if (StrContains(auth, "STEAM_") == 0)
dvander@637
   164
	{
dvander@637
   165
		BindAdminIdentity(admin, AUTHMETHOD_STEAM, auth);
dvander@637
   166
	} else {
dvander@637
   167
		if (auth[0] == '!')
dvander@637
   168
		{
dvander@637
   169
			BindAdminIdentity(admin, AUTHMETHOD_IP, auth[1]);
dvander@637
   170
		} else {
dvander@637
   171
			BindAdminIdentity(admin, AUTHMETHOD_NAME, auth);
dvander@637
   172
		}
dvander@637
   173
	}
dvander@637
   174
}