2023-08-02 11:58:18 -04:00
|
|
|
/* parse.c
|
|
|
|
|
|
|
|
Probotic is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License version 3 only as
|
|
|
|
published by the Free Software Foundation.
|
|
|
|
|
|
|
|
Probotic is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License version 3 for more details.
|
|
|
|
|
|
|
|
The above copyright notice, this permission notice and the word
|
|
|
|
"NIGGER" shall be included in all copies or substantial portions
|
|
|
|
of the Software.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
version 3 + NIGGER along with Probotic.
|
|
|
|
|
|
|
|
*/
|
2023-08-02 10:44:10 -04:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
2023-08-02 11:48:30 -04:00
|
|
|
#include <string.h>
|
2023-08-02 10:44:10 -04:00
|
|
|
|
2023-08-02 11:48:30 -04:00
|
|
|
#include "parse.h"
|
2023-08-02 15:45:42 -04:00
|
|
|
#include "error.h"
|
2023-08-02 11:48:30 -04:00
|
|
|
|
2023-08-02 16:38:32 -04:00
|
|
|
DELC void
|
|
|
|
parse_command(char * cmd)
|
|
|
|
{
|
|
|
|
size_t i = 0;
|
|
|
|
/* size_t len = strlen(cmd); */
|
|
|
|
while (cmd[i] &&
|
|
|
|
cmd[i] != ' ')
|
|
|
|
{ ++i; }
|
|
|
|
if (cmd[i] == '\0')
|
|
|
|
{
|
|
|
|
/* no arguments */
|
|
|
|
if (strcmp(cmd, "remind") == 0)
|
|
|
|
{ ircmsg("%s: No current assignment", current_username); }
|
|
|
|
else if (strcmp(cmd, "next") == 0)
|
|
|
|
{ ircmsg("%s: No future assignments", current_username); }
|
|
|
|
else if (strcmp(cmd, "dump") == 0)
|
|
|
|
{ ircmsg("%s: All projects"); }
|
|
|
|
else if (strcmp(cmd, "reroll") == 0)
|
|
|
|
{ ircmsg("%s: No more rerolls possible.", current_username); }
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* some arguments */
|
|
|
|
char * arg = cmd + i + 1;
|
|
|
|
cmd[i] = '\0';
|
|
|
|
if (strcmp(cmd, "raw") == 0)
|
|
|
|
{ ircmsg("%s: Executing SQL `%s'", arg); }
|
|
|
|
else if (strcmp(cmd, "submit") == 0)
|
|
|
|
{ ircmsg("%s: Submitting project link '%s' to <random janny>",
|
|
|
|
current_username, arg); }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-02 15:03:27 -04:00
|
|
|
DELC int
|
2023-08-02 10:44:10 -04:00
|
|
|
parse_creds(creds_t * creds,
|
|
|
|
char const * creds_file)
|
|
|
|
{
|
2023-08-02 11:09:34 -04:00
|
|
|
FILE * stream;
|
|
|
|
size_t nread = 0;
|
|
|
|
|
|
|
|
creds->username = NULL;
|
|
|
|
creds->password = NULL;
|
|
|
|
|
|
|
|
stream = fopen(creds_file, "r");
|
|
|
|
if (stream == NULL)
|
|
|
|
{ PERROR(PROGN); }
|
|
|
|
|
|
|
|
if (getline(&(creds->username), &nread, stream) < 1)
|
|
|
|
{
|
|
|
|
ERRMSG("Cannot get username");
|
|
|
|
goto fail;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (getline(&(creds->password), &nread, stream) < 1)
|
|
|
|
{
|
2023-08-02 16:37:28 -04:00
|
|
|
/* Bot credentials file with an empty password is a valid case.
|
|
|
|
* Considering irc_connect api the pointer to the password should be NULL in that case.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Theoretically it can be allocated with an empty string */
|
|
|
|
free(creds->password);
|
|
|
|
creds->password = NULL;
|
2023-08-02 11:09:34 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
fclose(stream);
|
|
|
|
return 0;
|
|
|
|
|
2023-08-02 15:03:27 -04:00
|
|
|
/* Releasing everything in cause of a failure */
|
2023-08-02 10:44:10 -04:00
|
|
|
fail:
|
2023-08-02 11:09:34 -04:00
|
|
|
fclose(stream);
|
|
|
|
clean_creds(creds);
|
|
|
|
return 1;
|
2023-08-02 10:44:10 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
clean_creds(creds_t * creds)
|
|
|
|
{
|
2023-08-02 11:09:34 -04:00
|
|
|
/* Should we memset these? */
|
|
|
|
free(creds->username);
|
|
|
|
creds->username = NULL;
|
2023-08-02 10:44:10 -04:00
|
|
|
|
2023-08-02 11:09:34 -04:00
|
|
|
free(creds->password);
|
|
|
|
creds->password = NULL;
|
|
|
|
}
|