示例#1
0
文件: group-mgr.c 项目: blablup/ccnet
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);
}
示例#2
0
文件: user-mgr.c 项目: hfeeki/ccnet
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);
}
示例#3
0
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);
}
示例#4
0
文件: user-mgr.c 项目: hfeeki/ccnet
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;
}
示例#5
0
文件: group-mgr.c 项目: blablup/ccnet
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);
}
示例#6
0
文件: group-mgr.c 项目: blablup/ccnet
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);
}
示例#7
0
文件: group-mgr.c 项目: blablup/ccnet
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;
}
示例#8
0
文件: user-mgr.c 项目: hfeeki/ccnet
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;
}
示例#9
0
文件: user-mgr.c 项目: hfeeki/ccnet
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;
}
示例#10
0
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);
}