mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-09-18 16:15:44 +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,
|
||||
"remove_role",
|
||||
searpc_signature_int__string_string());
|
||||
|
||||
|
||||
|
||||
searpc_server_register_function ("ccnet-rpcserver",
|
||||
ccnet_rpc_get_config,
|
||||
@@ -280,6 +280,10 @@ ccnet_start_rpc(CcnetSession *session)
|
||||
ccnet_rpc_search_groups,
|
||||
"search_groups",
|
||||
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",
|
||||
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);
|
||||
}
|
||||
|
||||
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 */
|
||||
|
@@ -320,4 +320,7 @@ ccnet_rpc_login_relay (const char *relay_id, const char *email,
|
||||
int
|
||||
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 */
|
||||
|
@@ -564,6 +564,12 @@ static int check_db_table (CcnetDB *db)
|
||||
if (ccnet_db_query (db, sql) < 0)
|
||||
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) {
|
||||
sql = "CREATE TABLE IF NOT EXISTS EmailUser ("
|
||||
"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)
|
||||
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) {
|
||||
sql = "CREATE TABLE IF NOT EXISTS EmailUser ("
|
||||
"id SERIAL PRIMARY KEY, "
|
||||
@@ -647,6 +663,11 @@ static int check_db_table (CcnetDB *db)
|
||||
if (ccnet_db_query (db, sql) < 0)
|
||||
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;
|
||||
@@ -1696,3 +1717,44 @@ ccnet_user_manager_get_superusers(CcnetUserManager *manager)
|
||||
|
||||
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 *
|
||||
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
|
||||
|
@@ -331,6 +331,10 @@ class CcnetThreadedRpcClient(RpcClientBase):
|
||||
def search_groups(self, group_patt, start, limit):
|
||||
pass
|
||||
|
||||
@searpc_func("int", ["string", "int64"])
|
||||
def set_role_quota(self, role, quota):
|
||||
pass
|
||||
|
||||
@searpc_func("int", ["string", "string", "string"])
|
||||
def create_org(self, org_name, url_prefix, creator):
|
||||
pass
|
||||
|
Reference in New Issue
Block a user