Skip to main content

Прокси-сервер OAuth2 для hh-cli. Необходим для обмена кодами авторизации на токены доступа без раскрытия секретного ключа клиента.

Project description

hh-cli-server

PyPI version License: MIT

Безопасный прокси-сервер для hh-cli.

Описание

hh-cli-server — это веб-сервис, который выступает в роли посредника между hh-cli и API HeadHunter. Его единственная задача — решить фундаментальную проблему безопасности: Client Secret никогда не должен храниться в клиентском приложении. Если поместить его в код hh-cli, любой сможет его извлечь и скомпрометировать.

Примечание: Клиент hh-cli оперирует только временным кодом авторизации, а сервер проводит рукопожатие и получает токен доступа, Client Secret никогда не покидает сервер.

Развёртывание и разработка

Для развёртывания вам понадобится:

  1. Сервер под управлением Linux (инструкция написана для Debian/Ubuntu).
  2. Доменное имя, делегированное на IP-адрес вашего сервера.
  3. Python 3.9+ и pip.
  4. 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.

Лицензия

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hhcli_server-0.1.1.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hhcli_server-0.1.1-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

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

Hashes for hhcli_server-0.1.1.tar.gz
Algorithm Hash digest
SHA256 881e788763ecb7b97f740c3a59af606befebc79bc3ac4dace71179df9ebc93f0
MD5 6f564c0421fcdc1da9744febd891e1df
BLAKE2b-256 f373ab30ca280669c3da376532b0955523684bac888a2449633a79376e21bf09

See more details on using hashes here.

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

Hashes for hhcli_server-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a575b1a1a21f03922214165705ff2fd7ddb52fee1464821b23c967dd613f0c01
MD5 233daad954d8d8b9e1df28a0ce6fcc9c
BLAKE2b-256 779b35c84c55d37629d5a58a01865dddd696dc3a05f4081c8170d32c3fc1decd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page