CcnetEmailUser* ccnet_user_manager_get_emailuser (CcnetUserManager *manager, const char *email) { CcnetDB *db = manager->priv->db; char *sql; CcnetEmailUser *emailuser = NULL; char *email_down; sql = "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE email=?"; if (ccnet_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, 1, "string", email) > 0) { char *role = ccnet_user_manager_get_role_emailuser (manager, email); if (role) { g_object_set (emailuser, "role", role, NULL); g_free (role); } return emailuser; } email_down = g_ascii_strdown (email, strlen(email)); if (ccnet_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, 1, "string", email_down) > 0) { char *role = ccnet_user_manager_get_role_emailuser(manager, email_down); if (role) { g_object_set (emailuser, "role", role, NULL); g_free (role); } g_free (email_down); return emailuser; } g_free (email_down); #ifdef HAVE_LDAP if (manager->use_ldap) { GList *users, *ptr; users = ldap_list_users (manager, email, -1, -1); if (!users) return NULL; emailuser = users->data; /* Free all except the first user. */ for (ptr = users->next; ptr; ptr = ptr->next) g_object_unref (ptr->data); g_list_free (users); char *role = ccnet_user_manager_get_role_emailuser(manager, email); if (role) { g_object_set (emailuser, "role", role, NULL); g_free (role); } return emailuser; } #endif return NULL; }
int ccnet_user_manager_validate_emailuser (CcnetUserManager *manager, const char *email, const char *passwd) { CcnetDB *db = manager->priv->db; char *sql; char *email_down; char *stored_passwd = NULL; gboolean need_upgrade = FALSE; #ifdef HAVE_LDAP if (manager->use_ldap) { if (ldap_verify_user_password (manager, email, passwd) == 0) return 0; } #endif sql = "SELECT passwd FROM EmailUser WHERE email=?"; if (ccnet_db_statement_foreach_row (db, sql, get_password, &stored_passwd, 1, "string", email) > 0) { if (validate_passwd (passwd, stored_passwd, &need_upgrade)) { if (need_upgrade) update_user_passwd (manager, email, passwd); g_free (stored_passwd); return 0; } else { g_free (stored_passwd); return -1; } } email_down = g_ascii_strdown (email, strlen(email)); if (ccnet_db_statement_foreach_row (db, sql, get_password, &stored_passwd, 1, "string", email_down) > 0) { g_free (email_down); if (validate_passwd (passwd, stored_passwd, &need_upgrade)) { if (need_upgrade) update_user_passwd (manager, email, passwd); g_free (stored_passwd); return 0; } else { g_free (stored_passwd); return -1; } } g_free (email_down); return -1; }
GList* ccnet_user_manager_search_emailusers (CcnetUserManager *manager, const char *email_patt, int start, int limit) { CcnetDB *db = manager->priv->db; GList *ret = NULL; #ifdef HAVE_LDAP if (manager->use_ldap) { char *ldap_patt = db_pattern_to_ldap_pattern (email_patt); ret = ldap_list_users (manager, ldap_patt, -1, -1); g_free (ldap_patt); } #endif int rc; if (start == -1 && limit == -1) rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email " "WHERE t1.Email LIKE ? " "ORDER BY t1.id", get_emailusers_cb, &ret, 1, "string", email_patt); else rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email " "WHERE t1.Email LIKE ? " "ORDER BY t1.id LIMIT ? OFFSET ?", get_emailusers_cb, &ret, 3, "string", email_patt, "int", limit, "int", start); if (rc < 0) { while (ret != NULL) { g_object_unref (ret->data); ret = g_list_delete_link (ret, ret); } return NULL; } return g_list_reverse (ret); }
GList* ccnet_user_manager_get_emailusers (CcnetUserManager *manager, const char *source, int start, int limit) { CcnetDB *db = manager->priv->db; GList *ret = NULL; #ifdef HAVE_LDAP if (manager->use_ldap && g_strcmp0 (source, "LDAP") == 0) { GList *users; users = ldap_list_users (manager, "*", start, limit); return g_list_reverse (users); } #endif if (g_strcmp0 (source, "DB") != 0) return NULL; int rc; if (start == -1 && limit == -1) rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email ", get_emailusers_cb, &ret, 0); else rc = ccnet_db_statement_foreach_row (db, "SELECT t1.id, t1.email, " "t1.is_staff, t1.is_active, t1.ctime, " "t2.role FROM EmailUser AS t1 " "LEFT JOIN UserRole AS t2 " "ON t1.email = t2.email " "ORDER BY t1.id LIMIT ? OFFSET ?", get_emailusers_cb, &ret, 2, "int", limit, "int", start); if (rc < 0) { while (ret != NULL) { g_object_unref (ret->data); ret = g_list_delete_link (ret, ret); } return NULL; } return g_list_reverse (ret); }
GList* ccnet_group_manager_get_all_groups (CcnetGroupManager *mgr, int start, int limit, GError **error) { CcnetDB *db = mgr->priv->db; GList *ret = NULL; int rc; if (ccnet_db_type(mgr->priv->db) == CCNET_DB_TYPE_PGSQL) { if (start == -1 && limit == -1) { rc = ccnet_db_statement_foreach_row (db, "SELECT group_id, group_name, " "creator_name, timestamp FROM \"Group\" " "ORDER BY timestamp DESC", get_all_ccnetgroups_cb, &ret, 0); } else { rc = ccnet_db_statement_foreach_row (db, "SELECT group_id, group_name, " "creator_name, timestamp FROM \"Group\" " "ORDER BY timestamp DESC LIMIT ? OFFSET ?", get_all_ccnetgroups_cb, &ret, 2, "int", limit, "int", start); } } else { if (start == -1 && limit == -1) { rc = ccnet_db_statement_foreach_row (db, "SELECT `group_id`, `group_name`, " "`creator_name`, `timestamp` FROM `Group` " "ORDER BY timestamp DESC", get_all_ccnetgroups_cb, &ret, 0); } else { rc = ccnet_db_statement_foreach_row (db, "SELECT `group_id`, `group_name`, " "`creator_name`, `timestamp` FROM `Group` " "ORDER BY timestamp DESC LIMIT ?, ?", get_all_ccnetgroups_cb, &ret, 2, "int", start, "int", limit); } } if (rc < 0) return NULL; return g_list_reverse (ret); }
CcnetEmailUser* ccnet_user_manager_get_emailuser_by_id (CcnetUserManager *manager, int id) { CcnetDB *db = manager->priv->db; char *sql; CcnetEmailUser *emailuser = NULL; sql = "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE id=?"; if (ccnet_db_statement_foreach_row (db, sql, get_emailuser_cb, &emailuser, 1, "int", id) < 0) return NULL; return emailuser; }
static char* ccnet_user_manager_get_role_emailuser (CcnetUserManager *manager, const char* email) { CcnetDB *db = manager->priv->db; const char *sql; char* role; sql = "SELECT role FROM UserRole WHERE email=?"; if (ccnet_db_statement_foreach_row (db, sql, get_role_emailuser_cb, &role, 1, "string", email) > 0) return role; return NULL; }
GList * ccnet_group_manager_get_group_members (CcnetGroupManager *mgr, int group_id, GError **error) { CcnetDB *db = mgr->priv->db; char *sql; GList *group_users = NULL; sql = "SELECT * FROM GroupUser WHERE group_id = ?"; if (ccnet_db_statement_foreach_row (db, sql, get_ccnet_groupuser_cb, &group_users, 1, "int", group_id) < 0) return NULL; return g_list_reverse (group_users); }
CcnetGroup * ccnet_group_manager_get_group (CcnetGroupManager *mgr, int group_id, GError **error) { CcnetDB *db = mgr->priv->db; char *sql; CcnetGroup *ccnetgroup = NULL; if (ccnet_db_type(db) == CCNET_DB_TYPE_PGSQL) sql = "SELECT * FROM \"Group\" WHERE group_id = ?"; else sql = "SELECT * FROM `Group` WHERE group_id = ?"; if (ccnet_db_statement_foreach_row (db, sql, get_ccnetgroup_cb, &ccnetgroup, 1, "int", group_id) < 0) return NULL; return ccnetgroup; }
GList * ccnet_group_manager_get_groupids_by_user (CcnetGroupManager *mgr, const char *user_name, GError **error) { CcnetDB *db = mgr->priv->db; GList *group_ids = NULL; if (ccnet_db_statement_foreach_row (db, "SELECT group_id FROM GroupUser " "WHERE user_name=?", get_group_ids_cb, &group_ids, 1, "string", user_name) < 0) { g_list_free (group_ids); return NULL; } return g_list_reverse (group_ids); }