Прокси-сервер OAuth2 для hh-cli. Необходим для обмена кодами авторизации на токены доступа без раскрытия секретного ключа клиента.
Project description
hh-cli-server
Безопасный прокси-сервер для hh-cli.
Описание
hh-cli-server — это веб-сервис, который выступает в роли посредника между hh-cli и API HeadHunter. Его единственная задача — решить фундаментальную проблему безопасности: Client Secret никогда не должен храниться в клиентском приложении. Если поместить его в код hh-cli, любой сможет его извлечь и скомпрометировать.
Примечание: Клиент
hh-cliоперирует только временным кодом авторизации, а сервер проводит рукопожатие и получает токен доступа,Client Secretникогда не покидает сервер.
Развёртывание и разработка
Для развёртывания вам понадобится:
- Сервер под управлением Linux (инструкция написана для Debian/Ubuntu).
- Доменное имя, делегированное на IP-адрес вашего сервера.
- Python 3.9+ и
pip. Client IDиClient Secretот dev.hh.ru.
Шаг 1: Клонирование
Подключитесь к серверу по SSH и склонируйте репозиторий:
git clone https://github.com/fovendor/hhcli-server.git
cd hhcli-server
Шаг 2: Настройка окружения
Установка venv и создание окружения:
sudo apt update && sudo apt install -y python3-venv
python3 -m venv venv
source venv/bin/activate
Установка зависимостей:
pip install -r <(poetry export -f requirements.txt)
Шаг 3: Файл с ключами
Создайте файл .env в корне проекта для хранения ваших API-ключей.
nano .env
Добавьте в него ваши ключи в следующем формате:
HH_CLIENT_ID="ВАШ_ID_КЛИЕНТА"
HH_CLIENT_SECRET="ВАШ_СЕКРЕТ_КЛИЕНТА"
Важно: Этот файл никогда не должен попадать в Git. Он уже добавлен в
.gitignore.
Шаг 4: Настройка Systemd для автозапуска
Создайте сервис, который будет автоматически запускать Gunicorn и стартовать приложение.
sudo nano /etc/systemd/system/hhcli-server.service
Создайте конфигурацию, заменив your_user на имя пользователя системы:
[Unit]
Description=Gunicorn instance to serve hhcli-server
After=network.target
[Service]
User=your_user
Group=www-data
# ЗАМЕНИТЕ 'your_user'
WorkingDirectory=/home/your_user/hhcli-server
# ЗАМЕНИТЕ 'your_user'
EnvironmentFile=/home/your_user/hhcli-server/.env
# ЗАМЕНИТЕ 'your_user'
ExecStart=/home/your_user/hhcli-server/venv/bin/gunicorn --workers 3 --bind unix:hhcli_server.sock -m 007 hhcli_server.app:app
[Install]
WantedBy=multi-user.target
Запустите и включите сервис:
sudo systemctl start hhcli-server
sudo systemctl enable hhcli-server
# Проверьте статус. Должно быть "active (running)"
sudo systemctl status hhcli-server
Шаг 5: Настройка Nginx
Скопируйте пример конфигурации. Нужно заменить все вхождения your_domain.com и your_user на реальные значения.
sudo cp nginx_config/hhcli-server.conf /etc/nginx/sites-available/your_domain.com.conf
sudo nano /etc/nginx/sites-available/your_domain.com.conf
Включите сайт и проверьте конфигурацию Nginx:
# ЗАМЕНИТЕ 'your_domain.com'
sudo ln -s /etc/nginx/sites-available/your_domain.com.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Шаг 6: Настройка HTTPS с Certbot
Это финальный шаг для обеспечения безопасности.
# Устанавливаем Certbot
sudo apt install certbot python3-certbot-nginx
# ЗАМЕНИТЕ 'your_domain.com'
sudo certbot --nginx -d your_domain.com
Следуйте инструкциям Certbot. Он автоматически получит SSL-сертификат и настроит Nginx для работы по HTTPS.
Готово! Ваш прокси-сервер развернут и доступен по адресу https://your_domain.com/.
API Эндпоинты
GET /api/get_config: Возвращает публичныйclient_id.POST /api/exchange_code: Принимает JSON{ "code": "..." }и обменивает его наaccess_token.
Лицензия
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hhcli_server-0.1.1.tar.gz.
File metadata
- Download URL: hhcli_server-0.1.1.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
881e788763ecb7b97f740c3a59af606befebc79bc3ac4dace71179df9ebc93f0
|
|
| MD5 |
6f564c0421fcdc1da9744febd891e1df
|
|
| BLAKE2b-256 |
f373ab30ca280669c3da376532b0955523684bac888a2449633a79376e21bf09
|
File details
Details for the file hhcli_server-0.1.1-py3-none-any.whl.
File metadata
- Download URL: hhcli_server-0.1.1-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a575b1a1a21f03922214165705ff2fd7ddb52fee1464821b23c967dd613f0c01
|
|
| MD5 |
233daad954d8d8b9e1df28a0ce6fcc9c
|
|
| BLAKE2b-256 |
779b35c84c55d37629d5a58a01865dddd696dc3a05f4081c8170d32c3fc1decd
|