{"id":21887192,"url":"https://github.com/profcomff/auth-lib","last_synced_at":"2025-04-15T09:50:23.095Z","repository":{"id":63823273,"uuid":"537918467","full_name":"profcomff/auth-lib","owner":"profcomff","description":"Библиотека функций авторизации для микросервисов Твой ФФ!","archived":false,"fork":false,"pushed_at":"2024-08-03T22:08:02.000Z","size":75,"stargazers_count":12,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-28T18:55:14.390Z","etag":null,"topics":["auth-service"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/auth-lib-profcomff/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/profcomff.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-17T20:05:52.000Z","updated_at":"2024-12-07T20:51:29.000Z","dependencies_parsed_at":"2024-04-06T14:26:00.880Z","dependency_job_id":"aff56c79-0eea-4e3e-9070-c81cd55d7575","html_url":"https://github.com/profcomff/auth-lib","commit_stats":{"total_commits":23,"total_committers":2,"mean_commits":11.5,"dds":"0.17391304347826086","last_synced_commit":"013b6ac17479fa0d6cf24a2a31c27aaffdb68df3"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Fauth-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Fauth-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Fauth-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Fauth-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/profcomff","download_url":"https://codeload.github.com/profcomff/auth-lib/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248675799,"owners_count":21143811,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auth-service"],"created_at":"2024-11-28T11:08:44.542Z","updated_at":"2025-04-15T09:50:23.078Z","avatar_url":"https://github.com/profcomff.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# auth-lib\nБиблиотека функций авторизации для микросервисов Твой ФФ!\n\n[\u003cimg src=\"https://cdn.profcomff.com/easycode/easycode.svg\" width=\"200\"\u003e\u003c/img\u003e](https://easycode.profcomff.com/templates/docker-fastapi/workspace?mode=manual\u0026param.Repository+URL=https://github.com/profcomff/auth-lib.git\u0026param.Working+directory=auth-lib)\n\n[![pypi](https://img.shields.io/pypi/dm/auth-lib-profcomff?label=PIP%20INSTALLS\u0026style=for-the-badge)](https://pypi.org/project/auth-lib-profcomff)\n[![tg](https://img.shields.io/badge/telegram-Viribus%20unitis-brightgreen?style=for-the-badge\u0026logo=telegram)](https://t.me/+eIMtCymYDepmN2Ey)\n\n\n## Функционал\nХранение общих методов аутентификации и авторизации для бэкендов Твой ФФ\n\n## Примеры использования\n### FastAPI\n```python\nfrom auth_lib.fastapi import UnionAuth\nfrom fastapi import APIRouter, Depends\nrouter = APIRouter(prefix=\"/...\")\n\n## Чтобы дернуть ручку нужен один скоуп, авторизация обязательна\n## Юзкейс https://github.com/profcomff/timetable-api/blob/a374c74cd960941100f6c923ff9c3ff706a1ed09/calendar_backend/routes/room/room.py#L45\n@router.smth(\"/\")\nasync def foo(_=Depends(UnionAuth(scopes=[\"service.resource.method\"], allow_none=False, auto_error=True))):\n  pass\n\n## Чтобы дернуть ручку нужно два скоупа, авторизация обязательна\n## Юзкейс https://github.com/profcomff/print-api/blob/775f36fdd185eec8d9096d3472b7730cf5ac9798/print_service/routes/user.py#L78\n@router.smth(\"/\")\nasync def bar(_=Depends(UnionAuth(scopes=[\"scope1\", \"scope2\"], allow_none=False, auto_error=True))):\n  pass\n\n## Чтобы дернуть ручку не нужны скоупы, авторизация необязательна, но если передана недействительная сессия, то кинет ошибку\n@router.smth(\"/\")\nasync def baz(_=Depends(UnionAuth(scopes=[], allow_none=True, auto_error=True))):\n  pass\n\n\n## Чтобы дернуть ручку не нужны скоупы, авторизация обязательна\n@router.smth(\"/\")\nasync def foo(_=Depends(UnionAuth(scopes=[], allow_none=False, auto_error=True))):\n  pass\n\n```\nDepends вызывает инстанс класса с нужными параметрами и возвращает словарь со всеми полями отсюда https://api.test.profcomff.com/#/Logout/me_me_get\n\n#### Параметры конструктора UnionAuth\n- `scopes: list[str]` - список имен скоупов, которые нужны в данной ручке. Например `[\"printer.user.create\", \"printer.user.delete\"]`\n- `allow_none: bool` - Если true, то при отсутствии нужного заголовка в запросе ручка будет доступна юзеру, если заголовк передан, то обработка идет в зависимости от следующего параметра\n- `auto_error: bool` - если `True`, то при несовпадении скоупов/завершенной сессии и т.д. (на запрос `GET /me` не 200) - кинет 401, если `False`, то не будет кидать ошибки, но будет возвращать `None`\n\nЧтобы задать хост авторизации надо в переменные окружения или в .env файл прописать AUTH_URL=\"...\"\n\n#### Настройки\n```python\nauth_url=\"https://api.test.profcomff.com/auth/\"\nAUTH_AUTO_ERROR: bool = True\nAUTH_ALLOW_NONE: bool = False\n\n```\n\n## Тестирование сервисов\nУстановите нужные завивсимости\n```shell\npip install 'auth-lib-profcomff[testing]'\n```\n\nИспользуйте маркировку для тестирования\n```python\nimport pytest\nfrom fastapi.testclient import TestClient\nfrom fastapi import FastAPI\n\n@pytest.fixture\ndef client(auth_mock):\n    yield TestClient(FastAPI())\n\n@pytest.mark.authenticated(\"scope1\", \"scope2\", ..., user_id=5)\ndef test1(client):\n    \"\"\"\n    В этом тесте будут выданы скоупы scope1, scope2, user_id в ответе будет равен 5\n    библиотека не будет проверять токен через АПИ, будет просто возвращать\n    нужный словарь, как будто пользователь авторизован с нужными скоупами\n    \"\"\"\n    assert 2*2 == 4\n\n\n@pytest.mark.authenticated()\ndef test2(client):\n    \"\"\"\n    В этом тесте скоупов выдано не будет, user_id будет равен 0\n    но библиотека не будет проверять токен через АПИ, будет просто возвращать\n    нужный словарь, как будто пользователь авторизован с нужными скоупами\n    \"\"\"\n    assert 2*2 == 4\n\n\ndef test3(client):\n    \"\"\"\n    В этом тесте скоупов выдано не будет, библиотека будет проверять\n    токен через АПИ\n    \"\"\"\n    assert 2*2 == 4\n```\n\n## Contributing \n - Основная [информация](https://github.com/profcomff/.github/wiki/%255Bdev%255D-Backend-%25D1%2580%25D0%25B0%25D0%25B7%25D1%2580%25D0%25B0%25D0%25B1%25D0%25BE%25D1%2582%25D0%25BA%25D0%25B0) по разработке наших приложений\n\n - [Ссылка](https://github.com/profcomff/auth-lib/blob/main/CONTRIBUTING.md) на страницу с информацией по разработке auth-lib\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofcomff%2Fauth-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprofcomff%2Fauth-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofcomff%2Fauth-lib/lists"}