mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-09-19 08:58:46 +00:00
Add rpc for setting role quota
This commit is contained in:
@@ -108,7 +108,7 @@ ccnet_start_rpc(CcnetSession *session)
|
|||||||
ccnet_rpc_remove_role,
|
ccnet_rpc_remove_role,
|
||||||
"remove_role",
|
"remove_role",
|
||||||
searpc_signature_int__string_string());
|
searpc_signature_int__string_string());
|
||||||
|
|
||||||
|
|
||||||
searpc_server_register_function ("ccnet-rpcserver",
|
searpc_server_register_function ("ccnet-rpcserver",
|
||||||
ccnet_rpc_get_config,
|
ccnet_rpc_get_config,
|
||||||
@@ -280,6 +280,10 @@ ccnet_start_rpc(CcnetSession *session)
|
|||||||
ccnet_rpc_search_groups,
|
ccnet_rpc_search_groups,
|
||||||
"search_groups",
|
"search_groups",
|
||||||
searpc_signature_objlist__string_int_int());
|
searpc_signature_objlist__string_int_int());
|
||||||
|
searpc_server_register_function ("ccnet-threaded-rpcserver",
|
||||||
|
ccnet_rpc_set_role_quota,
|
||||||
|
"set_role_quota",
|
||||||
|
searpc_signature_int__string_int64());
|
||||||
|
|
||||||
searpc_server_register_function ("ccnet-threaded-rpcserver",
|
searpc_server_register_function ("ccnet-threaded-rpcserver",
|
||||||
ccnet_rpc_create_org,
|
ccnet_rpc_create_org,
|
||||||
@@ -1564,5 +1568,18 @@ ccnet_rpc_set_org_name (int org_id, const char *org_name, GError **error)
|
|||||||
return ccnet_org_manager_set_org_name (org_mgr, org_id, org_name, error);
|
return ccnet_org_manager_set_org_name (org_mgr, org_id, org_name, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ccnet_rpc_set_role_quota (const char *role, gint64 quota, GError **error)
|
||||||
|
{
|
||||||
|
CcnetUserManager *user_mgr =
|
||||||
|
((CcnetServerSession *)session)->user_mgr;
|
||||||
|
|
||||||
|
if (quota < 0 || !role) {
|
||||||
|
g_set_error (error, CCNET_DOMAIN, CCNET_ERR_INTERNAL, "Bad arguments");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ccnet_user_manager_set_role_quota (user_mgr, role, quota);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CCNET_SERVER */
|
#endif /* CCNET_SERVER */
|
||||||
|
@@ -320,4 +320,7 @@ ccnet_rpc_login_relay (const char *relay_id, const char *email,
|
|||||||
int
|
int
|
||||||
ccnet_rpc_logout_relay (const char *relay_id, GError **error);
|
ccnet_rpc_logout_relay (const char *relay_id, GError **error);
|
||||||
|
|
||||||
|
int
|
||||||
|
ccnet_rpc_set_role_quota (const char *role, gint64 quota, GError **error);
|
||||||
|
|
||||||
#endif /* RPC_SERVICE_H */
|
#endif /* RPC_SERVICE_H */
|
||||||
|
@@ -564,6 +564,12 @@ static int check_db_table (CcnetDB *db)
|
|||||||
if (ccnet_db_query (db, sql) < 0)
|
if (ccnet_db_query (db, sql) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
sql = "CREATE TABLE IF NOT EXISTS RoleQuota ("
|
||||||
|
"role VARCHAR(255) NOT NULL PRIMARY KEY, "
|
||||||
|
"quota BIGINT, UNIQUE INDEX(role)) ENGINE=INNODB";
|
||||||
|
if (ccnet_db_query (db, sql) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
} else if (db_type == CCNET_DB_TYPE_SQLITE) {
|
} else if (db_type == CCNET_DB_TYPE_SQLITE) {
|
||||||
sql = "CREATE TABLE IF NOT EXISTS EmailUser ("
|
sql = "CREATE TABLE IF NOT EXISTS EmailUser ("
|
||||||
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
|
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
|
||||||
@@ -611,6 +617,16 @@ static int check_db_table (CcnetDB *db)
|
|||||||
if (ccnet_db_query (db, sql) < 0)
|
if (ccnet_db_query (db, sql) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
sql = "CREATE TABLE IF NOT EXISTS RoleQuota ("
|
||||||
|
"role TEXT NOT NULL PRIMARY KEY, "
|
||||||
|
"quota BIGINT)";
|
||||||
|
if (ccnet_db_query (db, sql) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
sql = "CREATE UNIQUE INDEX IF NOT EXISTS rolequota_index on RoleQuota (role)";
|
||||||
|
if (ccnet_db_query (db, sql) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
} else if (db_type == CCNET_DB_TYPE_PGSQL) {
|
} else if (db_type == CCNET_DB_TYPE_PGSQL) {
|
||||||
sql = "CREATE TABLE IF NOT EXISTS EmailUser ("
|
sql = "CREATE TABLE IF NOT EXISTS EmailUser ("
|
||||||
"id SERIAL PRIMARY KEY, "
|
"id SERIAL PRIMARY KEY, "
|
||||||
@@ -647,6 +663,11 @@ static int check_db_table (CcnetDB *db)
|
|||||||
if (ccnet_db_query (db, sql) < 0)
|
if (ccnet_db_query (db, sql) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sql = "CREATE TABLE IF NOT EXISTS RoleQuota ("
|
||||||
|
"role VARCHAR(255) NOT NULL, quota BIGINT, UNIQUE (role))";
|
||||||
|
if (ccnet_db_query (db, sql) < 0)
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1696,3 +1717,44 @@ ccnet_user_manager_get_superusers(CcnetUserManager *manager)
|
|||||||
|
|
||||||
return g_list_reverse (ret);
|
return g_list_reverse (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ccnet_user_manager_set_role_quota (CcnetUserManager *manager,
|
||||||
|
const char *role,
|
||||||
|
gint64 quota)
|
||||||
|
{
|
||||||
|
CcnetDB *db = manager->priv->db;
|
||||||
|
gint64 old_quota = ccnet_user_manager_get_role_quota (manager, role);
|
||||||
|
if (old_quota > 0)
|
||||||
|
return ccnet_db_statement_query (db, "UPDATE RoleQuota SET quota=? "
|
||||||
|
"WHERE role=?",
|
||||||
|
2, "int64", quota, "string", role);
|
||||||
|
else
|
||||||
|
return ccnet_db_statement_query (db, "INSERT INTO RoleQuota(role, quota)"
|
||||||
|
" VALUES (?, ?)",
|
||||||
|
2, "string", role, "int64", quota);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
get_role_quota_cb (CcnetDBRow *row, void *data)
|
||||||
|
{
|
||||||
|
*((gint64 **)data) = ccnet_db_row_get_column_int64 (row, 0);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gint64
|
||||||
|
ccnet_user_manager_get_role_quota (CcnetUserManager *manager,
|
||||||
|
const char *role)
|
||||||
|
{
|
||||||
|
CcnetDB *db = manager->priv->db;
|
||||||
|
const char *sql;
|
||||||
|
gint64 quota;
|
||||||
|
|
||||||
|
sql = "SELECT quota FROM RoleQuota WHERE role=?";
|
||||||
|
if (ccnet_db_statement_foreach_row (db, sql, get_role_quota_cb, "a,
|
||||||
|
1, "string", role) > 0)
|
||||||
|
return quota;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
@@ -154,4 +154,13 @@ ccnet_user_manager_get_binding_email (CcnetUserManager *manager, const char *pee
|
|||||||
GList *
|
GList *
|
||||||
ccnet_user_manager_get_binding_peerids (CcnetUserManager *manager, const char *email);
|
ccnet_user_manager_get_binding_peerids (CcnetUserManager *manager, const char *email);
|
||||||
|
|
||||||
|
gint64
|
||||||
|
ccnet_user_manager_get_role_quota (CcnetUserManager *manager,
|
||||||
|
const char *role);
|
||||||
|
|
||||||
|
int
|
||||||
|
ccnet_user_manager_set_role_quota (CcnetUserManager *manager,
|
||||||
|
const char *role,
|
||||||
|
gint64 quota);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -331,6 +331,10 @@ class CcnetThreadedRpcClient(RpcClientBase):
|
|||||||
def search_groups(self, group_patt, start, limit):
|
def search_groups(self, group_patt, start, limit):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@searpc_func("int", ["string", "int64"])
|
||||||
|
def set_role_quota(self, role, quota):
|
||||||
|
pass
|
||||||
|
|
||||||
@searpc_func("int", ["string", "string", "string"])
|
@searpc_func("int", ["string", "string", "string"])
|
||||||
def create_org(self, org_name, url_prefix, creator):
|
def create_org(self, org_name, url_prefix, creator):
|
||||||
pass
|
pass
|
||||||
|
Reference in New Issue
Block a user