Metadata-Version: 2.1
Name: email-auth-remote
Version: 1.3.0
Summary: Django app for an endpoint authentication.
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: Django>=4.2
Requires-Dist: requests>=2.31
Requires-Dist: djangorestframework>=3.14
Requires-Dist: dj-rest-auth==5.1.0
Requires-Dist: djangorestframework-simplejwt==5.3.1

# Email Auth Remote

Проект для интеграции МС авторизации с другими Django МС.

## Как пользоваться

Добавить проект в INSTALLED_APPS.

```python
# File: settings.py

INSTALLED_APPS = [
    ...
    "rest_framework_simplejwt",
    "email_auth_remote",
]
```

В urlpatterns добавить include("email_auth_remote.urls") перед admin.site.urls.

```python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("api/v1/catalog/admin/", include("email_auth_remote.urls")),
    path("api/v1/catalog/admin/", admin.site.urls),
]
```

Установить переменные в settings.py.

```python
# File: settings.py

## defaults:
EMAIL_AUTH_REMOTE = {
    "JWT_AUTH_COOKIE": None,
    "JWT_AUTH_REFRESH_COOKIE": None,
    "JWT_AUTH_REFRESH_COOKIE_PATH": "/",
    "JWT_AUTH_COOKIE_USE_CSRF": False,
    "JWT_AUTH_COOKIE_ENFORCE_CSRF_ON_UNAUTHENTICATED": False,
    "JWT_AUTH_SECURE": False,
    "JWT_AUTH_HTTPONLY": True,
    "JWT_AUTH_SAMESITE": "Lax",
    "JWT_AUTH_COOKIE_DOMAIN": None,
    "JWT_REFRESH_URL": None,
    "ADMIN_LOGIN_URL": None,
    "LOGOUT_URL": None,
}

## examples:
EMAIL_AUTH_REMOTE = {
    "JWT_AUTH_COOKIE": "jwt_access_token",
    "JWT_AUTH_REFRESH_COOKIE": "jwt_refresh_token",
    "JWT_AUTH_REFRESH_COOKIE_PATH": "/",
    "JWT_AUTH_COOKIE_USE_CSRF": True,
    "JWT_REFRESH_URL": "http://auth:8000/api/v1/auth/token/refresh/",
    "ADMIN_LOGIN_URL": "/api/v1/auth/admin/login/",
    "LOGOUT_URL": "http://auth:8000/api/v1/auth/logout/",
    "JWT_AUTH_COOKIE_ENFORCE_CSRF_ON_UNAUTHENTICATED": False,
    "JWT_AUTH_SECURE": False,
    "JWT_AUTH_HTTPONLY": True,
    "JWT_AUTH_SAMESITE": "Lax",
    "JWT_AUTH_COOKIE_DOMAIN": None,
}

```

Добавить класс аутентификации

```python
# File: settings.py

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": [
        "email_auth_remote.authentication.JWTStatelessCookieAuthentication",
    ],
}

```

**Важная информация:**
При использовании библиотеки модель CustomTokenUser, полученная через request.user не будет
сохранена в
БД. На эту модель невозможно ссылаться через ForeignKey и тд. Сохранение в БД также невозможно.

## Разрешения IsDesigner IsSeller 

Всего есть 4 возможных permissions. 

```python
from email_auth_remote.permissions import (
    IsDesigner,
    IsSeller,
    IsSellerOrReadOnly,
    IsDesignerOrReadOnly,
)

class ExampleView(generics.GenericAPIView):
    """
    Пример View только для продавца.
    """
    permission_classes = (IsSeller,)
    # other logic here ...
```

## Сборка

***Необходимо только для сборки, для интеграции не надо.***

Как собрать проект локально

```bash
python3 -m pip install build
python3 -m build 
```

### Проверка собранного пакета

```bash
python3 -m pip install twine
twine check dist/*
```

### Выкладывание проекта в PYPI

```bash
twine upload dist/*
```
