コード例 #1
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);
}
コード例 #2
0
ファイル: user-mgr.c プロジェクト: 9thsector/ccnet
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;
}
コード例 #3
0
ファイル: user-mgr.c プロジェクト: 9thsector/ccnet
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);
}
コード例 #4
0
ファイル: user-mgr.c プロジェクト: 9thsector/ccnet
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);
}
コード例 #5
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;
}