Metadata-Version: 2.1
Name: blabing
Version: 0.2.1
Summary: Building a convenient CLI on top of LDAP3
Author-email: Julien Tayon <julien@tayon.net>
Maintainer-email: Julien Tayon <julien@tayon.net>
License: PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
        --------------------------------------------
        
        1. This LICENSE AGREEMENT is between the Python Software Foundation
        ("PSF"), and the Individual or Organization ("Licensee") accessing and
        otherwise using this software ("Python") in source or binary form and
        its associated documentation.
        
        2. Subject to the terms and conditions of this License Agreement, PSF
        hereby grants Licensee a nonexclusive, royalty-free, world-wide
        license to reproduce, analyze, test, perform and/or display publicly,
        prepare derivative works, distribute, and otherwise use Python
        alone or in any derivative version, provided, however, that PSF's
        License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
        2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation; All Rights
        Reserved" are retained in Python alone or in any derivative version
        prepared by Licensee.
        
        3. In the event Licensee prepares a derivative work that is based on
        or incorporates Python or any part thereof, and wants to make
        the derivative work available to others as provided herein, then
        Licensee hereby agrees to include in any such work a brief summary of
        the changes made to Python.
        
        4. PSF is making Python available to Licensee on an "AS IS"
        basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
        IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
        DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
        FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
        INFRINGE ANY THIRD PARTY RIGHTS.
        
        5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
        FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
        A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
        OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
        
        6. This License Agreement will automatically terminate upon a material
        breach of its terms and conditions.
        
        7. Nothing in this License Agreement shall be deemed to create any
        relationship of agency, partnership, or joint venture between PSF and
        Licensee. This License Agreement does not grant permission to use PSF
        trademarks or trade name in a trademark sense to endorse or promote
        products or services of Licensee, or any third party.
        
        8. By copying, installing or otherwise using Python, Licensee
        agrees to be bound by the terms and conditions of this License
        Agreement.
        
        BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
        -------------------------------------------
        
        BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
        
        1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
        office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
        Individual or Organization ("Licensee") accessing and otherwise using
        this software in source or binary form and its associated
        documentation ("the Software").
        
        2. Subject to the terms and conditions of this BeOpen Python License
        Agreement, BeOpen hereby grants Licensee a non-exclusive,
        royalty-free, world-wide license to reproduce, analyze, test, perform
        and/or display publicly, prepare derivative works, distribute, and
        otherwise use the Software alone or in any derivative version,
        provided, however, that the BeOpen Python License is retained in the
        Software, alone or in any derivative version prepared by Licensee.
        
        3. BeOpen is making the Software available to Licensee on an "AS IS"
        basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
        IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
        DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
        FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
        INFRINGE ANY THIRD PARTY RIGHTS.
        
        4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
        SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
        AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
        DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
        
        5. This License Agreement will automatically terminate upon a material
        breach of its terms and conditions.
        
        6. This License Agreement shall be governed by and interpreted in all
        respects by the law of the State of California, excluding conflict of
        law provisions. Nothing in this License Agreement shall be deemed to
        create any relationship of agency, partnership, or joint venture
        between BeOpen and Licensee. This License Agreement does not grant
        permission to use BeOpen trademarks or trade names in a trademark
        sense to endorse or promote products or services of Licensee, or any
        third party. As an exception, the "BeOpen Python" logos available at
        http://www.pythonlabs.com/logos.html may be used according to the
        permissions granted on that web page.
        
        7. By copying, installing or otherwise using the software, Licensee
        agrees to be bound by the terms and conditions of this License
        Agreement.
        
        CNRI OPEN SOURCE LICENSE AGREEMENT (for Python 1.6b1)
        --------------------------------------------------
        
        IMPORTANT: PLEASE READ THE FOLLOWING AGREEMENT CAREFULLY.
        
        BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING,
        INSTALLING OR OTHERWISE USING PYTHON 1.6, beta 1 SOFTWARE, YOU ARE
        DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE
        AGREEMENT.
        
        1. This LICENSE AGREEMENT is between the Corporation for National
        Research Initiatives, having an office at 1895 Preston White Drive,
        Reston, VA 20191 ("CNRI"), and the Individual or Organization
        ("Licensee") accessing and otherwise using Python 1.6, beta 1
        software in source or binary form and its associated documentation,
        as released at the www.python.org Internet site on August 4, 2000
        ("Python 1.6b1").
        
        2. Subject to the terms and conditions of this License Agreement, CNRI
        hereby grants Licensee a non-exclusive, royalty-free, world-wide
        license to reproduce, analyze, test, perform and/or display
        publicly, prepare derivative works, distribute, and otherwise use
        Python 1.6b1 alone or in any derivative version, provided, however,
        that CNRIs License Agreement is retained in Python 1.6b1, alone or
        in any derivative version prepared by Licensee.
        
        Alternately, in lieu of CNRIs License Agreement, Licensee may
        substitute the following text (omitting the quotes): "Python 1.6,
        beta 1, is made available subject to the terms and conditions in
        CNRIs License Agreement. This Agreement may be located on the
        Internet using the following unique, persistent identifier (known
        as a handle): 1895.22/1011. This Agreement may also be obtained
        from a proxy server on the Internet using the
        URL:http://hdl.handle.net/1895.22/1011".
        
        3. In the event Licensee prepares a derivative work that is based on
        or incorporates Python 1.6b1 or any part thereof, and wants to make
        the derivative work available to the public as provided herein,
        then Licensee hereby agrees to indicate in any such work the nature
        of the modifications made to Python 1.6b1.
        
        4. CNRI is making Python 1.6b1 available to Licensee on an "AS IS"
        basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
        IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
        DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR
        FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6b1
        WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
        
        5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
        SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR
        LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6b1,
        OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY
        THEREOF.
        
        6. This License Agreement will automatically terminate upon a material
        breach of its terms and conditions.
        
        7. This License Agreement shall be governed by and interpreted in all
        respects by the law of the State of Virginia, excluding conflict of
        law provisions. Nothing in this License Agreement shall be deemed
        to create any relationship of agency, partnership, or joint venture
        between CNRI and Licensee. This License Agreement does not grant
        permission to use CNRI trademarks or trade name in a trademark
        sense to endorse or promote products or services of Licensee, or
        any third party.
        
        8. By clicking on the "ACCEPT" button where indicated, or by copying,
        installing or otherwise using Python 1.6b1, Licensee agrees to be
        bound by the terms and conditions of this License Agreement.
        
        ACCEPT
        
        CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
        --------------------------------------------------
        
        Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
        The Netherlands. All rights reserved.
        
        Permission to use, copy, modify, and distribute this software and its
        documentation for any purpose and without fee is hereby granted,
        provided that the above copyright notice appear in all copies and that
        both that copyright notice and this permission notice appear in
        supporting documentation, and that the name of Stichting Mathematisch
        Centrum or CWI not be used in advertising or publicity pertaining to
        distribution of the software without specific, written prior
        permission.
        
        STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
        THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
        FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
        FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
        ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
        OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        
Project-URL: Homepage, https://github.com/jul/bla
Keywords: LDAP,cli
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Provides: blabing
Requires-Python: >=3.9
Description-Content-Type: text/x-rst
License-File: LICENSE.txt
Requires-Dist: ldap3
Requires-Dist: tempdir
Requires-Dist: PyYAML
Requires-Dist: ipython
Requires-Dist: pygments-ldif
Requires-Dist: flask

=======================
BLA : Brutal LDAP Admin
=======================

Trying to obtain a decent openLDAP shell with scripting abilities by piggybacking IPython bringing history and documentation as a bonus,
as well as python module to have an easy installation.

This project is a Dirty Hack.


How it works
============

All required files (including the tls pem/key for localhost at 127.0.0.1) are available
`here <https://github.com/jul/bla>`_


example:

.. code-block:: bash

    # activate your virtual env
    python3 -mpip install blabing
    # standalone ldap server for tests
    standalone_ldap.sh slap
    # calling bla with credentials for this server, and calling test.bla  
    # which creates ou=people,dc=home and create 3 users there
    cat bla.test
     ldap.add("dc=home", [ "dcObject", "organization", "top"], dict(dc="home", o="home"))
     ldap.add("ou=people,dc=home",  'organizationalUnit', dict(ou="people"))
     [ user_add(i) for i in ( "boss", "manager", "louis" ) ]
     ldap.add("ou=group,dc=home",  'organizationalUnit', dict(ou="group"))
     ldap.add("cn=staff,ou=group,dc=home",  ['top', "groupOfNames"],attributes= dict(member=["uid=boss,ou=people,dc=home" ]))
     search("(uid=boss)", attributes="memberOf")
     list(walk("dc=home",lambda e:e.entry_dn))
     pe(get("uid=boss,ou=people,dc=home"))
     password("uid=boss,ou=people,dc=home")
     pe(get("uid=boss,ou=people,dc=home"))

    bla bla.no_tls.json test.bla

    # fill in a password has demanded
    # try ldapvi("uid=boss") in the IPython shell
    # exit
    
    # browse the tree
    lhl bla.no_tls.json
    firefox http://127.0.0.1:5001


.. image:: ./img/screenshot.png

You should be focusing on the tree not on the options of the command line tools.

Synopsis
========

LDAP is a great extensible key/value storage with security in mind. It's a great tool with a terrible User Experience when it comes to the tooling especially with openLDAP.


Why people (as I) are reluctant to use it ?

First problem CLI: tools
************************

- without kerberos CLI tools implies either to type password **for every
  operations (search, add modify)** or have it in
  seeable in history (if you don't use *secrets* my bash tool to solve this
  problem);
- who can remember what **-b, -x, -W, -w, -s** means ? CLI becames unreadable.

Why not have create a DSL? (Domain specific language)

We also want history since we often make the same operation over and over again.


BLA is an experimentation at brewing your own tooling for openLDAP
==================================================================

*standalone_ldap.sh* a standalone LDAP server to experiment locally.
*bla* a CLI tools using ipython for history, completion and documentation
*lhl* a web explorer

Design choices
**************

- GCU style to make a usable prototype illustrating the indented behaviour fast;
- using an implicit local or global configuration to setup the ldap 
  access/options;
- helpers to recursively search for any entries bypassing the 500 items limits
- *COLORS* because life is too short to have a monotone CLI (but actually
  does have it has a fallback mode)


