diff options
author | Frederick Muriuki Muriithi | 2024-06-10 15:22:20 -0500 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2024-06-10 16:45:12 -0500 |
commit | fa7452e4f08352526257d1f0dc5181302a55d3e2 (patch) | |
tree | 2a62f5f94d0da4808b469becff71e9ebb62784a9 /gn_auth/auth/authorisation | |
parent | 99023088e70c6db684785ab6a1a8b11331058efd (diff) | |
download | gn-auth-fa7452e4f08352526257d1f0dc5181302a55d3e2.tar.gz |
Provide some endpoints for privileges.
Diffstat (limited to 'gn_auth/auth/authorisation')
-rw-r--r-- | gn_auth/auth/authorisation/privileges/__init__.py | 5 | ||||
-rw-r--r-- | gn_auth/auth/authorisation/privileges/models.py (renamed from gn_auth/auth/authorisation/privileges.py) | 24 | ||||
-rw-r--r-- | gn_auth/auth/authorisation/privileges/views.py | 32 |
3 files changed, 58 insertions, 3 deletions
diff --git a/gn_auth/auth/authorisation/privileges/__init__.py b/gn_auth/auth/authorisation/privileges/__init__.py new file mode 100644 index 0000000..18c7f5d --- /dev/null +++ b/gn_auth/auth/authorisation/privileges/__init__.py @@ -0,0 +1,5 @@ +"""Package for Privileges.""" +from .models import (Privilege, + user_privileges, + privileges_by_ids, + db_row_to_privilege) diff --git a/gn_auth/auth/authorisation/privileges.py b/gn_auth/auth/authorisation/privileges/models.py index a977db5..77be7c0 100644 --- a/gn_auth/auth/authorisation/privileges.py +++ b/gn_auth/auth/authorisation/privileges/models.py @@ -1,11 +1,11 @@ """Handle privileges""" from dataclasses import dataclass -from typing import Iterable +from typing import Iterable, Optional import sqlite3 -from ..db import sqlite3 as db -from ..authentication.users import User +from gn_auth.auth.db import sqlite3 as db +from gn_auth.auth.authentication.users import User @dataclass(frozen=True) @@ -50,3 +50,21 @@ def privileges_by_ids( return tuple( Privilege(row["privilege_id"], row["privilege_description"]) for row in cursor.fetchall()) + +def all_privileges(conn: db.DbConnection) -> tuple[Privilege, ...]: + """Retrieve all privileges from the database.""" + with db.cursor(conn) as cursor: + cursor.execute("SELECT * FROM privileges") + results = cursor.fetchall() + + return tuple([] if not bool(results) + else (db_row_to_privilege(row) for row in results)) + +def privilege_by_id(conn: db.DbConnection, privilege_id: str) -> Optional[Privilege]: + """Retrieve a privilege by its ID.""" + with db.cursor(conn) as cursor: + cursor.execute("SELECT * FROM privileges WHERE privilege_id=?", + (privilege_id,)) + row = cursor.fetchone() + + return db_row_to_privilege(row) if bool(row) else None diff --git a/gn_auth/auth/authorisation/privileges/views.py b/gn_auth/auth/authorisation/privileges/views.py new file mode 100644 index 0000000..d50e5cb --- /dev/null +++ b/gn_auth/auth/authorisation/privileges/views.py @@ -0,0 +1,32 @@ +"""Routes for privileges.""" +from dataclasses import asdict + +from werkzeug.exceptions import NotFound +from flask import jsonify, Blueprint, current_app as app + +from gn_auth.auth.db import sqlite3 as db + +from .models import all_privileges, privilege_by_id + +privileges = Blueprint("privileges", __name__) + +@privileges.route("/", methods=["GET"]) +@privileges.route("/list", methods=["GET"]) +def list_privileges(): + """List all the available privileges.""" + with db.connection(app.config["AUTH_DB"]) as conn: + _privileges = all_privileges(conn) + + return jsonify(_privileges if bool(_privileges) else []), 200 + +@privileges.route("/<privilege_id>/", methods=["GET"]) +@privileges.route("/<privilege_id>/view", methods=["GET"]) +def view_privilege(privilege_id: str): + """View details of a single privilege""" + with db.connection(app.config["AUTH_DB"]) as conn: + _privilege = privilege_by_id(conn, privilege_id) + + if bool(_privilege): + return jsonify(_privilege) + + raise NotFound(f"No privilege exists with ID '{privilege_id}'") |