From 28853294e89b9d06f751cb864df7292355134504 Mon Sep 17 00:00:00 2001 From: cuihaikuo Date: Wed, 14 Nov 2018 15:32:52 +0800 Subject: [PATCH] Add rpc get_emailusers_in_list(). --- net/common/rpc-service.c | 16 ++++++++++++ net/common/rpc-service.h | 3 +++ net/server/user-mgr.c | 56 ++++++++++++++++++++++++++++++++++++++++ net/server/user-mgr.h | 5 ++++ python/ccnet/rpc.py | 4 +++ 5 files changed, 84 insertions(+) diff --git a/net/common/rpc-service.c b/net/common/rpc-service.c index 6be1454..8e25358 100644 --- a/net/common/rpc-service.c +++ b/net/common/rpc-service.c @@ -195,6 +195,10 @@ ccnet_start_rpc(CcnetSession *session) ccnet_rpc_get_superusers, "get_superusers", searpc_signature_objlist__void()); + searpc_server_register_function ("ccnet-threaded-rpcserver", + ccnet_rpc_get_emailusers_in_list, + "get_emailusers_in_list", + searpc_signature_objlist__string()); /* RSA sign a message with my private key. */ searpc_server_register_function ("ccnet-rpcserver", @@ -1700,4 +1704,16 @@ ccnet_rpc_get_groups_members (const char *group_ids, GError **error) return ccnet_group_manager_get_groups_members (group_mgr, group_ids, error); } +GList * +ccnet_rpc_get_emailusers_in_list(const char *user_list, GError **error) +{ + if (!user_list) { + g_set_error (error, CCNET_DOMAIN, CCNET_ERR_INTERNAL, "Bad arguments"); + return NULL; + } + CcnetUserManager *user_mgr = ((CcnetServerSession *)session)->user_mgr; + + return ccnet_user_manager_get_emailusers_in_list (user_mgr, user_list, error); +} + #endif /* CCNET_SERVER */ diff --git a/net/common/rpc-service.h b/net/common/rpc-service.h index a8d4897..f62e063 100644 --- a/net/common/rpc-service.h +++ b/net/common/rpc-service.h @@ -328,6 +328,9 @@ ccnet_rpc_set_reference_id (const char *primary_id, const char *reference_id, GE char * ccnet_rpc_get_primary_id (const char *email, GError **error); +GList * +ccnet_rpc_get_emailusers_in_list(const char *user_list, GError **error); + #endif /* CCNET_SERVER */ /** diff --git a/net/server/user-mgr.c b/net/server/user-mgr.c index 8a356f0..276b016 100644 --- a/net/server/user-mgr.c +++ b/net/server/user-mgr.c @@ -1901,3 +1901,59 @@ ccnet_user_manager_get_login_id (CcnetUserManager *manager, const char *primary_ #endif return g_strdup (primary_id); } + +GList * +ccnet_user_manager_get_emailusers_in_list (CcnetUserManager *manager, + const char *user_list, + GError **error) +{ + int i; + const char *username; + json_t *j_array = NULL, *j_obj; + json_error_t j_error; + GList *ret = NULL; + const char *args[20]; + + j_array = json_loadb (user_list, strlen(user_list), 0, &j_error); + if (!j_array) { + g_set_error (error, CCNET_DOMAIN, 0, "Bad args."); + return NULL; + } + /* Query 20 users at most. */ + size_t user_num = json_array_size (j_array); + if (user_num > 20) { + g_set_error (error, CCNET_DOMAIN, 0, "Number of users exceeds 20."); + json_decref (j_array); + return NULL; + } + GString *sql = g_string_new (""); + g_string_printf (sql, "SELECT e.id, e.email, is_staff, is_active, ctime, " + "role, passwd FROM EmailUser e " + "LEFT JOIN UserRole r ON e.email = r.email " + "WHERE e.email IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); + + for (i = 0; i < 20; i++) { + if (i < user_num) { + j_obj = json_array_get (j_array, i); + username = json_string_value(j_obj); + args[i] = username; + } else { + args[i] = ""; + } + } + json_decref (j_array); + + if (ccnet_db_statement_foreach_row (manager->priv->db, sql->str, get_emailusers_cb, &ret, 20, + "string", args[0], "string", args[1], "string", args[2], + "string", args[3], "string", args[4], "string", args[5], + "string", args[6], "string", args[7], "string", args[8], + "string", args[9], "string", args[10], "string", args[11], + "string", args[12], "string", args[13], "string", args[14], + "string", args[15], "string", args[16], "string", args[17], + "string", args[18], "string", args[19]) < 0) + ccnet_warning("Failed to get users in list %s.\n", user_list); + + g_string_free (sql, TRUE); + + return ret; +} diff --git a/net/server/user-mgr.h b/net/server/user-mgr.h index 2356e79..309b810 100644 --- a/net/server/user-mgr.h +++ b/net/server/user-mgr.h @@ -168,4 +168,9 @@ ccnet_user_manager_get_primary_id (CcnetUserManager *manager, char * ccnet_user_manager_get_login_id (CcnetUserManager *manager, const char *primary_id); + +GList * +ccnet_user_manager_get_emailusers_in_list (CcnetUserManager *manager, + const char *user_list, + GError **error); #endif diff --git a/python/ccnet/rpc.py b/python/ccnet/rpc.py index 4722d16..a7ca89e 100644 --- a/python/ccnet/rpc.py +++ b/python/ccnet/rpc.py @@ -450,3 +450,7 @@ class CcnetThreadedRpcClient(RpcClientBase): @searpc_func("objlist", ["string"]) def get_groups_members(self, group_ids): pass + + @searpc_func("objlist", ["string"]) + def get_emailusers_in_list(self, user_list): + pass