mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-04-28 03:20:10 +00:00
Merge branch '8.0'
This commit is contained in:
commit
85ead5e00e
@ -2769,7 +2769,6 @@ seaf_fs_manager_get_dirent_by_path (SeafFSManager *mgr,
|
||||
root_id, parent_dir, error);
|
||||
|
||||
if (!dir) {
|
||||
seaf_warning ("dir %s doesn't exist in repo %.8s.\n", parent_dir, repo_id);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1443,6 +1443,33 @@ ccnet_group_manager_get_groups_members (CcnetGroupManager *mgr, const char *grou
|
||||
return ret;
|
||||
}
|
||||
|
||||
GList*
|
||||
ccnet_group_manager_search_group_members (CcnetGroupManager *mgr,
|
||||
int group_id,
|
||||
const char *pattern)
|
||||
{
|
||||
CcnetDB *db = mgr->priv->db;
|
||||
GList *ret = NULL;
|
||||
char *sql;
|
||||
int rc;
|
||||
|
||||
char *db_patt = g_strdup_printf ("%%%s%%", pattern);
|
||||
|
||||
sql = "SELECT DISTINCT user_name FROM GroupUser "
|
||||
"WHERE group_id = ? AND user_name LIKE ? ORDER BY user_name";
|
||||
rc = seaf_db_statement_foreach_row (db, sql,
|
||||
get_groups_members_cb, &ret,
|
||||
2, "int", group_id, "string", db_patt);
|
||||
|
||||
g_free (db_patt);
|
||||
if (rc < 0) {
|
||||
g_list_free_full (ret, g_object_unref);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return g_list_reverse (ret);
|
||||
}
|
||||
|
||||
int
|
||||
ccnet_group_manager_update_group_user (CcnetGroupManager *mgr,
|
||||
const char *old_email,
|
||||
|
@ -130,6 +130,11 @@ ccnet_group_manager_search_groups (CcnetGroupManager *mgr,
|
||||
const char *keyword,
|
||||
int start, int limit);
|
||||
|
||||
GList*
|
||||
ccnet_group_manager_search_group_members (CcnetGroupManager *mgr,
|
||||
int group_id,
|
||||
const char *pattern);
|
||||
|
||||
GList *
|
||||
ccnet_group_manager_get_top_groups (CcnetGroupManager *mgr, gboolean including_org, GError **error);
|
||||
|
||||
|
@ -4696,6 +4696,17 @@ ccnet_rpc_search_groups (const char *group_patt,
|
||||
return groups;
|
||||
}
|
||||
|
||||
GList *
|
||||
ccnet_rpc_search_group_members (int group_id, const char *pattern, GError **error)
|
||||
{
|
||||
CcnetGroupManager *group_mgr = seaf->group_mgr;
|
||||
GList *ret = NULL;
|
||||
|
||||
ret = ccnet_group_manager_search_group_members (group_mgr, group_id, pattern);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
GList*
|
||||
ccnet_rpc_get_top_groups (int including_org, GError **error)
|
||||
{
|
||||
|
@ -1280,6 +1280,9 @@ ccnet_rpc_search_groups (const char *group_patt,
|
||||
GList *
|
||||
ccnet_rpc_get_groups_members (const char *group_ids, GError **error);
|
||||
|
||||
GList *
|
||||
ccnet_rpc_search_group_members (int group_id, const char *pattern, GError **error);
|
||||
|
||||
int
|
||||
ccnet_rpc_create_org (const char *org_name, const char *url_prefix,
|
||||
const char *creator, GError **error);
|
||||
|
@ -978,6 +978,10 @@ class SeafServerThreadedRpcClient(NamedPipeClient):
|
||||
def search_groups(self, group_patt, start, limit):
|
||||
pass
|
||||
|
||||
@searpc_func("objlist", ["int", "string"])
|
||||
def search_group_members(self, group_id, pattern):
|
||||
pass
|
||||
|
||||
@searpc_func("objlist", ["string"])
|
||||
def get_groups_members(self, group_ids):
|
||||
pass
|
||||
|
@ -935,6 +935,9 @@ class CcnetAPI(object):
|
||||
Search for groups whose name contains @group_patt.
|
||||
"""
|
||||
return ccnet_threaded_rpc.search_groups(group_patt, start, limit)
|
||||
|
||||
def search_group_members(self, group_id, pattern):
|
||||
return ccnet_threaded_rpc.search_group_members(group_id, pattern)
|
||||
|
||||
def get_top_groups(self, including_org=False):
|
||||
return ccnet_threaded_rpc.get_top_groups(1 if including_org else 0)
|
||||
|
@ -1209,7 +1209,6 @@ class SeafDavConfigurator(AbstractConfigurator):
|
||||
[WEBDAV]
|
||||
enabled = false
|
||||
port = 8080
|
||||
fastcgi = false
|
||||
share_name = /
|
||||
'''
|
||||
|
||||
|
@ -349,8 +349,6 @@ function gen_seafdav_conf () {
|
||||
[WEBDAV]
|
||||
enabled = false
|
||||
port = 8080
|
||||
fastcgi = false
|
||||
host = 0.0.0.0
|
||||
share_name = /
|
||||
EOF
|
||||
); then
|
||||
|
@ -930,6 +930,10 @@ static void start_rpc_service (const char *seafile_dir,
|
||||
ccnet_rpc_search_groups,
|
||||
"search_groups",
|
||||
searpc_signature_objlist__string_int_int());
|
||||
searpc_server_register_function ("seafserv-threaded-rpcserver",
|
||||
ccnet_rpc_search_group_members,
|
||||
"search_group_members",
|
||||
searpc_signature_objlist__int_string());
|
||||
searpc_server_register_function ("seafserv-threaded-rpcserver",
|
||||
ccnet_rpc_get_top_groups,
|
||||
"get_top_groups",
|
||||
|
@ -3,6 +3,7 @@ from seaserv import seafile_api as api
|
||||
from seaserv import ccnet_api
|
||||
|
||||
from tests.config import USER, USER2
|
||||
from tests.utils import randstring
|
||||
|
||||
def test_multi_tier_groups(repo):
|
||||
id1 = ccnet_api.create_group('group1', USER, parent_group_id=-1)
|
||||
@ -21,6 +22,12 @@ def test_multi_tier_groups(repo):
|
||||
assert group3.parent_group_id == id1
|
||||
assert group4.parent_group_id == id3
|
||||
|
||||
members = ccnet_api.search_group_members (id1, 'randgroup{}'.format(randstring(6)))
|
||||
assert len(members) == 0
|
||||
members = ccnet_api.search_group_members (id1, USER)
|
||||
assert len(members) == 1
|
||||
assert members[0].user_name == USER
|
||||
|
||||
ances_order = [id5, id4, id3, id2, id1]
|
||||
user2_groups_with_ancestors = ccnet_api.get_groups (USER2, return_ancestors = True)
|
||||
assert len(user2_groups_with_ancestors) == 5
|
||||
|
Loading…
Reference in New Issue
Block a user