Socket
Socket
Sign inDemoInstall

auth

Package Overview
Dependencies
0
Maintainers
1
Alerts
File Explorer

Install Socket

Protect your apps from supply chain attacks

Install

auth

Authorization for humans

    0.5.3

Maintainers
1

Readme

====================================
Auth | Authorization for Humans
====================================

RESTful, Simple Authorization system with ZERO configuration.

.. image:: https://badge.fury.io/py/auth.svg
    :target: https://badge.fury.io/py/auth

.. image:: https://img.shields.io/pypi/dm/auth.svg
    :target: https://pypi.python.org/pypi/auth




.. image:: https://api.travis-ci.org/ourway/auth.svg
    :target: https://travis-ci.org/ourway/auth

.. image:: https://codecov.io/github/ourway/auth/coverage.svg?branch=master
    :target: https://codecov.io/github/ourway/auth?branch=master




***************
What is Auth?
***************
Auth is a module that makes authorization simple and also scalable and powerful.  It also has a beautiful RESTful API for use in micro-service architectures and platforms.  It is originally desinged to use in Appido, a scalable media market in Iran.

It supports Python2.6+ and if you have a mongodb backbone, you need ZERO configurations steps.  Just type ``auth-server`` and press enter!

I use Travis and Codecov to keep myself honest.

*******************
requirements
*******************

You need to access to **mongodb**.  If you are using a remote mongodb,  provide these environment variables:

``MONGO_HOST`` and ``MONGO_PORT``


*******************
Installation
*******************

.. code:: Bash

    pip install auth


*******************
Show me an example
*******************
ok, lets image you have two users, **Jack** and **Sara**.  Sara can cook and Jack can dance. Both can laugh.

You also need to choose a secret key for your application.  Because you may want to use Auth in various tools and each must have a secret key for seperating their scope.

.. code:: Python

    my_secret_key = "pleaSeDoN0tKillMyC_at"
    from auth import Authorization
    cas = Authorization(my_secret_key)

Now, Lets add 3 groups, Cookers, Dancers and Laughers.  Remember that groups are Roles.  So when we create a group, indeed we create a role:

.. code:: Python

    cas.add_group('cookers')
    cas.add_group('dancers')
    cas.add_group('laughers')


Ok, great. You have 3 groups and you need to authorize them to do special things.

.. code:: Python

    cas.add_permission('cookers', 'cook')
    cas.add_permission('dancers', 'dance')
    cas.add_permission('laughers', 'laugh')


Good.  You let cookers to cook and dancers to dance etc...
The final part is to set memberships for Sara and Jack:

.. code:: Python

    cas.add_membership('sara', 'cookers')
    cas.add_membership('sara', 'laughers')
    cas.add_membership('jack', 'dancers')
    cas.add_membership('jack', 'laughers')



That's all we need.  Now lets ensure that jack can dance:

.. code:: Python

    if cas.user_has_permission('jack', 'dance'):
        print('YES!!! Jack can dance.')



**********************
Authirization Methods
**********************

use pydoc to see all methods:

.. code:: Bash

    pydoc auth.Authorization


*******************
RESTful API
*******************
Lets run the server on port 4000:

.. code:: Python

    from auth import api, serve
    serve('localhost', 4000, api)

Or, from version 0.1.2+ you can use this command:

.. code:: Bash

    auth-server


Simple! Authorization server is ready to use.

.. image:: https://raw.githubusercontent.com/ourway/auth/master/docs/API_Usage_Teminal.gif


You can use it via simple curl or using mighty Requests module.  So in you remote application, you can do something like this:

.. code:: Python

    import requests
    secret_key = "pleaSeDoN0tKillMyC_at"
    auth_api = "http://127.0.0.1:4000/api"


Lets create admin group:

.. code:: Python

    requests.post(auth_api+'/role/'+secret_key+'/admin')


And lets make Jack an admin:

.. code:: Python

    requests.post(auth_api+'/permission/'+secret_key+'/jack/admin')

And finally let's check if Sara still can cook:

.. code:: Python

    requests.get(auth_api+'/has_permission/'+secret_key+'/sara/cook')



********************
RESTful API helpers
********************
auth comes with a helper class that makes your life easy.

.. code:: Python

    from auth.client import Client
    service = Client('srv201', 'http://192.168.99.100:4000')
    print(service)
    service.get_roles()
    service.add_role(role='admin')


*******************
API Methods
*******************


.. code:: Bash

    pydoc auth.CAS.REST.service




- ``/ping`` [GET]


 Ping API, useful for your monitoring tools


- ``/api/membership/{KEY}/{user}/{role}`` [GET/POST/DELETE]

 Adding, removing and getting membership information.


- ``/api/permission/{KEY}/{role}/{name}`` [GET/POST/DELETE]

 Adding, removing and getting permissions


- ``/api/has_permission/{KEY}/{user}/{name}`` [GET]

 Getting user permission info


- ``/api/role/{KEY}/{role}`` [GET/POST/DELETE]

  Adding, removing and getting roles


- ``/api/which_roles_can/{KEY}/{name}`` [GET]

  For example:  Which roles can send_mail?


- ``/api/which_users_can/{KEY}/{name}`` [GET]

  For example:  Which users can send_mail?


- ``/api/user_permissions/{KEY}/{user}`` [GET]

  Get all permissions that a user has

- ``/api/role_permissions/{KEY}/{role}`` [GET]

  Get all permissions that a role has


- ``/api/user_roles/{KEY}/{user}`` [GET]

    Get roles that user assinged to

- ``/api/roles/{KEY}`` [GET]

    Get all available roles


*******************
Deployment
*******************

Deploying Auth module in production environment is easy:


.. code:: Bash

    gunicorn auth:api




*******************
Dockerizing
*******************

It's simple:

.. code:: Bash

    docker build -t python/auth-server https://raw.githubusercontent.com/ourway/auth/master/Dockerfile
    docker run --name=auth -e MONGO_HOST='192.168.99.100' -p 4000:4000 -d --restart=always --link=mongodb-server python/auth-server



*******************
Copyright
*******************

- Farsheed Ashouri `@ <mailto:rodmena@me.com>`_


*******************
Documentation
*******************
Feel free to dig into source code.  If you think you can improve the documentation, please do so and send me a pull request.

************************
Unit Tests and Coverage
************************
I am trying to add tests as much as I can, but still there are areas that need improvement.


**********
To DO
**********
- Add Authentication features
- Improve Code Coverage

Keywords

FAQs


Did you know?

Socket installs a GitHub app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc