GList* ccnet_group_manager_get_all_groups (CcnetGroupManager *mgr, int start, int limit, GError **error) { GList *ret = NULL; char sql[256]; if (ccnet_db_type(mgr->priv->db) == CCNET_DB_TYPE_PGSQL) { if (start == -1 && limit == -1) { snprintf (sql, sizeof(sql), "SELECT group_id, group_name, " "creator_name, timestamp FROM \"Group\""); } else { snprintf (sql, sizeof(sql), "SELECT group_id, group_name, " "creator_name, timestamp FROM \"Group\" " "ORDER BY group_id LIMIT %d OFFSET %d", limit, start); } } else { if (start == -1 && limit == -1) { snprintf (sql, sizeof(sql), "SELECT `group_id`, `group_name`, " "`creator_name`, `timestamp` FROM `Group`"); } else { snprintf (sql, sizeof(sql), "SELECT `group_id`, `group_name`, " "`creator_name`, `timestamp` FROM `Group` LIMIT %d, %d", start, limit); } } if (ccnet_db_foreach_selected_row (mgr->priv->db, sql, get_all_ccnetgroups_cb, &ret) < 0) return NULL; return g_list_reverse (ret); }
GList* ccnet_user_manager_get_emailusers (CcnetUserManager *manager, int start, int limit) { CcnetDB *db = manager->priv->db; GList *ret = NULL; char sql[256]; #ifdef HAVE_LDAP /* Assuming admin user is in LDAP database too. * is_staff is not set here. */ if (manager->use_ldap) return ldap_list_users (manager, "*"); #endif if (start == -1 && limit == -1) snprintf (sql, 256, "SELECT * FROM EmailUser"); else snprintf (sql, 256, "SELECT * FROM EmailUser LIMIT %d, %d", start, limit); if (ccnet_db_foreach_selected_row (db, sql, get_emailusers_cb, &ret) < 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_superusers(CcnetUserManager *manager) { CcnetDB* db = manager->priv->db; GList *ret = NULL; char sql[512]; snprintf (sql, 512, "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 is_staff = 1;"); if (ccnet_db_foreach_selected_row (db, sql, get_emailusers_cb, &ret) < 0) { while (ret != NULL) { g_object_unref (ret->data); ret = g_list_delete_link (ret, ret); } return NULL; } return g_list_reverse (ret); }
CcnetEmailUser* ccnet_user_manager_get_emailuser (CcnetUserManager *manager, const char *email) { CcnetDB *db = manager->priv->db; char sql[512]; CcnetEmailUser *emailuser = NULL; #ifdef HAVE_LDAP if (manager->use_ldap) { GList *users, *ptr; /* Lookup admin first. */ snprintf (sql, sizeof(sql), "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE email='%s'", email); if (ccnet_db_foreach_selected_row (db, sql, get_emailuser_cb, &emailuser) > 0) { if (ccnet_email_user_get_is_staff(emailuser)) return emailuser; g_object_unref (emailuser); } users = ldap_list_users (manager, email); 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); return emailuser; } #endif snprintf (sql, sizeof(sql), "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE email='%s'", email); if (ccnet_db_foreach_selected_row (db, sql, get_emailuser_cb, &emailuser) < 0) return NULL; return emailuser; }
GList * ccnet_group_manager_get_group_members (CcnetGroupManager *mgr, int group_id, GError **error) { CcnetDB *db = mgr->priv->db; char sql[512]; GList *group_users = NULL; snprintf (sql, sizeof(sql), "SELECT * FROM GroupUser WHERE group_id = %d", group_id); if (ccnet_db_foreach_selected_row (db, sql, get_ccnet_groupuser_cb, &group_users) < 0) return NULL; return g_list_reverse (group_users); }
GList * ccnet_group_manager_get_groupids_by_user (CcnetGroupManager *mgr, const char *user_name, GError **error) { CcnetDB *db = mgr->priv->db; char sql[512]; GList *group_ids = NULL; snprintf (sql, sizeof(sql), "SELECT group_id FROM GroupUser " "WHERE user_name='%s'", user_name); if (ccnet_db_foreach_selected_row (db, sql, get_group_ids_cb, &group_ids) < 0) { g_list_free (group_ids); return NULL; } return g_list_reverse (group_ids); }
CcnetGroup * ccnet_group_manager_get_group (CcnetGroupManager *mgr, int group_id, GError **error) { CcnetDB *db = mgr->priv->db; char sql[512]; CcnetGroup *ccnetgroup = NULL; if (ccnet_db_type(db) == CCNET_DB_TYPE_PGSQL) snprintf (sql, sizeof(sql), "SELECT * FROM \"Group\" WHERE group_id = %d", group_id); else snprintf (sql, sizeof(sql), "SELECT * FROM `Group` WHERE group_id = %d", group_id); if (ccnet_db_foreach_selected_row (db, sql, get_ccnetgroup_cb, &ccnetgroup) < 0) return NULL; return ccnetgroup; }
CcnetEmailUser* ccnet_user_manager_get_emailuser_by_id (CcnetUserManager *manager, int id) { CcnetDB *db = manager->priv->db; char sql[512]; CcnetEmailUser *emailuser = NULL; #ifdef HAVE_LDAP if (manager->use_ldap) return NULL; #endif snprintf (sql, sizeof(sql), "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE id='%d'", id); if (ccnet_db_foreach_selected_row (db, sql, get_emailuser_cb, &emailuser) < 0) return NULL; return emailuser; }
int ccnet_user_manager_validate_emailuser (CcnetUserManager *manager, const char *email, const char *passwd) { CcnetDB *db = manager->priv->db; char sql[512]; char hashed_passwd[41]; hash_password (passwd, hashed_passwd); #ifdef HAVE_LDAP if (manager->use_ldap) { CcnetEmailUser *emailuser; snprintf (sql, sizeof(sql), "SELECT id, email, is_staff, is_active, ctime" " FROM EmailUser WHERE email='%s' AND passwd='%s'", email, hashed_passwd); if (ccnet_db_foreach_selected_row (db, sql, get_emailuser_cb, &emailuser) > 0) { if (ccnet_email_user_get_is_staff(emailuser)) { g_object_unref (emailuser); return 0; } g_object_unref (emailuser); } return ldap_verify_user_password (manager, email, passwd); } #endif snprintf (sql, 512, "SELECT email FROM EmailUser WHERE email='%s' AND " "passwd='%s'", email, hashed_passwd); if (ccnet_db_check_for_existence (db, sql)) return 0; return -1; }
GList* ccnet_user_manager_filter_emailusers_by_emails(CcnetUserManager *manager, const char *emails) { CcnetDB *db = manager->priv->db; char *copy = g_strdup (emails), *saveptr; GList *ret = NULL; #ifdef HAVE_LDAP if (manager->use_ldap) return NULL; /* todo */ #endif GString *sql = g_string_new(NULL); g_string_append (sql, "SELECT * FROM EmailUser WHERE Email IN ("); char *name = strtok_r (copy, ", ", &saveptr); while (name != NULL) { g_string_append_printf (sql, "'%s',", name); name = strtok_r (NULL, ", ", &saveptr); } g_string_erase (sql, sql->len-1, 1); /* remove last "," */ g_string_append (sql, ")"); if (ccnet_db_foreach_selected_row (db, sql->str, get_emailusers_cb, &ret) < 0) { while (ret != NULL) { g_object_unref (ret->data); ret = g_list_delete_link (ret, ret); } return NULL; } g_free (copy); g_string_free (sql, TRUE); return g_list_reverse (ret); }