1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-09-03 08:24:27 +00:00

Add rpc for getting shared users.

This commit is contained in:
cuihaikuo
2018-05-17 11:52:21 +08:00
parent 93e900eeaa
commit 3fd9ecb481
7 changed files with 123 additions and 0 deletions

View File

@@ -5243,4 +5243,30 @@ seafile_get_org_group_repos_by_user (const char *user, int org_id, GError **erro
return seaf_get_group_repos_by_user (mgr, user, org_id, error);
}
GList *
seafile_get_shared_users_by_repo (const char *repo_id, GError **error)
{
if (!repo_id) {
g_set_error (error, 0, SEAF_ERR_BAD_ARGS, "Arguments error");
return NULL;
}
return seaf_share_manager_get_shared_users_by_repo (seaf->share_mgr,
repo_id);
}
GList *
seafile_org_get_shared_users_by_repo (int org_id,
const char *repo_id,
GError **error)
{
if (!repo_id || org_id < 0) {
g_set_error (error, 0, SEAF_ERR_BAD_ARGS, "Arguments error");
return NULL;
}
return seaf_share_manager_org_get_shared_users_by_repo (seaf->share_mgr,
org_id, repo_id);
}
#endif /* SEAFILE_SERVER */

View File

@@ -1091,4 +1091,12 @@ seafile_get_group_repos_by_user (const char *user, GError **error);
GList *
seafile_get_org_group_repos_by_user (const char *user, int org_id, GError **error);
GList *
seafile_get_shared_users_by_repo (const char *repo_id, GError **error);
GList *
seafile_org_get_shared_users_by_repo (int org_id,
const char *repo_id,
GError **error);
#endif

View File

@@ -1025,3 +1025,11 @@ class SeafServerThreadedRpcClient(ccnet.RpcClientBase):
@searpc_func("int", ["string", "string", "int"])
def set_server_config_boolean (group, key, value):
pass
@searpc_func("objlist", ["string"])
def get_shared_users_by_repo (repo_id):
pass
@searpc_func("objlist", ["int", "string"])
def org_get_shared_users_by_repo (org_id, repo_id):
pass

View File

@@ -737,6 +737,12 @@ class SeafileAPI(object):
def del_org_group_repo(self, repo_id, org_id, group_id):
seafserv_threaded_rpc.del_org_group_repo(repo_id, org_id, group_id)
def get_shared_users_by_repo(self, repo_id):
return seafserv_threaded_rpc.get_shared_users_by_repo (repo_id)
def org_get_shared_users_by_repo(self, org_id, repo_id):
return seafserv_threaded_rpc.org_get_shared_users_by_repo(org_id, repo_id)
seafile_api = SeafileAPI()
class CcnetAPI(object):

View File

@@ -420,6 +420,14 @@ static void start_rpc_service (CcnetClient *client, int cloud_mode)
seafile_get_shared_repo_by_path,
"get_shared_repo_by_path",
searpc_signature_object__string_string_string_int());
searpc_server_register_function ("seafserv-threaded-rpcserver",
seafile_get_shared_users_by_repo,
"get_shared_users_by_repo",
searpc_signature_objlist__string());
searpc_server_register_function ("seafserv-threaded-rpcserver",
seafile_org_get_shared_users_by_repo,
"org_get_shared_users_by_repo",
searpc_signature_objlist__int_string());
/* share repo to group */
searpc_server_register_function ("seafserv-threaded-rpcserver",

View File

@@ -758,3 +758,61 @@ seaf_share_manager_unshare_group_subdir (SeafShareManager* mgr,
return 0;
}
gboolean
get_shared_users_cb (SeafDBRow *row, void *data)
{
GList **users = data;
const char *repo_id = seaf_db_row_get_column_text (row, 0);
const char *user = seaf_db_row_get_column_text (row, 1);
const char *perm = seaf_db_row_get_column_text (row, 2);
SeafileSharedUser *uobj = g_object_new (SEAFILE_TYPE_SHARED_USER,
"repo_id", repo_id,
"user", user,
"perm", perm,
NULL);
*users = g_list_append (*users, uobj);
return TRUE;
}
GList *
seaf_share_manager_org_get_shared_users_by_repo (SeafShareManager* mgr,
int org_id,
const char *repo_id)
{
GList *users = NULL;
char *sql = "SELECT repo_id, to_email, permission FROM OrgSharedRepo WHERE org_id=? AND "
"repo_id=?";
int ret = seaf_db_statement_foreach_row (mgr->seaf->db, sql,
get_shared_users_cb, &users,
2, "int", org_id, "string", repo_id);
if (ret < 0) {
seaf_warning("Failed to get users by repo_id[%s], org_id[%d]\n",
repo_id, org_id);
return NULL;
}
return users;
}
GList *
seaf_share_manager_get_shared_users_by_repo(SeafShareManager* mgr,
const char *repo_id)
{
GList *users = NULL;
char *sql = "SELECT repo_id, to_email, permission FROM SharedRepo WHERE "
"repo_id=?";
int ret = seaf_db_statement_foreach_row (mgr->seaf->db, sql,
get_shared_users_cb, &users,
1, "string", repo_id);
if (ret < 0) {
seaf_warning("Failed to get users by repo_id[%s]\n", repo_id);
return NULL;
}
return users;
}

View File

@@ -102,5 +102,14 @@ seaf_share_manager_unshare_group_subdir (SeafShareManager* mgr,
const char *owner,
int group_id);
GList *
seaf_share_manager_org_get_shared_users_by_repo (SeafShareManager* mgr,
int org_id,
const char *repo_id);
GList *
seaf_share_manager_get_shared_users_by_repo (SeafShareManager* mgr,
const char *repo_id);
#endif /* SHARE_MGR_H */