mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-26 20:31:30 +00:00
Merge branch 'http-downloads-auth' into 'master'
Command for http downloads with basic auth See merge request KartKrew/Kart-Public!233
This commit is contained in:
commit
a8b37c6ec3
3 changed files with 119 additions and 0 deletions
|
@ -3472,6 +3472,76 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_CURL
|
||||||
|
/** Add a login for HTTP downloads. If the
|
||||||
|
* user/password is missing, remove it.
|
||||||
|
*
|
||||||
|
* \sa Command_list_http_logins
|
||||||
|
*/
|
||||||
|
static void Command_set_http_login (void)
|
||||||
|
{
|
||||||
|
HTTP_login *login;
|
||||||
|
HTTP_login **prev_next;
|
||||||
|
|
||||||
|
if (COM_Argc() < 2)
|
||||||
|
{
|
||||||
|
CONS_Printf(
|
||||||
|
"set_http_login <URL> [user:password]: Set or remove a login to "
|
||||||
|
"authenticate HTTP downloads.\n"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
login = CURLGetLogin(COM_Argv(1), &prev_next);
|
||||||
|
|
||||||
|
if (COM_Argc() == 2)
|
||||||
|
{
|
||||||
|
if (login)
|
||||||
|
{
|
||||||
|
(*prev_next) = login->next;
|
||||||
|
CONS_Printf("Login for '%s' removed.\n", login->url);
|
||||||
|
Z_Free(login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (login)
|
||||||
|
Z_Free(login->auth);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
login = ZZ_Alloc(sizeof *login);
|
||||||
|
login->url = Z_StrDup(COM_Argv(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
login->auth = Z_StrDup(COM_Argv(2));
|
||||||
|
|
||||||
|
login->next = curl_logins;
|
||||||
|
curl_logins = login;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** List logins for HTTP downloads.
|
||||||
|
*
|
||||||
|
* \sa Command_set_http_login
|
||||||
|
*/
|
||||||
|
static void Command_list_http_logins (void)
|
||||||
|
{
|
||||||
|
HTTP_login *login;
|
||||||
|
|
||||||
|
for (
|
||||||
|
login = curl_logins;
|
||||||
|
login;
|
||||||
|
login = login->next
|
||||||
|
){
|
||||||
|
CONS_Printf(
|
||||||
|
"'%s' -> '%s'\n",
|
||||||
|
login->url,
|
||||||
|
login->auth
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif/*HAVE_CURL*/
|
||||||
|
|
||||||
static CV_PossibleValue_t netticbuffer_cons_t[] = {{0, "MIN"}, {3, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t netticbuffer_cons_t[] = {{0, "MIN"}, {3, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_netticbuffer = {"netticbuffer", "1", CV_SAVE, netticbuffer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_netticbuffer = {"netticbuffer", "1", CV_SAVE, netticbuffer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
|
@ -3540,6 +3610,10 @@ void D_ClientServerInit(void)
|
||||||
COM_AddCommand("reloadbans", Command_ReloadBan);
|
COM_AddCommand("reloadbans", Command_ReloadBan);
|
||||||
COM_AddCommand("connect", Command_connect);
|
COM_AddCommand("connect", Command_connect);
|
||||||
COM_AddCommand("nodes", Command_Nodes);
|
COM_AddCommand("nodes", Command_Nodes);
|
||||||
|
#ifdef HAVE_CURL
|
||||||
|
COM_AddCommand("set_http_login", Command_set_http_login);
|
||||||
|
COM_AddCommand("list_http_logins", Command_list_http_logins);
|
||||||
|
#endif
|
||||||
#ifdef PACKETDROP
|
#ifdef PACKETDROP
|
||||||
COM_AddCommand("drop", Command_Drop);
|
COM_AddCommand("drop", Command_Drop);
|
||||||
COM_AddCommand("droprate", Command_Droprate);
|
COM_AddCommand("droprate", Command_Droprate);
|
||||||
|
|
|
@ -128,6 +128,7 @@ static UINT32 curl_origfilesize;
|
||||||
static UINT32 curl_origtotalfilesize;
|
static UINT32 curl_origtotalfilesize;
|
||||||
static char *curl_realname = NULL;
|
static char *curl_realname = NULL;
|
||||||
fileneeded_t *curl_curfile = NULL;
|
fileneeded_t *curl_curfile = NULL;
|
||||||
|
HTTP_login *curl_logins;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Fills a serverinfo packet with information about wad files loaded.
|
/** Fills a serverinfo packet with information about wad files loaded.
|
||||||
|
@ -1082,6 +1083,8 @@ int curlprogress_callback(void *clientp, double dltotal, double dlnow, double ul
|
||||||
|
|
||||||
void CURLPrepareFile(const char* url, int dfilenum)
|
void CURLPrepareFile(const char* url, int dfilenum)
|
||||||
{
|
{
|
||||||
|
HTTP_login *login;
|
||||||
|
|
||||||
#ifdef PARANOIA
|
#ifdef PARANOIA
|
||||||
if (M_CheckParm("-nodownload"))
|
if (M_CheckParm("-nodownload"))
|
||||||
I_Error("Attempted to download files in -nodownload mode");
|
I_Error("Attempted to download files in -nodownload mode");
|
||||||
|
@ -1110,6 +1113,14 @@ void CURLPrepareFile(const char* url, int dfilenum)
|
||||||
|
|
||||||
curl_easy_setopt(http_handle, CURLOPT_USERAGENT, va("SRB2Kart/v%d.%d", VERSION, SUBVERSION)); // Set user agent as some servers won't accept invalid user agents.
|
curl_easy_setopt(http_handle, CURLOPT_USERAGENT, va("SRB2Kart/v%d.%d", VERSION, SUBVERSION)); // Set user agent as some servers won't accept invalid user agents.
|
||||||
|
|
||||||
|
// Authenticate if the user so wishes
|
||||||
|
login = CURLGetLogin(url, NULL);
|
||||||
|
|
||||||
|
if (login)
|
||||||
|
{
|
||||||
|
curl_easy_setopt(http_handle, CURLOPT_USERPWD, login->auth);
|
||||||
|
}
|
||||||
|
|
||||||
// Follow a redirect request, if sent by the server.
|
// Follow a redirect request, if sent by the server.
|
||||||
curl_easy_setopt(http_handle, CURLOPT_FOLLOWLOCATION, 1L);
|
curl_easy_setopt(http_handle, CURLOPT_FOLLOWLOCATION, 1L);
|
||||||
|
|
||||||
|
@ -1211,4 +1222,27 @@ void CURLGetFile(void)
|
||||||
curl_global_cleanup();
|
curl_global_cleanup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HTTP_login *
|
||||||
|
CURLGetLogin (const char *url, HTTP_login ***return_prev_next)
|
||||||
|
{
|
||||||
|
HTTP_login * login;
|
||||||
|
HTTP_login ** prev_next;
|
||||||
|
|
||||||
|
for (
|
||||||
|
prev_next = &curl_logins;
|
||||||
|
( login = (*prev_next));
|
||||||
|
prev_next = &login->next
|
||||||
|
){
|
||||||
|
if (strcmp(login->url, url) == 0)
|
||||||
|
{
|
||||||
|
if (return_prev_next)
|
||||||
|
(*return_prev_next) = prev_next;
|
||||||
|
|
||||||
|
return login;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -63,6 +63,16 @@ extern UINT32 totalfilesrequestedsize;
|
||||||
extern boolean curl_failedwebdownload;
|
extern boolean curl_failedwebdownload;
|
||||||
extern boolean curl_running;
|
extern boolean curl_running;
|
||||||
extern INT32 curl_transfers;
|
extern INT32 curl_transfers;
|
||||||
|
|
||||||
|
typedef struct HTTP_login HTTP_login;
|
||||||
|
|
||||||
|
extern struct HTTP_login
|
||||||
|
{
|
||||||
|
char * url;
|
||||||
|
char * auth;
|
||||||
|
HTTP_login * next;
|
||||||
|
}
|
||||||
|
*curl_logins;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UINT8 *PutFileNeeded(UINT16 firstfile);
|
UINT8 *PutFileNeeded(UINT16 firstfile);
|
||||||
|
@ -98,6 +108,7 @@ size_t nameonlylength(const char *s);
|
||||||
#ifdef HAVE_CURL
|
#ifdef HAVE_CURL
|
||||||
void CURLPrepareFile(const char* url, int dfilenum);
|
void CURLPrepareFile(const char* url, int dfilenum);
|
||||||
void CURLGetFile(void);
|
void CURLGetFile(void);
|
||||||
|
HTTP_login * CURLGetLogin (const char *url, HTTP_login ***return_prev_next);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // __D_NETFIL__
|
#endif // __D_NETFIL__
|
||||||
|
|
Loading…
Reference in a new issue