Skip to main content

Authorization for humans

Project description

RESTful, Simple Authorization system with ZERO configuration.

https://badge.fury.io/py/auth.svg https://img.shields.io/pypi/dm/auth.svg https://api.travis-ci.org/ourway/auth.svg https://codecov.io/github/ourway/auth/coverage.svg?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

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.

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:

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.

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:

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:

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

Authirization Methods

use pydoc to see all methods:

pydoc auth.Authorization

RESTful API

Lets run the server on port 4000:

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

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

auth-server

Simple! Authorization server is ready to use.

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:

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

Lets create admin group:

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

And lets make Jack an admin:

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

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

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

RESTful API helpers

auth comes with a helper class that makes your life easy.

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

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:

gunicorn auth:api

Dockerizing

It’s simple:

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

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

auth-0.4.8-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

auth-0.4.8-py2-none-any.whl (14.2 kB view details)

Uploaded Python 2

File details

Details for the file auth-0.4.8-py3-none-any.whl.

File metadata

File hashes

Hashes for auth-0.4.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c955aa80ec16bac6316cd443d639eef955a96144c02016a74b776e516730da8e
MD5 130277360cd1b3777490ca48ff804f72
BLAKE2b-256 c25bd1c6c68cd8fe6b00060cfbeb1e0080fcb8cd6ca5a697a930293c37946b14

See more details on using hashes here.

Provenance

File details

Details for the file auth-0.4.8-py2-none-any.whl.

File metadata

File hashes

Hashes for auth-0.4.8-py2-none-any.whl
Algorithm Hash digest
SHA256 d553cc5e54fd6541b581ba41cb70fe2cacd7d4940f91fbd33727c7201f3f5423
MD5 c213a94ff6b99c6c604c26115ee5d23a
BLAKE2b-256 bace23342a7c7051585a75abd8c47a5a2f8b13600608e4e768a30c141a5328ab

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page