void Server_Cmd_ENUMUSERS(tClient *Client, char *Args);
void Server_Cmd_USERINFO(tClient *Client, char *Args);
void _SendUserInfo(tClient *Client, int UserID);
+void Server_Cmd_USERADD(tClient *Client, char *Args);
+void Server_Cmd_USERFLAGS(tClient *Client, char *Args);
// --- Helpers ---
int sendf(int Socket, const char *Format, ...);
int GetUserAuth(const char *Salt, const char *Username, const uint8_t *Hash);
{"GIVE", Server_Cmd_GIVE},
{"ADD", Server_Cmd_ADD},
{"ENUM_USERS", Server_Cmd_ENUMUSERS},
- {"USER_INFO", Server_Cmd_USERINFO}
+ {"USER_INFO", Server_Cmd_USERINFO},
+ {"USER_ADD", Server_Cmd_USERADD},
+ {"USER_FLAGS", Server_Cmd_USERFLAGS}
};
#define NUM_COMMANDS (sizeof(gaServer_Commands)/sizeof(gaServer_Commands[0]))
int giServer_Socket;
{
char *space, *args;
int i;
+ #if 0
+ char **argList;
+ int numArgs = 0;
+ #endif
// Split at first space
space = strchr(CommandString, ' ');
else {
*space = '\0';
args = space + 1;
+ while( *space == ' ' ) space ++;
+
+ #if 0
+ // Count arguments
+ numArgs = 1;
+ for( i = 0; args[i]; )
+ {
+ while( CommandString[i] != ' ' ) {
+ if( CommandString[i] == '"' ) {
+ while( !(CommandString[i] != '\\' CommandString[i+1] == '"' ) )
+ i ++;
+ i ++;
+ }
+ i ++;
+ }
+ numArgs ++;
+ while( CommandString[i] == ' ' ) i ++;
+ }
+ #endif
}
+
// Find command
for( i = 0; i < NUM_COMMANDS; i++ )
{
}
// Get UID
- Client->UID = GetUserID( Args );
+ Client->UID = GetUserID( Args );
if( Client->UID < 0 ) {
if(giDebugLevel)
printf("Client %i: Unknown user '%s'\n", Client->ID, Args);
{
int i;
- sendf(Client->Socket, "201 Items %i", giNumItems);
+ sendf(Client->Socket, "201 Items %i\n", giNumItems);
for( i = 0; i < giNumItems; i ++ ) {
- sendf(Client->Socket, " %s:%i", gaItems[i].Handler->Name, gaItems[i].ID);
+ sendf(Client->Socket,
+ "202 Item %s:%i %i %s\n",
+ gaItems[i].Handler->Name, gaItems[i].ID, gaItems[i].Price, gaItems[i].Name
+ );
}
- sendf(Client->Socket, "\n");
+ sendf(Client->Socket, "200 List end\n");
}
tItem *_GetItemFromString(char *String)
int numUsr = GetMaxID();
// Parse arguments
- //minBal = atoi(Args);
+ if( Args && strlen(Args) )
+ {
+ char *min = Args, *max;
+
+ max = strchr(Args, ' ');
+ if( max ) {
+ *max = '\0';
+ max ++;
+ }
+
+ // If <minBal> != "-"
+ if( strcmp(min, "-") != 0 )
+ minBal = atoi(min);
+ // If <maxBal> != "-"
+ if( max && strcmp(max, "-") != 0 )
+ maxBal = atoi(max);
+ }
// Get return number
for( i = 0; i < numUsr; i ++ )
if( bal < minBal ) continue;
if( bal > maxBal ) continue;
- // TODO: User flags
_SendUserInfo(Client, i);
}
);
}
+void Server_Cmd_USERADD(tClient *Client, char *Args)
+{
+ char *username, *space;
+
+ // Check permissions
+ if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_WHEEL ) {
+ sendf(Client->Socket, "403 Not Wheel\n");
+ return ;
+ }
+
+ // Read arguments
+ username = Args;
+ while( *username == ' ' ) username ++;
+ space = strchr(username, ' ');
+ if(space) *space = '\0';
+
+ // Try to create user
+ if( CreateUser(username) == -1 ) {
+ sendf(Client->Socket, "404 User exists\n");
+ return ;
+ }
+
+ sendf(Client->Socket, "200 User Added\n");
+}
+
+void Server_Cmd_USERFLAGS(tClient *Client, char *Args)
+{
+ char *username, *flags;
+ char *space;
+
+ // Check permissions
+ if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_WHEEL ) {
+ sendf(Client->Socket, "403 Not Wheel\n");
+ return ;
+ }
+
+ // Read arguments
+ // - Username
+ username = Args;
+ while( *username == ' ' ) username ++;
+ space = strchr(username, ' ');
+ if(!space) {
+ sendf(Client->Socket, "407 USER_FLAGS requires 2 arguments, 1 given\n");
+ return ;
+ }
+ // - Flags
+ flags = space + 1;
+ while( *flags == ' ' ) flags ++;
+ space = strchr(flags, ' ');
+ if(space) *space = '\0';
+
+ printf("Username = '%s', flags = '%s'\n", username, flags);
+
+ sendf(Client->Socket, "200 User Updated\n");
+}
+
/**
* \brief Authenticate a user
* \return User ID, or -1 if authentication failed
return GetUserID("tpg");
#endif
#if HACK_ROOT_NOAUTH
- if( strcmp(Username, "root") == 0 )
- return GetUserID("root");
+ if( strcmp(Username, "root") == 0 ) {
+ int ret = GetUserID("root");
+ if( ret == -1 )
+ return CreateUser("root");
+ return ret;
+ }
#endif
#if 0