summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorDavid M. Lee <dlee@digium.com>2013-07-11 14:39:55 +0000
committerDavid M. Lee <dlee@digium.com>2013-07-11 14:39:55 +0000
commit684481b74cb12d436200129818f57122797115c7 (patch)
treeddab3f27cf27e50d5034e728f5b5027e4d9fa604 /res
parentfb09d5bc60aabd133daca8ac7abc49980c10db8d (diff)
Change ARI user config to use a type field
When I initially wrote the configuration support for ARI users, I determined the section type by a category prefix (i.e., [user-admin]). This is neither idiomatic Asterisk configuration, nor is it really that user friendly. This patch replaces the category prefix with a type field in the section, which is much cleaner. Review: https://reviewboard.asterisk.org/r/2664/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@394076 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res')
-rw-r--r--res/res_stasis_http.c8
-rw-r--r--res/stasis_http/config.c23
2 files changed, 16 insertions, 15 deletions
diff --git a/res/res_stasis_http.c b/res/res_stasis_http.c
index f76752d3d..7cd92f48f 100644
--- a/res/res_stasis_http.c
+++ b/res/res_stasis_http.c
@@ -95,6 +95,14 @@
<configObject name="user">
<synopsis>Per-user configuration settings</synopsis>
+ <configOption name="type">
+ <synopsis>Define this configuration section as a user.</synopsis>
+ <description>
+ <enumlist>
+ <enum name="user"><para>Configure this section as a <replaceable>user</replaceable></para></enum>
+ </enumlist>
+ </description>
+ </configOption>
<configOption name="read_only">
<synopsis>When set to yes, user is only authorized for read-only requests</synopsis>
</configOption>
diff --git a/res/stasis_http/config.c b/res/stasis_http/config.c
index 09db01e84..2181907d5 100644
--- a/res/stasis_http/config.c
+++ b/res/stasis_http/config.c
@@ -89,19 +89,11 @@ static void user_dtor(void *obj)
static void *user_alloc(const char *cat)
{
RAII_VAR(struct ari_conf_user *, user, NULL, ao2_cleanup);
- const char *username;
if (!cat) {
return NULL;
}
- username = strchr(cat, '-') + 1;
-
- if (!username) {
- ast_log(LOG_ERROR, "Invalid user category '%s'\n", cat);
- return NULL;
- }
-
ast_debug(3, "Allocating user %s\n", cat);
user = ao2_alloc_options(sizeof(*user), user_dtor,
@@ -110,7 +102,7 @@ static void *user_alloc(const char *cat)
return NULL;
}
- user->username = ast_strdup(username);
+ user->username = ast_strdup(cat);
if (!user->username) {
return NULL;
}
@@ -141,21 +133,20 @@ static int user_sort_cmp(const void *obj_left, const void *obj_right, int flags)
/*! \brief \ref aco_type item_find function */
static void *user_find(struct ao2_container *tmp_container, const char *cat)
{
- const char *username;
-
if (!cat) {
return NULL;
}
- username = strchr(cat, '-') + 1;
- return ao2_find(tmp_container, username, OBJ_KEY);
+ return ao2_find(tmp_container, cat, OBJ_KEY);
}
static struct aco_type user_option = {
.type = ACO_ITEM,
.name = "user",
- .category_match = ACO_WHITELIST,
- .category = "^user-.+$",
+ .category_match = ACO_BLACKLIST,
+ .category = "^general$",
+ .matchfield = "type",
+ .matchvalue = "user",
.item_alloc = user_alloc,
.item_find = user_find,
.item_offset = offsetof(struct ari_conf, users),
@@ -318,6 +309,8 @@ int ari_config_init(void)
FLDSET(struct ari_conf_general, auth_realm),
ARI_AUTH_REALM_LEN);
+ aco_option_register(&cfg_info, "type", ACO_EXACT, user, NULL,
+ OPT_NOOP_T, 0, 0);
aco_option_register(&cfg_info, "read_only", ACO_EXACT, user,
"no", OPT_BOOL_T, 1,
FLDSET(struct ari_conf_user, read_only));