1
0
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:
cuihaikuo
2017-02-27 15:15:44 +08:00
parent d18b7d5883
commit 063d20ce8d
5 changed files with 96 additions and 1 deletions

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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, &quota,
1, "string", role) > 0)
return quota;
return -1;
}

View File

@@ -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

View File

@@ -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