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.0.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.0-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file hhcli_server-0.1.0.tar.gz.

File metadata

  • Download URL: hhcli_server-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 c4faa1d963cb8bf9fc054f460b7dcc87c87384c223e577675e61c8def86c616c
MD5 70b96bf090455f4e1ad533e58ce05cf2
BLAKE2b-256 9617a8ce4f59b56394ee5264a035eea0469cfc132cc867a782aa25e36bbbf357

See more details on using hashes here.

File details

Details for the file hhcli_server-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: hhcli_server-0.1.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 20bacaa67abfd210539a3617b34b56982dfed936429cc0d0aabd69a7d1df1e31
MD5 7ed433ee4f05a168946d1dfd4d6737af
BLAKE2b-256 768491dd0d23579dd4e89b127a7acb54a3918bba38854b42bf2f37fe8418f4d9

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