# pip install "fastapi[standard]" # fastapi dev routes.py from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class TypeItem(BaseModel): type: int # {0=undefined, 1=S/MIME, 2=PGP} published: bool # {0=no, 1=yes} automatic: bool # {0=no, 1=yes} identifier: str class StringItem(BaseModel): data: str @app.get("/user/{user_id}/entries") def get_count_user_entires(user_id: str) -> dict: """Get the number of entries for the user user_id from the IdM""" count = 3 return {"status": 200, "user_id": user_id, "count": count} @app.get("/user/{user_id}/entry/{entry_id}") def check_if_user_entry_existis(user_id: str, entry_id: int) -> dict: """Does the entry number entry_id for the user user_id from the IdM""" if entry_id < 0: status: int = 404 else: status = 200 return {"status": status, "user_id": user_id, "entry_id": entry_id} @app.post("/user/{user_id}") def create_new_entry_for_user(user_id: str, entry_id: int) -> dict: """Create a new entry for the user {user_id} in IdM and update 'change date' in IdM and return entry_id for new entry """ return {"status": 200, "user_id": user_id, "entry_id": entry_id} @app.delete("/user/{user_id}/entry/{entry_id}") def remove_entry_for_user(user_id: str, entry_id: int) -> dict: """Delete a entry for the user {user_id} in IdM""" return {"status": 200, "user_id": user_id, "entry_id": entry_id} @app.get("/user/{user_id}/entry/{entry_id}/public_info") def get_public_from_entry_for_user(user_id: str, entry_id: int) -> dict: """Get Public PGP Key / public S/MIME certificate for user user_id and entry entry_id.""" data = "..." return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": data} @app.post("/user/{user_id}/entry/{entry_id}/public_info") def change_public_from_entry_for_user( user_id: str, entry_id: int, item: StringItem ) -> dict: """Change public PGP Key / private S/MIME certificate for user user_id and entry entry_id, and update 'change date' in IdM. and update 'end of life date' in IdM. """ return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": item.data} @app.get("/user/{user_id}/entry/{entry_id}/private_info") def get_private_from_entry_for_user(user_id: str, entry_id: int) -> dict: """Get Private PGP Key / private S/MIME certificate for user user_id and entry entry_id.""" data = "..." return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": data} @app.post("/user/{user_id}/entry/{entry_id}/private_info") def change_private_from_entry_for_user( user_id: str, entry_id: int, item: StringItem ) -> dict: """Change private PGP Key / private S/MIME certificate for user user_id and entry entry_id, and update 'change date' in IdM. """ return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": item.data} @app.delete("/user/{user_id}/entry/{entry_id}/private_info") def delete_private_from_entry_for_user(user_id: str, entry_id: int) -> dict: """Delete / unpublish private PGP Key / private S/MIME certificate for user user_id and entry entry_id, and update 'change date' in IdM. """ return {"status": 200, "user_id": user_id, "entry_id": entry_id} @app.get("/user/{user_id}/entry/{entry_id}/end_of_life") def get_end_of_life_from_entry_for_user(user_id: str, entry_id: int) -> dict: """Get expire date for user user_id and entry entry_id.""" data = "..." return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": data} @app.get("/user/{user_id}/entry/{entry_id}/type") def get_type_from_entry_for_user(user_id: str, entry_id: int) -> dict: """Get type for user user_id and entry entry_id. This data is stored as serialized dict type: int \\in {0=undefined, 1=S/MIME, 2=PGP} published: int \\in {0=no, 1=yes}from """ data = {"type": 0, "published": 0, "automatic": 0, "identifier": "Some ID"} return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": data} @app.post("/user/{user_id}/entry/{entry_id}/type") def change_for_entry_for_user(user_id: str, entry_id: int, item: TypeItem) -> dict: """Change type data for user user_id and entry entry_id. This data is stored as serialized dict type: int \\in {0=undefined, 1=S/MIME, 2=PGP} published: int \\in {0=no, 1=yes} automatic:int \\in {0=no, 1=yes} identifier:str """ data = { "type": item.type, "published": item.published, "automatic": item.automatic, "identifier": item.identifier, } return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": data} @app.get("/user/{user_id}/entry/{entry_id}/given_name") def get_given_name_from_entry_for_user(user_id: str, entry_id: int) -> dict: """Get given name for user user_id and entry entry_id.""" data = "..." return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": data} @app.post("/user/{user_id}/entry/{entry_id}/given_name") def change_given_name_from_entry_for_user( user_id: str, entry_id: int, item: StringItem ) -> dict: """Change given name for user user_id and entry entry_id, and update 'change date' in IdM. """ return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": item.data} @app.get("/user/{user_id}/entry/{entry_id}/surname") def get_surname_from_entry_for_user(user_id: str, entry_id: int) -> dict: """Get surname for user user_id and entry entry_id.""" data = "..." return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": data} @app.post("/user/{user_id}/entry/{entry_id}/surname") def change_surname_from_entry_for_user( user_id: str, entry_id: int, item: StringItem ) -> dict: """Change surname for user user_id and entry entry_id, and update 'change date' in IdM. """ return {"status": 200, "user_id": user_id, "entry_id": entry_id, "data": item.data} @app.post("/user/{user_id}/entry/{entry_id}/server") def update_entry_for_user_on_server(user_id: str, entry_id: int) -> dict: """Create / update entry for user user_id and entry entry_id on LDAP / Keyserver.""" return {"status": 200, "user_id": user_id, "entry_id": entry_id} @app.delete("/user/{user_id}/entry/{entry_id}/server") def remove_entry_for_user_from_server(user_id: str, entry_id: int) -> dict: """Remove / unpublish entry for user user_id and entry entry_id from LDAP / Keyserver.""" return {"status": 200, "user_id": user_id, "entry_id": entry_id} @app.post("/user/{user_id}/server") def update_all_entries_for_user_on_server(user_id: str) -> dict: """Create / update all entries for user user_id on LDAP / Keyserver.""" return {"status": 200, "user_id": user_id} @app.delete("/user/{user_id}/server") def remove_all_entries_for_user_from_server(user_id: str) -> dict: """Remove / unpublish all entries for user user_id from LDAP / Keyserver.""" return {"status": 200, "user_id": user_id} @app.post("/user/{user_id}/cert/{cert_id}/convert") def import_public_cert_from_cert_server(user_id: str) -> dict: """Gets a public cert with cert_id for user user_id from the cert server and creates a IdM entry for it.""" return {"status": 200, "user_id": user_id} @app.post("/server") def remove_all_entries_for_all_user_on_server() -> dict: """Update all entries for all user on LDAP / keyserver.""" return {"status": 200} @app.post("/user/{user_id}/email/{email_address}/make_mime") def create_smime_certificate_for_user(user_id: str, email_address: str) -> dict: """Creates a s/mime certificate set for automatic processing""" return {"status": 200, "user_id": user_id, "email_address": {email_address}} @app.post("/user/{user_id}/email/{email_address}/make_pgp") def create_pgp_certificate_for_user(user_id: str, email_address: str) -> dict: """Creates a PGP key set for automatic processing""" return {"status": 200, "user_id": user_id, "email_address": {email_address}}