mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
func_curl: Allow auth methods to be set.
Currently the CURL function only supports Basic Authentication, the default auth method in libcurl. Add an option that also allows enabling digest authentication. Resolves: #1332 UserNote: The httpauth field in CURLOPT now allows the authentication methods to be set.
This commit is contained in:
@@ -131,6 +131,15 @@
|
||||
<para>Include header information in the result
|
||||
(boolean)</para>
|
||||
</enum>
|
||||
<enum name="httpauth">
|
||||
<para>Type of authentication method to use. The default is Basic Authentication.</para>
|
||||
<para>Multiple values can be specified to enable multiple authentication methods.
|
||||
To do so, invoke CURLOPT once using comma-separated values.</para>
|
||||
<enumlist>
|
||||
<enum name="basic" />
|
||||
<enum name="digest" />
|
||||
</enumlist>
|
||||
</enum>
|
||||
<enum name="httpheader">
|
||||
<para>Add HTTP header. Multiple calls add multiple headers.
|
||||
Setting of any header will remove the default
|
||||
@@ -308,6 +317,9 @@ static int parse_curlopt_key(const char *name, CURLoption *key, enum optiontype
|
||||
} else if (!strcasecmp(name, "httpheader")) {
|
||||
*key = CURLOPT_HTTPHEADER;
|
||||
*ot = OT_STRING;
|
||||
} else if (!strcasecmp(name, "httpauth")) {
|
||||
*key = CURLOPT_HTTPAUTH;
|
||||
*ot = OT_ENUM;
|
||||
} else if (!strcasecmp(name, "proxy")) {
|
||||
*key = CURLOPT_PROXY;
|
||||
*ot = OT_STRING;
|
||||
@@ -489,6 +501,25 @@ static int acf_curlopt_write(struct ast_channel *chan, const char *cmd, char *na
|
||||
if ((new = ast_calloc(1, sizeof(*new)))) {
|
||||
new->value = (void *)ptype;
|
||||
}
|
||||
} else if (key == CURLOPT_HTTPAUTH) {
|
||||
long authtype = 0;
|
||||
char *authmethod, *authstr = ast_strdupa(value);
|
||||
while ((authmethod = strsep(&authstr, ","))) {
|
||||
if (!strcasecmp(authmethod, "basic")) {
|
||||
authtype |= CURLAUTH_BASIC;
|
||||
} else if (!strcasecmp(authmethod, "digest")) {
|
||||
authtype |= CURLAUTH_DIGEST;
|
||||
} else {
|
||||
ast_log(LOG_WARNING, "Auth method '%s' invalid or not supported\n", authmethod);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (!authmethod) {
|
||||
ast_log(LOG_WARNING, "Auth method '%s' invalid or not supported\n", value);
|
||||
}
|
||||
if ((new = ast_calloc(1, sizeof(*new)))) {
|
||||
new->value = (void *)authtype;
|
||||
}
|
||||
} else if (key == CURLOPT_SPECIAL_HASHCOMPAT) {
|
||||
if ((new = ast_calloc(1, sizeof(*new)))) {
|
||||
new->value = (void *) (long) (!strcasecmp(value, "legacy") ? HASHCOMPAT_LEGACY : ast_true(value) ? HASHCOMPAT_YES : HASHCOMPAT_NO);
|
||||
|
Reference in New Issue
Block a user