Проект включает в себя как серверную часть, так и веб-приложение, предназначенное для взаимодействия с детскими умными часами, оснащенными GPS-трекерами разных моделей и известных под разными брендами. Например, он может работать с Q50, Q60, Q80, Q90, Q100, Q360, Q523, Q730, Q750, Q8, GW100, GW100S, GW200, GW200S, GW300, GW300S, GW400S, GW400X, GW500S, GW600S, GW700, GW800, GW900, GW900S, GW1000, GW1000S, EW100, EW100S, EW200, K911, W8, W9, W10, Y3, G36 SAFE KEEPER, DS18, T58, T100, I8, G10, G100, D99, D100, D100S и многие другие. Грубо говоря, оно делает то же самое, что и такие приложения, как SeTracker, FindMyKids и так далее. Основное отличие состоит в том, что все личные данные, такие как контакты, должности, история общения и так далее, становятся по-настоящему конфиденциальными, поскольку хранятся на оборудовании, контролируемом пользователем.
Еще одна проблема, которая была рассмотрена, — это модель безопасности приложений для связи и отслеживания детских умных часов. По умолчанию любой человек может получить контроль над устройством, если известен идентификатор устройства, без дальнейшего подтверждения того, что он является владельцем устройства. Идентификатор, в свою очередь, можно легко получить, отправив на устройство текстовое сообщение, если известен номер мобильного телефона устройства. Пароль конечно есть, но на всех устройствах один и тот же заводской пароль и нет назойливых уведомлений с просьбой его сменить, поэтому никто так не делает.
В этом приложении реализованы следующие сценарии безопасности:
И последнее, но не менее важное: это бесплатно и без рекламы :).
Создать проект так же просто, как
docker compose -f docker-builder.yml run --rm builder
При построении создается сертификат SSL, необходимый для https
-соединений. Можно указать домен и/или IP-адрес, используя переменные среды DOMAIN
и IP
docker compose -f docker-builder.yml run --rm -e DOMAIN=example.com -e IP=123.45.67.89 builder
Приложение может поддерживаться различными базами данных по вашему выбору. Самый легкий сценарий — использовать встроенную базу данных H2. В этом случае приложение можно запустить командой
docker compose --profile h2 up -d
Также возможно использовать PostreSQL как в контейнере, так и автономно. В первом случае вы можете запустить приложение командой
docker compose --profile pg up -d
В последнем случае вам необходимо заполнить файл db.env
URL-адресом базы данных и учетными данными, а затем запустить команду
docker compose --profile pg_ext up -d
Если ваша версия Compose не поддерживает профили, вы можете использовать отдельные файлы Compose для каждого сценария.
docker compose -f h2.yml up -d
docker compose -f pg.yml up -d
docker compose -f pg_ext.yml up -d
В последнем случае вам все равно необходимо заполнить файл db.env
URL-адресом базы данных и учетными данными.
Также можно пропустить скучную фазу сборки и запустить двоичный файл, прикрепленный к выпуску (предполагается установка Java 8 или выше).
java -jar kidtracker.jar
Бинарный файл настроен на использование встроенной базы данных H2. При первом запуске в рабочем каталоге создаются три папки:
data
содержат записи базы данных о местоположении устройств, номерах телефонов и т. д. Эта дата конфиденциальна, поэтому храните ее в безопасности!logs
достаточно информативны, содержат логи как для самого приложения, так и для устройств, когда активна отладка устройства,media
эта папка используется для преобразования входящего аудио в формате amr в mp3. Веб-интерфейс доступен по https://<hostname>:8003
. Для входа используйте учетные данные admin
/ password
по умолчанию.
Чтобы назначить устройство пользователю, зарегистрированному в приложении, приложение должно быть доступно из общедоступных сетей, то есть оно должно иметь общедоступный IP-адрес и, возможно, связанное с ним доменное имя. По умолчанию приложение прослушивает устройства на порту 8001
, предположим, что тот же порт сопоставлен с общедоступной сетью. Затем следующее текстовое сообщение, отправленное на устройство, заставляет его начать подключение к приложению:
pw,123456,ip,<public IP address or domain>,8001#
Здесь 123456
— пароль по умолчанию, который, скорее всего, установлен на устройстве. Другие известные пароли по умолчанию: 523681
, 54321
и 654321
. Однако если пароль был изменен, вместо пароля по умолчанию следует использовать новый пароль.
Настоятельно рекомендуется сменить пароль по умолчанию!
Затем нажмите кнопку в правой части панели навигации, а затем нажмите кнопку в нижнем колонтитуле. Идентификатор устройства необходим для назначения устройства. Как только устройство подключается к приложению, на устройство отправляется четырехзначный токен подтверждения. Чтобы подтвердить, что пользователь является владельцем устройства, этот токен необходимо ввести во всплывающую форму в течение следующих 5 минут, после того как срок действия токена истечет.
Любой пользователь, зарегистрированный в приложении, может быть либо обычным пользователем, либо администратором. Администраторы могут регистрировать других пользователей, тогда как обычные пользователи не могут, это единственное отличие. Администраторы могут создавать как обычных пользователей, так и других администраторов. Существующему пользователю права администратора не могут быть ни предоставлены, ни отозваны. Единственный способ изменить их — удалить учетную запись пользователя и создать ее заново.
По соображениям безопасности номер мобильного телефона пользователя также нельзя изменить. Опять же, чтобы изменить его, учетную запись пользователя необходимо удалить и создать заново. Чтобы удалить учетную запись пользователя, необходимо отвязать от нее все устройства.
При первом запуске создается учетная запись пользователя по умолчанию с правами администратора, логином admin
и password
. Рекомендуется либо удалить эту учетную запись при создании других учетных записей пользователей, либо изменить пароль по умолчанию. Если существует только одна учетная запись с правами администратора, ее невозможно удалить. Учетная запись администратора по умолчанию не имеет действующего номера мобильного телефона, и ей нельзя назначить ни одно устройство.
Устройства взаимодействуют с приложением посредством сообщений. Существует несколько типов сообщений: некоторые могут содержать информацию о местонахождении устройства и оповещения, другие содержат фактический заряд аккумулятора и значение шагомера.
Некоторые сообщения также могут быть отправлены приложением на устройство, чтобы заставить его выполнить несколько действий или изменить свои настройки. Чтобы убедиться, что устройство получило сообщение, оно отправляет подтверждающее сообщение обратно в приложение. Во время ожидания подтверждающего сообщения пользовательский интерфейс остается заблокированным. Если в течение 10 секунд не получено подтверждение (можно настроить), исходное сообщение считается неподтвержденным.
Маркеры положения всех назначенных устройств вместе с маркером положения пользователя используют одну и ту же карту. Маркеры устройства содержат информацию о времени последнего известного местоположения, заряде аккумулятора, значении шагомера и, в конечном итоге, оповещении об отключении устройства, оповещении о низком заряде батареи, оповещении о потере соединения и оповещении об устаревшем местоположении. Устройство считается утерянным, если последнее сообщение от устройства было получено более 15 минут назад.
Устройство может предоставлять свое фактическое местоположение на основе прямых данных GPS, когда они доступны, а также последнее обнаруженное местоположение, когда прямое наблюдение GPS недоступно, в основном внутри зданий или при наличии электромагнитных помех, в таких случаях данные GPS
считается устаревшим. Если полученные данные о местоположении устарели, отображается предупреждение об устаревании данных.
Обратите внимание, что предупреждение о низком заряде батареи и фактическое значение заряда приходят в разных типах сообщений. Сообщения с фактической оплатой приходят чаще (каждые 5 минут), чем сообщения с локациями и оповещениями, которые можно не отправлять часами. Поэтому маркер нередко показывает 100% заряда аккумулятора вместе с предупреждением о низком заряде аккумулятора. В этом случае приоритет отдается численному значению заряда батареи, а предупреждение о низком заряде батареи можно игнорировать.
Устройство отправляет тревожные сообщения при нажатии кнопки SOS. В этом случае маркер устройства становится красным, и до тех пор, пока не будет нажата метка, будет воспроизводиться звук сирены. Результаты щелчка по маркеру перемещают его вверх и переключают выбор ребенка. Когда включен выбор ребенка, маркер выбранного устройства оказывается сверху.
Устройство может отправлять в приложение аудиосообщения и (если оно оснащено камерой) снимки. При поступлении нового сообщения такого типа маркер устройства становится синим, и до тех пор, пока не будет нажата метка, воспроизводится звук звонка старинного телефона. Как и в случае с сигналом тревоги, щелчок по маркеру приводит к его перемещению вверх и переключению выбора ребенка.
Временные метки в любом месте пользовательского интерфейса доступны для щелчка, и одним щелчком мыши можно переключаться между абсолютными значениями даты и времени, а также интервалом времени с настоящего момента.
Есть два значка, которые имеют два состояния: заполненное и подключенное. Первый заполняется, когда вид карты следует за выбранным маркером устройства. Его состояние можно переключить, щелкнув по нему. Еще один заполняется, когда вид карты следует за маркером положения пользователя. Его состояние также можно переключить, щелкнув по нему. Когда один значок заполняется, другой становится проводным и наоборот. Оба значка становятся проводными при перетаскивании карты.
При нажатии на команду, чтобы активировать GPS и предоставить текущую позицию, отправляется на устройство. Представление карты начнет следовать за маркером устройства, значок отслеживания устройства станет заполненным.
Чат с устройством асимметричен. Текстовые сообщения чата можно отправлять на устройство с помощью кнопки , тогда как устройство может отправлять короткие аудиосообщения и, если устройство оснащено камерой, снимки. Устройство также можно заставить сделать снимок с помощью кнопки или сделать 15-секундную аудиозапись с помощью кнопки .
Диалоговое окно истории позволяет выбрать временной интервал в двух режимах: по дате, от полуночи до следующей, и общий, где пользователь может выбрать как начало, так и конец интервала. Для переключения между режимами нажимайте на метки выбора даты и времени.
При выборе временного интервала может отображаться история чата или график шагомера и заряда аккумулятора. Трек устройства за выбранный интервал времени также можно нанести на карту. В правом верхнем углу появится ползунок, который используется для перемещения маркера устройства по треку. При проверке журнала истории значок диалогового окна истории меняется на . Чтобы удалить трек и вернуться к позициям онлайн-маркеров, нажмите на него.
Диалоговое окно «Контакты» позволяет редактировать основного и дополнительного администратора устройства, номера SOS, контакты устройства, номера, которым разрешено совершать вызовы на устройство, а также номера быстрого вызова, назначенные кнопкам устройства. Для всех категорий контактов существует фиксированное количество мест, которые можно заполнить. По умолчанию пустые слоты скрыты, но их можно отобразить, нажав кнопку в нижнем колонтитуле диалогового окна.
Диалоговое окно «Дети» позволяет пользователю назначать и отменять назначение детских устройств, менять ползунок и получать некоторую общую информацию об устройстве и его фактическом состоянии. В левом столбце расположен кликабельный большой палец, щелчок по которому вызывает диалоговое окно редактирования ребенка. В средней колонке указан идентификатор устройства. Если устройство находится в сети, его идентификатор отображается зеленым цветом, в противном случае — красным. Под идентификатором устройства указано время получения последнего сообщения от устройства. Все пользователи, имеющие доступ к устройству, указаны в крайнем правом столбце со своими мобильными телефонами.