plugins/admin-flatfile/admin-simple.sp
author Michael McKoy <ferret99gt@gmail.com>
Wed Aug 08 23:35:16 2007 +0000 (2007-08-08)
changeset 1281 ebca4b94e0f9
parent 1268 9360f5ea2289
child 1298 9cddbed74581
permissions -rw-r--r--
Base Votes import.
dvander@637
     1
/**
dvander@637
     2
 * admin-simple.sp
dvander@637
     3
 * Reads the admins.cfg file.  Do not compile this directly.
dvander@637
     4
 * This file is part of SourceMod, Copyright (C) 2004-2007 AlliedModders LLC
dvander@637
     5
 *
dvander@637
     6
 * This program is free software; you can redistribute it and/or
dvander@637
     7
 * modify it under the terms of the GNU General Public License
dvander@637
     8
 * as published by the Free Software Foundation; either version 2
dvander@637
     9
 * of the License, or (at your option) any later version.
dvander@637
    10
 *
dvander@637
    11
 * This program is distributed in the hope that it will be useful,
dvander@637
    12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dvander@637
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dvander@637
    14
 * GNU General Public License for more details.
dvander@637
    15
 * 
dvander@637
    16
 * You should have received a copy of the GNU General Public License
dvander@637
    17
 * along with this program; if not, write to the Free Software
dvander@637
    18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
ds@908
    19
 *
ds@908
    20
 * Version: $Id$
dvander@637
    21
 */
dvander@639
    22
 
dvander@639
    23
public ReadSimpleUsers()
dvander@637
    24
{
dvander@637
    25
	BuildPath(Path_SM, g_Filename, sizeof(g_Filename), "configs/admins_simple.ini");
dvander@637
    26
	
dvander@637
    27
	new Handle:file = OpenFile(g_Filename, "rt");
dvander@637
    28
	if (file == INVALID_HANDLE)
dvander@637
    29
	{
dvander@637
    30
		ParseError("Could not open file!");
dvander@637
    31
		return;
dvander@637
    32
	}
dvander@637
    33
	
dvander@637
    34
	while (!IsEndOfFile(file))
dvander@637
    35
	{
dvander@637
    36
		decl String:line[255];
dvander@639
    37
		if (!ReadFileLine(file, line, sizeof(line)))
dvander@639
    38
		{
dvander@639
    39
			break;
dvander@639
    40
		}
dvander@637
    41
		
dvander@1107
    42
		/* Trim comments */
dvander@1107
    43
		new len = strlen(line);
dvander@1107
    44
		new bool:ignoring = false;
dvander@1107
    45
		for (new i=0; i<len; i++)
dvander@1107
    46
		{
dvander@1107
    47
			if (ignoring)
dvander@1107
    48
			{
dvander@1107
    49
				if (line[i] == '"')
dvander@1107
    50
				{
dvander@1107
    51
					ignoring = false;
dvander@1107
    52
				}
dvander@1107
    53
			} else {
dvander@1107
    54
				if (line[i] == '"')
dvander@1107
    55
				{
dvander@1107
    56
					ignoring = true;
dvander@1107
    57
				} else if (line[i] == ';') {
dvander@1107
    58
					line[i] = '\0';
dvander@1107
    59
					break;
dvander@1107
    60
				} else if (line[i] == '/'
dvander@1107
    61
							&& i != len - 1
dvander@1107
    62
							&& line[i+1] == '/')
dvander@1107
    63
				{
dvander@1107
    64
					line[i] = '\0';
dvander@1107
    65
					break;
dvander@1107
    66
				}
dvander@1107
    67
			}
dvander@1107
    68
		}
dvander@1107
    69
		
dvander@1107
    70
		TrimString(line);
dvander@1107
    71
		
dvander@637
    72
		if ((line[0] == '/' && line[1] == '/')
dvander@637
    73
			|| (line[0] == ';' || line[0] == '\0'))
dvander@637
    74
		{
dvander@637
    75
			continue;
dvander@637
    76
		}
dvander@637
    77
	
dvander@637
    78
		ReadAdminLine(line);
dvander@637
    79
	}
dvander@637
    80
	
dvander@637
    81
	CloseHandle(file);
dvander@637
    82
}
dvander@637
    83
dvander@637
    84
ReadAdminLine(const String:line[])
dvander@637
    85
{
dvander@637
    86
	new String:auth[64];
ds@1268
    87
	new cur_idx = BreakString(line, auth, sizeof(auth));
dvander@637
    88
	new idx = cur_idx;
dvander@637
    89
	
dvander@637
    90
	if (cur_idx == -1)
dvander@637
    91
	{
dvander@637
    92
		/* This line is bad... we need at least two parameters */
dvander@637
    93
		return;
dvander@637
    94
	}
dvander@637
    95
	
dvander@637
    96
	/* Create the admin */
dvander@637
    97
	new AdminId:admin = CreateAdmin(auth);
dvander@637
    98
	
dvander@637
    99
	/* Read flags */
dvander@637
   100
	new String:flags[64];	
ds@1268
   101
	cur_idx = BreakString(line[idx], flags, sizeof(flags));
dvander@637
   102
	idx += cur_idx;
dvander@637
   103
	
dvander@637
   104
	if (flags[0] == '@')
dvander@637
   105
	{
dvander@637
   106
		new GroupId:gid = FindAdmGroup(flags[1]);
dvander@637
   107
		if (gid == INVALID_GROUP_ID)
dvander@637
   108
		{
dvander@637
   109
			ParseError("Invalid group detected: %s", flags[1]);
dvander@637
   110
			return;
dvander@637
   111
		}
dvander@637
   112
		AdminInheritGroup(admin, gid);
dvander@637
   113
	} else {
dvander@637
   114
		new len = strlen(flags);
dvander@637
   115
		new bool:is_default = false;
dvander@637
   116
		for (new i=0; i<len; i++)
dvander@637
   117
		{
dvander@637
   118
			if (flags[i] < 'a' || flags[i] > 'z')
dvander@637
   119
			{
dvander@637
   120
				if (flags[i] == '$')
dvander@637
   121
				{
dvander@637
   122
					is_default = true;
dvander@637
   123
				} else {
dvander@637
   124
					ParseError("Invalid flag detected: %c", flags[i]);
dvander@637
   125
				}
dvander@637
   126
				continue;
dvander@637
   127
			}
dvander@637
   128
			new val = flags[i] - 'a';
dvander@637
   129
			if (!g_FlagsSet[val])
dvander@637
   130
			{
dvander@637
   131
				ParseError("Invalid flag detected: %c", flags[i]);
dvander@637
   132
				continue;
dvander@637
   133
			}
dvander@637
   134
			SetAdminFlag(admin, g_FlagLetters[val], true);
dvander@637
   135
		}
dvander@637
   136
		
dvander@637
   137
		if (is_default)
dvander@637
   138
		{
dvander@637
   139
			new GroupId:gid = FindAdmGroup("Default");
dvander@637
   140
			if (gid != INVALID_GROUP_ID)
dvander@637
   141
			{
dvander@637
   142
				AdminInheritGroup(admin, gid);
dvander@637
   143
			}
dvander@637
   144
		}
dvander@637
   145
	}
dvander@637
   146
	
dvander@637
   147
	/* Lastly, is there a password? */
dvander@637
   148
	if (cur_idx != -1)
dvander@637
   149
	{
dvander@637
   150
		decl String:password[64];
ds@1268
   151
		BreakString(line[idx], password, sizeof(password));
dvander@637
   152
		SetAdminPassword(admin, password);
dvander@637
   153
	}
dvander@637
   154
	
dvander@637
   155
	/* Now, bind the identity to something */
dvander@637
   156
	if (StrContains(auth, "STEAM_") == 0)
dvander@637
   157
	{
dvander@637
   158
		BindAdminIdentity(admin, AUTHMETHOD_STEAM, auth);
dvander@637
   159
	} else {
dvander@637
   160
		if (auth[0] == '!')
dvander@637
   161
		{
dvander@637
   162
			BindAdminIdentity(admin, AUTHMETHOD_IP, auth[1]);
dvander@637
   163
		} else {
dvander@637
   164
			BindAdminIdentity(admin, AUTHMETHOD_NAME, auth);
dvander@637
   165
		}
dvander@637
   166
	}
dvander@637
   167
}