diff options
author | David M. Lee <dlee@digium.com> | 2013-07-11 14:39:55 +0000 |
---|---|---|
committer | David M. Lee <dlee@digium.com> | 2013-07-11 14:39:55 +0000 |
commit | 684481b74cb12d436200129818f57122797115c7 (patch) | |
tree | ddab3f27cf27e50d5034e728f5b5027e4d9fa604 /res | |
parent | fb09d5bc60aabd133daca8ac7abc49980c10db8d (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.c | 8 | ||||
-rw-r--r-- | res/stasis_http/config.c | 23 |
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)); |