IWasHere: дневник разработчика. Апрель-Июнь

Всем привет! Что ж, в прошлый четверг был крайне важный день — защита диплома. В целом защита прошла нормально и защитился я аж на «отлично». В принципе, думаю, мой проект этого заслуживает. Вызвало особое недовольство у меня разве что излишние требования к внешнему виду защищающихся. Я вам уже говорил, как сильно НЕНАВИЖУ все эти пиджаки, брюки и галстуки?
Так ладно, раз сегодня нет обещанной рубрики «ОХ*ЕЛИ!», ибо у меня простуда, то выйдет уже, пожалуй, долгожданная запись по моему дипломному проекту. Итак, встречайте дневник разработчика за июнь, релиз и объявление о завершении проекта. Всё в одной записи. Ну или почти в одной. Поехали!

Дневник разработчика. Апрель-Июнь.
Вообще, я когда-то обещал, что буду выпускать дневники разработчика раз в месяц, но последняя такая запись была в конце марта. Ну… Лысый вон тоже обещал не повышать пенсионный возраст, пока он президент, и что? А чем я спрашивается, хуже него? Хотя сейчас он уже скорее Царь, чем Президент, а значит ничего не нарушал. Впрочем, забудьте, ибо в апреле мой блог бОльшую часть времени лежал из-за атак ботов, которые, кстати, не прекращаются до сих пор. В конце мая мне уже было некогда, ибо сроки поджимали, а сейчас уже релиз состоялся. Точнее, он состоялся 13 июня в первом часу ночи 12 июня в 19:29 по МСК, как и было мною обещано [хитрая_улыбка.jpg]. Ну и давайте попробую вкратце описать некоторые функции.
1. Список друзей. Полностью был реализован одним из последних. Возможность просматривать своих друзей в отдельной вкладке, друзей выбранного юзера на странице его профиля. Во вкладке «Друзья» также можно искать других юзеров по их фамилии, имени и адресу Email.
2. Профиль пользователя. Делался ближе к защите преддипломной практики, то есть в конце мая. Суть тоже проста — возможность юзера поменять свои ФИО и номер телефона на специальной страничке. Адрес Email при этом изменить нельзя.
3. Закрытие сессий. После входа в систему приложение хранит сессию очень долго. По умолчанию — 10 лет. Делается это для того, чтобы один пользователь смог идентифицироваться на устройстве и больше этого не делать. Разумеется, бывают случаи, когда необходимо отвязать устройство от аккаунта. Для этого есть функция «Выход», которая удаляет ключ сессии с сервера, удаляет открытый ключ устройства пользователя и закрывает сессию для текущего устройства. Обратная функция «Выйти везде» делает то же самое для всех остальных сессий и ключей, кроме текущей, в которой был отправлен запрос. При прерывании сессии таким образом первый же запрос к серверу на других устройствах выдаст ошибку 401 и пользователь будет перенаправлен на страницу аутентификации.
4. Личные сообщения. Получив напутственный пинок от научрука рекомендацию заняться чем-то важным, нежели редактированием профиля, например картами в геосети, я таки решил реализовать личные сообщения. Ибо через них я таки реализую и отображение метки на карте. С личными сообщениями, конечно, пришлось повозиться. Причём, весьма сильно. Во-первых, их дизайн было решено стырить позаимствовать из VK и Telegram. То есть сначала открывается список собеседников с последним сообщениям от/для них, а по клику пользователь открывает чат, начиная с последнего сообщения. В чате же можно написать новое сообщение и тут же его отправить, либо перейти в профиль собеседника. Фишка в том, что собеседником может быть группа. Сама модель объекта Message была мною хитровыбоена так, что одно сообщение может быть доставлено множеству получателей-юзеров, либо одной группе. Несмотря на всю сложность реализации просмотра всего этого, мне удалось справиться. Затем была реализована отправка сообщений со страницы профиля пользователя. Сразу после мне пришлось повозиться с возможностью поделиться меткой среди друзей или групп. Как уже было сказано, юзер может выбрать кому отправить метку — друзьям или группе. Если первым, то отправитель выбирает всех «взаимных» друзей чекбоксами, добавляет текстовое сообщение и отправляет метку. Если же он хочет отправить группе, то просто выбирает нужную. Вообще, вместо кучи пользователей-друзей для распространения меток лучше использовать именно группы. По основному авторскому видению проекта. Но о них позже.
5. Карты. Собственно, при получении новой метки в окне чата, пользователь кликает на ссылочку и открывает местоположение этой метки на карте. Отдельных мук у меня вызвал интерфейс, а точнее необходимость сделать так, чтобы ничего не выскакивало и не уезжало куда не положено. А поля ввода текста уж очень любят это дело. В общем, карта замещает собой все сообщения в окне чата пока юзер не нажмет кнопочку «закрыть». На этом функционал карт заканчивается. Использовались в данном случае Яндекс. Карты, ибо бесплатно и весьма мягкие ограничения — 25000 запросов в день.
6. Группы. Делалось в самую последнюю очередь, буквально за несколько часов до релиза, поэтому возможны некоторые неявные недоделки. Вроде весьма малофункционального интерфейса. Но в целом добавление и изменение групп реализовано. Плюс еще различные операции с участниками и администраторами.
7. Сквозное шифрование. Прям таки моя гордость. Как уже было сказано, метка может быть зашифрованной и на сервере её текст хранится в виде 16-ричной строки, а на клиенте она расшифровывается при наличии ключа. Вопрос — как можно поделиться ключом так, чтобы метка осталась зашифрованной и сервер не имел доступа к секретным ключам? Ответ прост — RSA. Ключ зашифровывается на всех открытых ключах всех получателей и все шифр-тексты попадают на сервер и затем уже на клиенте приложение находит нужный ключ и с помощью секретного ключа RSA расшифровывает ключ AES от метки. Делается это в классе, отвечающем за отображение сообщений в окне чата. В реализации были некоторые подводные камни, но их решение я тоже нашел с помощью гугла, StackOverflow и еще пары других способов.

Так ладно, продолжим мы обсуждать мой проект завтра, там как раз осталось обсудить релиз и саму защиту, а пока что можно прерваться. Время уже позднее.
Кстати, что у меня там на ноуте посмотреть есть? Ледибаг? Хм…
До скорого.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.