Improved MacOS support and organized screens and utils

This commit is contained in:
nullpeer
2025-11-30 12:49:33 +03:00
parent ae6fd57040
commit d793498d0a
56 changed files with 255 additions and 63 deletions

176
lib/screens/tos_screen.dart Normal file
View File

@@ -0,0 +1,176 @@
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:url_launcher/url_launcher.dart';
class TosScreen extends StatelessWidget {
const TosScreen({super.key});
final String tosText = """
### 1. Статус и отношения
1.1. «Komet» (далее — «Приложение») — неофициальное стороннее приложение, не имеющее отношения к ООО «Коммуникационная платформа» (правообладатель сервиса «MAX»).
1.2. Разработчики Приложения не являются партнёрами, сотрудниками или аффилированными лицами ООО «Коммуникационная платформа».
1.3. Все упоминания торговых марок «MAX» и связанных сервисов принадлежат их правообладателям.
### 2. Условия использования
2.1. Используя Приложение «Komet», вы:
- Автоматически подтверждаете согласие с официальным Пользовательским соглашением «MAX» (https://legal.max.ru/ps)
- Осознаёте, что использование неофициального клиента может привести к блокировке аккаунта со стороны ООО «Коммуникационная платформа»;
- Принимаете на себя все риски, связанные с использованием Приложения.
2.2. Строго запрещено:
- Использовать Приложение «Komet» для распространения запрещённого контента;
- Осуществлять массовые рассылки (спам);
- Нарушать законодательство РФ и международное право;
- Предпринимать попытки взлома или нарушения работы оригинального сервиса «MAX».
2.3. Техническая реализация соответствует принципу добросовестного использования (fair use) и не нарушает исключительные права правообладателя в соответствии с статьёй 1273 ГК РФ.
2.4. Особенности технического взаимодействия:
- Приложение «Komet» использует публично доступные методы взаимодействия с сервисом «MAX», аналогичные веб-версии (https://web.max.ru)
- Все запросы выполняются в рамках добросовестного использования для обеспечения совместимости;
- Разработчики не осуществляют обход технических средств защиты и не декомпилируют оригинальное ПО.
### 3. Технические аспекты
3.1. Приложение «Komet» использует только публично доступные методы взаимодействия с сервисом «MAX» через официальные конечные точки.
3.2. Все запросы выполняются в рамках добросовестного использования (fair use) для обеспечения совместимости.
3.3. Разработчики не несут ответственности за:
- Изменения в API оригинального сервиса;
- Блокировку аккаунтов пользователей;
- Функциональные ограничения, вызванные действиями ООО «Коммуникационная платформа».
### 4. Конфиденциальность
4.1. Приложение «Komet» не хранит и не обрабатывает персональные данные пользователей.
4.2. Все данные авторизации передаются напрямую серверам ООО «Коммуникационная платформа».
4.3. Разработчики не имеют доступа к логинам, паролям, переписке и другим персональным данным пользователей.
### 5. Ответственность и ограничения
5.1. Приложение «Komet» предоставляется «как есть» (as is) без гарантий работоспособности.
5.2. Разработчики вправе прекратить поддержку Приложения в любой момент без объяснения причин.
5.3. Пользователь обязуется не использовать Приложение «Komet» в коммерческих целях.
### 6. Правовые основания
6.1. Разработка и распространение Приложения «Komet» осуществляются в соответствии с:
- Статья 1280.1 ГК РФ — декомпилирование программы для обеспечения совместимости;
- Статья 1229 ГК РФ — ограничения исключительного права в информационных целях;
- Федеральный закон № 149-ФЗ «Об информации» — использование общедоступной информации;
- Право на межоперабельность (Directive (EU) 2019/790) — обеспечение взаимодействия программ.
6.2. Взаимодействие с сервисом «MAX» осуществляется исключительно через:
- Публичные API-интерфейсы, доступные через веб-версию сервиса;
- Методы обратной разработки, разрешённые ст. 1280.1 ГК РФ для целей совместимости;
- Открытые протоколы взаимодействия, не защищённые техническими средствами охраны.
6.3. Приложение «Komet» не обходит технические средства защиты и не нарушает нормальную работу оригинального сервиса, что соответствует требованиям статьи 1299 ГК РФ.
### 7. Заключительные положения
7.1. Используя Приложение «Komet», вы соглашаетесь с тем, что:
- Единственным правомочным способом использования сервиса «MAX» является применение официальных клиентов;
- Все претензии по работе сервиса должны направляться в ООО «Коммуникационная платформа»;
- Разработчики Приложения не несут ответственности за любые косвенные или прямые убытки.
7.2. Настоящее соглашение может быть изменено без предварительного уведомления пользователей.
### 8. Функции безопасности и конфиденциальности
8.1. Приложение «Komet» включает инструменты защиты приватности:
- Подмена данных сессии — для предотвращения отслеживания пользователя;
- Система прокси-подключений — для обеспечения безопасности сетевого взаимодействия;
- Ограничение телеметрии — для минимизации передачи диагностических данных.
8.2. Данные функции:
- Направлены исключительно на защиту конфиденциальности пользователей;
- Не используются для обхода систем безопасности оригинального сервиса;
- Реализованы в рамках статьи 152.1 ГК РФ о защите частной жизни.
8.3. Разработчики не несут ответственности за:
- Блокировки, связанные с использованием инструментов конфиденциальности;
- Изменения в работе сервиса при активации данных функций.
### 8.4. Функции экспорта и импорта сессии
8.4.1. Приложение «Komet» предоставляет возможность экспорта и импорта данных сессии для:
- Обеспечения переносимости данных между устройствами пользователя
- Резервного копирования учетных данных
- Восстановления доступа при утере устройства
8.4.2. Особенности реализации:
- Экспорт сессии осуществляется без привязки к номеру телефона
- Данные сессии защищаются паролем и шифрованием по алгоритмам AES-256
- Ключ шифрования известен только пользователю и не сохраняется в приложении
8.4.3. Техническая реализация экспорта сессии:
- Экспорт сессии осуществляется через токен авторизации для идентификации в сервисе
- Используется подмена параметров сессии для сохранения контекста аутентификации
- Интеграция настроек прокси для обеспечения единой конфигурации подключения
- Импортированная сессия маскирует источник подключения через указанные прокси-настройки
- Серверы оригинального сервиса не получают данных о смене устройства пользователя
- Шифрование применяется ко всему пакету данных (сессия + прокси-конфиг)
8.4.4. Правовые основания:
- Статья 6 ФЗ-152 «О персональных данных» — обработка данных с согласия субъекта
- Статья 434 ГК РФ — право на выбор формы сделки (электронная форма хранения учетных данных)
- Принцип минимизации данных — сбор только необходимой для работы информации
- Использование токена не является несанкционированным доступом (ст. 272 УК РФ не нарушается)
- Подмена сессии — легитимный метод сохранения аутентификации (аналог браузерных cookies)
- Маскировка IP-адреса — законный способ защиты персональных данных (ст. 6 ФЗ-152)
8.4.5. Ограничения ответственности:
- Пользователь самостоятельно несет ответственность за сохранность пароля и резервных копий
- Разработчики не имеют доступа к зашифрованным данным сессии
- Восстановление утерянных паролей невозможно в целях безопасности
- Ключи шифрования не хранятся в приложении и известны только пользователю
""";
@override
Widget build(BuildContext context) {
final textTheme = Theme.of(context).textTheme;
final markdownStyleSheet = MarkdownStyleSheet.fromTheme(Theme.of(context))
.copyWith(
h3: textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.bold,
fontFamily: GoogleFonts.manrope().fontFamily,
height: 2.2,
),
p: textTheme.bodyMedium?.copyWith(
fontFamily: GoogleFonts.manrope().fontFamily,
height: 1.5,
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
listBullet: textTheme.bodyMedium?.copyWith(
fontFamily: GoogleFonts.manrope().fontFamily,
height: 1.6,
),
a: TextStyle(
color: Theme.of(context).colorScheme.primary,
decoration: TextDecoration.underline,
decorationColor: Theme.of(context).colorScheme.primary,
),
);
return Scaffold(
appBar: AppBar(title: const Text('Пользовательское соглашение')),
body: Markdown(
data: tosText,
padding: const EdgeInsets.fromLTRB(16, 8, 16, 24),
styleSheet: markdownStyleSheet,
selectable: true,
onTapLink: (text, href, title) async {
if (href != null) {
final uri = Uri.tryParse(href);
if (uri != null && await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
}
}
},
),
);
}
}