Metadata-Version: 2.1
Name: dash-access-manager
Version: 0.0.1
Summary: Dash-Access-Manager provides user access management for Dash.
Home-page: https://github.com/evan-lh/dash-access-manager
Author: Evan
Author-email: elehella@enssat.fr
License: MIT
Platform: UNKNOWN
Description-Content-Type: text/markdown
Requires-Dist: bcrypt
Requires-Dist: mongoengine
Requires-Dist: flask-login
Requires-Dist: dash
Requires-Dist: dash-core-components
Requires-Dist: dash-html-components
Requires-Dist: dash-bootstrap-components

# Dash-Access-Manager

![Python package](https://github.com/evan-lh/dash-access-manager/workflows/Upload%20Python%20Package/badge.svg)
![GitHub](https://img.shields.io/github/license/evan-lh/dash-access-manager)

Dash-Access-Manager provides user access management for [Dash](https://github.com/plotly/dash). 

It is based on [Flask-Login](https://github.com/maxcountryman/flask-login) to manage user session and 
on [MongoEngine](https://github.com/MongoEngine/mongoengine) to use MongoDB databases.

## Table of contents

  * [Description](#description)
  * [Installation](#installation)
  * [Usage](#usage)
  * [Contributing](#contributing)
  * [Changelog](#changelog)
  * [License](#license)

## Description

This is an implementation of an access management to be used in a dash app. 
It provides login, logout and sign up buttons that can be integrated in a layout of a dash app.

## Installation

Install the extension with pip:

    pip install dash-access-manager

## Usage

Once installed, import the package in your `app.py`.

    import dash-access-manager as dam

    app = dash.Dash(__name__)

    server = app.server


Then, you have to set up the access manager. You __need to change__ `your_secret_key_here` as it not secret. 
To do so, you can generate a secret key with the `os` module by using `os.urandom(12)`

    #Define a secret key that is required for Flask-Login to manage user session
    server.secret_key = 'your_secret_key_here' 

    # Suppress errors for callbacks acting on layouts that are not displayed yet
    app.config.suppress_callback_exceptions = True

    # Initialize the acess manager
    dam.init_access_manager(app)

After this you will define the layouts and callbacks of your dash app. Here is an simple example that can be used as it is.

    app.layout = html.Div(children=[dcc.Location(id='url', refresh=False),
                                html.Div(id='root'),
                                html.Div(id='container')
                                ])


    def render_default_page(navbar_button=[], page_content=[html.H3("Login successfull")]):
        return [
                   dbc.Navbar([
                                  dbc.NavbarBrand("Navbar"),
                              ] + navbar_button,
                              color="primary")
               ] + page_content


    @app.callback(Output('root', 'children'),
                  [Input('url', 'pathname')])
    def display_page(pathname):
        if dam.current_user.is_authenticated:
            return render_default_page(dam.render_logout_button(), dam.render_logged_page())
        else:
            return render_default_page(dam.render_navbar_login() + dam.render_navbar_sign_up(), dam.render_login_page())


Finally, you need to connect the app with your MongoDB database before running your app. 
You have to change `DatabaseName` and `DatabaseURL` with the ones you want to use. 
If you want to use MongoDB you need to this change the `host` parameter at `mongodb+srv://username.password@cluster.url` 
where you have to replace `username`, `password` and `cluster.url` by your information.

    if __name__ == "__main__":
        dam.connect(
            db='DatabaseName',
            host='DatabaseURL'
        )
        app.run_server()

You can use this file [app.py](example/app.py) to try it out.

## Contributing
This project is under development so contributions are welcome to improve the code.
Have a look at [CONTRIBUTING](docs/CONTRIBUTING.md).

## Changelog

Take a look at [CHANGELOG](docs/CHANGELOG.md) for more details. 

## License

Distributed under the MIT License. See [LICENSE](LICENSE) for more information. 


