BottleJWT
JWT Plugin for Bottle. Adds functionality to protect routes via JWT and adds options for role based authentication.
Installation
Source
wget https://raw.githubusercontent.com/thepure12/bottle-jwt/main/src/bottle_jwt/bottle_jwt.py
Usage
Install Plugin
from bottle import Bottle
from bottle_jwt import JWTPlugin
app = Bottle()
plugin = JWTPlugin(jwt_key="changeme")
app.install(plugin)
@app.route("/token", method="POST")
def token():
pass
Getting a Token
The default route for getting a token is "/token". Token routes only except POST requests and will pass post data as keyword arguments into the authentication (auth) function. The auth function creates the JWT payload which is encoded and returned to the requester.
$ curl localhost/token
{"message": "Method Not Allowed, use POST for authentication"}
$ curl -X POST localhost/token
{"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6WyJndWVzdCJdLCJleHAiOjE2ODMxMjcxODd9.5OkXOdRGbloRr4oI2pjeJoBqQvSaE-pkuaZoaAtKKSU"}
Custom Auth
def myAuth(**kwargs):
token = {
"exp": datetime.utcnow() + timedelta(minutes=5),
"roles": ["user", "admin"]
}
return token
plugin = JWTPlugin(jwt_key="changeme", auth_func=myAuth)
Failed authenetication can be handled by raising an AuthFailed exception.
from bottle_jwt import
def myAuth(username, password):
if myHash(username, password) != expected_hash:
raise AuthFailed()
Additional Token Paths
It might be useful to have multiple token paths to enable the use of multiple auth functions. Each token path is mapped to one auth function but one auth function may be mapped to multiple token paths.
plugin = JWTPlugin(jwt_key="changeme")
plugin.addTokenPath("token2")
plugin.addTokenPath("token3", auth_func=myAuth)
Protecting Routes
Protecting a route is handled via Bottle's route config. This simplest way to protect a route is to add a "roles" option to a route's config and set it to True. Roles can all be set to a list of strings (the roles required to access the route) or a callable that returns a boolean or list of strings.
@route("/protected1", roles=True)
def protected():
pass
@route("/protected2", roles=["user", "admin"])
def protected():
pass
@route("/protected3", roles=myRolesFunc)
def protected():
pass
Release files for bottle-jwt3 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bottle-jwt3-0.0.1.tar.gz | 5.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bottle_jwt3-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.6 kB
Release files / bottle-jwt3-0.0.1.tar.gz
| Download URL | bottle-jwt3-0.0.1.tar.gz |
|---|---|
| Size | 5.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a306f456d4a1ebcadcc704b39596770fbb56273716e3d97393aaa8df2b5f2da
|
|
BLAKE2b-256 checksum How to use checksums |
21f2b56fd906c387f0990b488a43a52788ed37de37368bf1a28093e07dc5084d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.5
|
Release files / bottle_jwt3-0.0.1-py3-none-any.whl
| Download URL | bottle_jwt3-0.0.1-py3-none-any.whl |
|---|---|
| Size | 5.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6649b16f2bedf1d375d732adb7c3de1631cc781210cc38840e591ce034a60b75
|
|
BLAKE2b-256 checksum How to use checksums |
2270246e214ab6f4ddd506873ad23bc3b2e0e7b38059d62efc12b921667a787e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.5
|