LINUX.ORG.RU

geoip 0.1.0

 , , ,


1

3

Тихо и незаметно вышла первая версия проекта geoip — self-hosted сервиса GeoIP REST API, написанного на Rust.

Функциональность:

  • Получение информации об IP-адресе (страна, город, почтовый индекс, координаты, оператор и т. п.) по REST API с использованием данных MaxMind GeoLite2 (бесплатно) и MaxMind GeoIP (платно)
  • Определение текущего IP-адреса (отдельный эндпойнт + параметр ip основного эндпойнта опционален)
  • Настраиваемые автоматические обновления баз данных (либо с официальных URL MaxMind с указанием Account ID и Licence Key, либо со своего кастомного URL без и с авторизацией, также можно задавать периодичность проверок обновлений)
  • Ко всем результатам содержащим поле timezone добавляется дополнительное поле posix_timezone (например, Europe/Paris превращается в «CET-1CEST,M3.5.0,M10.5.0/3»). Это позволяет реализовывать автоматическую настройку часового пояса на встраиваемых системах (например, ESP32 и другие newlib таргеты без tzdata). Уникальная функция недоступная в других проектах
  • База данных часовых поясов также автоматически обновляется (можно настраивать интервал, URL, авторизацию, по умолчанию используется официальный сайт IANA), при отключенных обновлениях используется системная
  • Архивы с актуальным базами данных могут быть загружены с самого сервиса по HTTP(S) (таким образом, один сервис может проксировать данные для других, чтобы уменьшать использование квоты MaxMind)
  • Можно защитить эндпоинты с данными опциональным API ключом
  • Имеется веб-интерфейс для ручных запросов с опциональной поддержкой OpenStreetMap
  • Имеется OpenAPI спецификация и Swagger UI в самом сервисе для удобной интеграции со своими проектами
  • Имеется готовый Docker образ для быстрого развёртывания
    docker run \
      -e MAXMIND_ACCOUNT_ID=XXXX \
      -e MAXMIND_LICENCE_KEY=YYYY \
      -e OSM_TILES_URL="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" \ # Необязательно
      -v geoip_data:/data \
      -p 8080:8080 \
      ghcr.io/quoi-dev/geoip:latest
    

Демо

Лицензия: MIT.

Проект нацелен на упрощение интеграции GeoIP в другие приложения, позволяя абстрагировать обновления баз данных и работу с форматом MMDB. Поддерживается работа на ОС Linux и Mac OS X, должен без проблем работать на других UNIX-совместимых системах, на Windows не поддерживается работа с таймзонами (но можно использовать WSL).

>>> GitHub

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

Не могу придумать зачем для такого REST API? Эту базу же один раз скачать и потом автоматически обновлять скриптом. Занимает считанные мегабайты. Запросы в неё в тысячи раз быстрее, чем HTTP запросы чёрт знает куда.

BattleCoder ★★★★★
()
Ответ на: комментарий от Anoxemian

Это же все можно сделать одним пыхоскриптом на коленке за час.

Но коленку жалко...

Somebody ★★★★
()
Ответ на: комментарий от Somebody

Прямо как в том анекдоте про юриста.

Папа, папа, я сегодня выиграл свой первый суд! И знаешь, папа, это то самое дело которое ты вел все прошлые 10 лет и не мог выиграть, а я его выиграл за один день! Отец на это очень раздраженно отвечает: - Вы только посмотрите на этого идиота! Он сегодня за один день закончил дело которое кормило нашу семью почти 10 лет! Кто нас теперь кормить-то будет?

BattleCoder ★★★★★
()

ого, кто-то потратил 5 минут чтобы сгенерировать проект на русте, который спрашивает базу данных геоип и рисует на карте. у меня есть такой же на го, работает много лет и не на убогом русте.

bernd ★★★★★
()
Ответ на: комментарий от bernd

Возвращайся, когда в Go завезут enum как отдельный тип, а не как набор int констант, которые можно пихать куда-угодно

KivApple ★★★★★
() автор топика
Ответ на: комментарий от bernd

Никакой язык с константами и числовыми типами не запрещает наобьявлять констант и гонять их, храня как числа. Гибкость такого рода есть везде.

Явное приведение enum -> int и int -> enum, если хочется заниматься арифметикой тоже есть везде, но уже где есть enum.

А вот так описать функцию, чтобы в неё нельзя было совать что попало (чтобы ловить ошибки при рефакторинге и в целом подсказывать вызывающему функцию как ей пользоваться), могут не все.

Такая гибкость из разряда автопреобразования строки в число в JS. Полезно только для отсрела ног.

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 5)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.