Commit Graph

347 Commits

Author SHA1 Message Date
ErickSkrauch
422d5c4fd4 Хранилище access_token вынесено в redis
Переписана логика связи моделей для oAuth процесса
2016-11-30 02:19:14 +03:00
ErickSkrauch
4f259a9dc7 Подменены все ключевые сущности на наши 2016-11-29 23:15:56 +03:00
ErickSkrauch
5f07834f45 Исправлено поведение при обновлении устаревшего токена
Обновлена логика в компонентах для работы с ключами redis
2016-11-29 01:57:58 +03:00
ErickSkrauch
1e94cda399 Из базы удалена таблица oauth_scopes 2016-11-27 19:19:13 +03:00
ErickSkrauch
744ec9520a Используем в качестве компонента для соединения с редисом библиотеку Predis 2016-11-27 17:41:39 +03:00
ErickSkrauch
bec00df77b redirectUri может быть null 2016-11-27 00:56:13 +03:00
ErickSkrauch
f5981f1cd1 Исправлен namespace для исключений 2016-11-27 00:55:43 +03:00
ErickSkrauch
20286f1744 Все классы, отвечающие за oAuth передвинуты в компоненты API, освежён код, поправлены неймспейсы 2016-11-27 00:43:42 +03:00
ErickSkrauch
49fb2efc0c Не логируем http исключения 2016-11-20 20:37:08 +03:00
ErickSkrauch
7249323ec4 В dev режиме больше не бутстрапаем gii 2016-11-20 20:32:54 +03:00
ErickSkrauch
5c02b54010 Обновлена версия amqp controller, удалён gii, очередь событий аккаунтов переведена в устойчивый режим 2016-11-15 22:45:30 +03:00
ErickSkrauch
bfbcf141ee Больше не возвращаем shouldChangePassword 2016-11-14 20:14:10 +03:00
ErickSkrauch
bc2f1d4ce9 Добавлено запоминание client_redirect_uri при oauth авторизации 2016-11-05 18:02:46 +03:00
ErickSkrauch
fe4e62af39 YII_DEBUG всегда получалось true 2016-11-05 02:53:53 +03:00
ErickSkrauch
a7822bf0f1 Уменьшаем уровень логирования для запросов к authserver и sessionserver 2016-11-05 02:53:25 +03:00
ErickSkrauch
d3a2a37f11 Добавлена проверка, что если приходить nil uuid, то бросается IllegalArgumentException для sessionserver 2016-11-04 19:33:57 +03:00
ErickSkrauch
c324ebe1c6 Формируем время в DateTime для генерации JWT токенов 2016-11-04 12:23:04 +03:00
ErickSkrauch
93f8d170dc Более точное условие для автоматической смены пароля в форме входа 2016-11-02 00:04:10 +03:00
ErickSkrauch
b6b579b721 Метод save на модели Accounts теперь вызывается без аргумента false, т.к. из модели были удалены валидаторы 2016-11-02 00:02:58 +03:00
ErickSkrauch
3cce2c9bd1 Переименован класс валидатора пароля 2016-11-01 23:59:43 +03:00
ErickSkrauch
91df81f97d Образован валидатор EmailValidator 2016-11-01 23:57:42 +03:00
ErickSkrauch
94a8e21f27 Образован валидатор UsernameValidator 2016-11-01 23:27:38 +03:00
ErickSkrauch
3b56f3c418 Фиксы после инспекции кода новым инспектором в PHPStorm
В некоторых формах отключена валидация при сохранении модели аккаунта
2016-11-01 19:36:39 +03:00
ErickSkrauch
9c8600b2ad В процесс регистрации добавлена поддержка логики, когда можно перезанять ник или email, который ещё не окончил регистрацию.
Валидатор LanguageValidator убран из модели Account
2016-10-27 01:34:51 +03:00
ErickSkrauch
8049d3c774 Фикс для формы смены ника (поломалась логика, когда ник не менялся) 2016-10-27 01:22:39 +03:00
ErickSkrauch
5a88229c2d Создаём событие о новом нике только при успешной регистрации 2016-10-27 00:07:08 +03:00
ErickSkrauch
c828b8e1e6 Фикс ошибки в форме смены ника, когда старый ник перезатирался на этапе валидации 2016-10-25 22:33:51 +03:00
ErickSkrauch
f3b953607d Фикс для очереди пула ников 2016-10-25 22:20:44 +03:00
ErickSkrauch
cfd8ba95ef Отключаем валидацию для форм, где не участвуют email и username 2016-10-25 11:46:31 +03:00
ErickSkrauch
20b0076672 Удаляем уникальный индекс для поля client_token в таблице minecraft_access_keys 2016-10-25 02:43:27 +03:00
ErickSkrauch
1764fb6009 Задание параметров для рекапчи в продакшен режиме через env переменные 2016-10-24 15:14:39 +03:00
ErickSkrauch
4b6bfa15ec Фикс бага с повторным добавлением аккаунта в authserver 2016-10-15 17:35:03 +03:00
ErickSkrauch
bafac25baf Добавлена поддержка авторизации с передачей параметров в теле запроса + тесты под этот кейс 2016-10-15 16:07:03 +03:00
ErickSkrauch
1ff6898c43 Простые шаблоны писем для процесса смены E-mail адреса 2016-10-08 16:24:10 +03:00
ErickSkrauch
1254369d3e На GitHub подкинули идею, как сделать поддержку http и https одновременно 2016-10-07 17:48:57 +03:00
ErickSkrauch
ad058664db Фикс получателя для формы обратной связи 2016-10-07 17:45:06 +03:00
ErickSkrauch
862c2d467e Продублированы роуты для https запросов, пока не ответят в https://github.com/yiisoft/yii2/issues/12691 2016-10-07 02:02:51 +03:00
ErickSkrauch
f193964ea3 Фикс переменных, отвечающих за коды для писем 2016-10-04 01:45:50 +03:00
ErickSkrauch
dea5b05014 Эти ребята теперь в игноре 2016-10-03 11:34:59 +03:00
ErickSkrauch
c162a46e62 Интегрирован шаблон для письма "забыл пароль" 2016-10-03 01:59:24 +03:00
ErickSkrauch
b67a1879fe Обновлена версия Email Renderer
Добавлен компонент для настройки Email Renderer
Добавлен роут в nginx для отображения картинок из Email Renderer
2016-10-02 12:52:17 +03:00
ErickSkrauch
df1859f0c1 Реализован функционал Mojang API
Исправлена ошибка доступа к authserver из-за перехода на использование хостов, а не доменов
2016-10-02 01:21:54 +03:00
ErickSkrauch
8120e43bec Исправлен тест для AccountIdentity 2016-09-19 11:18:52 +03:00
ErickSkrauch
df6d319187 Восстановлен запуск тестов
Загрузчик конфигов выделен в отдельный класс
authserverHost выделена в params
Исправлены некоторые common.unit тесты, т.к. наследовались не от того базового класса
2016-09-19 01:01:19 +03:00
ErickSkrauch
54485b2271 Огромный рефакторинг в пользу отказа от механизма environment и использования .env файла
Найдено и удалено немного мусора
2016-09-16 01:28:28 +03:00
ErickSkrauch
9d935d84cd Интеграция письма о регистрации 2016-09-13 14:50:22 +03:00
ErickSkrauch
dd2407e347 Сконфигурировано логирование приложения 2016-09-09 00:39:00 +03:00
ErickSkrauch
d2fd803b0d Отключаем RateLimiter для запросов, что идут с хоста старого сервера авторизации, но включаем для остальных (фикс для beforeAction) 2016-09-09 00:38:25 +03:00
ErickSkrauch
c2eee9b67d Добавлен запрос /session/profile 2016-09-08 13:07:43 +03:00
ErickSkrauch
8eb6a595c0 Обновлены роуты в соответствие с тем, как они в итоге будут прописаны в документации
В nginx добавлена конфигурация, отвечающая за проксирование сессионных запросов со старого домена
Версия nginx обновлена с 1.9 до 1.11
В тестах сессионного сервера больше не используется генерация url
2016-09-07 17:56:30 +03:00
ErickSkrauch
6e15522140 Добавлен рейт-лимитер для запросов к hasJoined для незарегистрированных серверов 2016-09-06 20:10:42 +03:00
ErickSkrauch
68ce8b3fb6 Добавлена логика HasJoined для сервера авторизации Minecraft
Исправлена ошибка в JoinForm
Добавлено базовое API для общения с сервером системы скинов
2016-09-06 12:56:39 +03:00
ErickSkrauch
e8b5e90a91 Немного рефакторинга Join формы для учёта Legacy API
Добавлена поддержка чтения данных из POST запроса, если они переданы как RAW json
Исправлен StringHelper::isUuid()
2016-09-05 17:55:38 +03:00
ErickSkrauch
34d725abe2 Перенесена логика join операции для современных серверов.
Нужно признать, что перенесена она так себе, но в будущем я обязательно это перепишу.
2016-09-03 01:54:22 +03:00
ErickSkrauch
9371fc32ca Перенесены тесты со старого authserver, исправлены ошибки в коде 2016-09-01 10:31:43 +03:00
ErickSkrauch
147c84f487 Убрано лишнее звено в вызове имени исключения 2016-08-31 13:35:43 +03:00
ErickSkrauch
1023eed03b Методы в Authserver AuthenticationController прикрыты verb фильтром 2016-08-31 13:32:51 +03:00
ErickSkrauch
66e266692c Добавлен кастомный ErrorHandler для форматирования ошибок authserver'а в соответствии с ожиданиями лаунчера 2016-08-31 13:32:14 +03:00
ErickSkrauch
9c658f5bd9 Тесты для AuthorizationForm и кастомного RequiredValidator
В модуль Authserver добавлены хелперы для логирования
Исправлена ошибка в MinecraftAccessKey
Ускорено тестирование всего приложения
2016-08-29 02:17:45 +03:00
ErickSkrauch
72a7f743be Мигрирована логика блокировки аккаунтов 2016-08-22 00:09:14 +03:00
ErickSkrauch
b57b015f66 Первичное портирование логики сервера авторизации с PhalconPHP на Yii2 2016-08-21 02:23:48 +03:00
ErickSkrauch
0b67267426 Я тут писал фильтр для доступа к каким-то внутренним API запросам, но потом понял, что пока таких кейсов не будет, но логика пусть сохранится :) 2016-08-21 01:23:46 +03:00
ErickSkrauch
59f51451d0 Добавлено запоминание регистрационного IP адреса 2016-08-18 02:56:05 +03:00
ErickSkrauch
433f560f48 Мелкие улучшения для контроллера OauthController 2016-08-18 02:56:05 +03:00
ErickSkrauch
426fa7dc6e Образован фильтр ActiveUserRule для проверки активности пользовательского аккаунта 2016-08-07 03:08:48 +03:00
ErickSkrauch
16fc1ecb8c Добавлен action для принятия правил + тесты для него 2016-08-06 19:22:09 +03:00
ErickSkrauch
cf6c7bc88e Добавлено поле версии принятых правил 2016-08-06 18:52:03 +03:00
ErickSkrauch
a48c1432c6 Реализован функционал получения информации об аккауте после выполнения oAuth авторизации 2016-08-06 16:36:24 +03:00
ErickSkrauch
26b37c2f6b Попытка реализовать отдельный компонент для oAuth авторизации в свой же API. Не тестировал, не проверял работу, просто пушнул, чтобы потом продолжить в дргуом месте. 2016-08-04 01:07:21 +03:00
ErickSkrauch
6efbbb7098 Ререализован метод для получения инфы о конфигурации API 2016-08-03 21:47:36 +03:00
ErickSkrauch
5e40ccbe49 Добавлен API вызов для получения активного Recaptcha public key 2016-08-03 15:58:12 +03:00
ErickSkrauch
c2986445f1 В форму регистрации и форму повторной отправки Email внедрён валидатор ReCaptcha 2016-08-03 15:57:41 +03:00
ErickSkrauch
bef12954bd Усовершенствован валидатор ReCaptcha и покрыт тестами 2016-08-03 15:56:08 +03:00
SleepWalker
327e900f2b #148: remove depreacted error.password_required 2016-07-28 07:44:16 +03:00
ErickSkrauch
d514ba620d Заменил библиотеку для JWT токенов на свой форк с разнообразными исключениями, подрихтовал тесты для класса AccountIdentity 2016-07-27 16:25:40 +03:00
ErickSkrauch
c25bfeb8bc Обновлены роуты для oAuth2 запросов по последней спеке 2016-07-27 01:11:13 +03:00
ErickSkrauch
31679b84cb Упразднён контроллер PasswordProtectedController и заменён на валидатор PasswordRequiredValidator
Реорганизованы тесты для ChangeUsernameFormTest
2016-07-25 14:07:14 +03:00
ErickSkrauch
681996740d При попытке запроса смены E-mail теперь происходит проверка, как давно был выполнен предыдущий запрос 2016-07-17 20:46:04 +03:00
ErickSkrauch
e756dbacd6 Токен, выписанный на сессию без запоминания должен истекать дольше времени 2016-07-17 19:54:33 +03:00
ErickSkrauch
ae3c3b88de Добавлен обработчик для удаления сессии при логауте 2016-07-17 19:38:04 +03:00
ErickSkrauch
2063d7daa0 Добавлен файл для автокомплита в проекте, обновлены обращения к di для лучшего статического анализа 2016-07-17 19:13:40 +03:00
ErickSkrauch
dd0c4fcc9e Добавлено событие о изменении email адреса пользователя, вызовы методов для генерации уведомлений внесены внутрь транзакции бд 2016-07-17 18:42:37 +03:00
ErickSkrauch
6d3db89140 Изменена логика для работы с очередью задач, чтобы её можно было использовать в дальнейшем в кластере серверов 2016-07-17 18:27:44 +03:00
ErickSkrauch
8906370bb9 Образован хелпер Error, в который вынесены все коды ошибок.
Подкорректирован errorDict на фронте
2016-06-16 23:32:23 +03:00
ErickSkrauch
4614cf8fe7 Убраны разрознености в ошибках, скорреткированы тесты 2016-06-16 22:36:52 +03:00
ErickSkrauch
912606e27f Реализована форма обратной связи 2016-06-15 23:54:13 +03:00
ErickSkrauch
113b9f98d8 Отрефакторен компонент User\Component
Добавлен метод getActiveSession
Добавлена логика для функции "Разлогинить всех" в форме смены пароля
2016-06-05 17:01:35 +03:00
SleepWalker
e18f6a08b0 Merge branch 'master' into account_sessions 2016-06-04 15:59:01 +03:00
ErickSkrauch
67fa28aaa1 Удалён никому ненужный SiteController 2016-05-31 21:25:04 +03:00
ErickSkrauch
1945a7baec Добавлен роут и логика для обновления access_token по refresh_token'у 2016-05-31 01:03:30 +03:00
ErickSkrauch
cb038c897b Добавлены тесты для ответа сервера о истёкшем токене
Добавлены doc-блоки для поведений в базовом контроллере
2016-05-30 21:11:22 +03:00
ErickSkrauch
bdc96d82c1 Реорганизована выдача JWT токенов
Добавлен механизм сохранения сессий и refresh_token
2016-05-30 02:44:17 +03:00
ErickSkrauch
b5ed01853e Убран валидатор на тип алгоритма хэширования пароля для формы инициализации смены E-mail адреса 2016-05-23 22:55:36 +03:00
ErickSkrauch
fe2c422621 Реализовано автоматическое обновление алгоритма хэширования пароля во время авторизации пользователя 2016-05-23 22:42:50 +03:00
SleepWalker
1b4249ecd7 #100: password protection for email change form 2016-05-22 22:04:52 +03:00
ErickSkrauch
c34f0947ad Форма инициализации смены E-mail адреса теперь требует ввода пароля 2016-05-22 21:36:02 +03:00
ErickSkrauch
ad42411a89 Реализован обработчик для смены языка аккаунта 2016-05-19 01:10:05 +03:00
ErickSkrauch
f99b281f30 Добавлены экшены в контроллер и 1 тест (больше не успел) 2016-05-16 11:21:12 +03:00
ErickSkrauch
50439fdaeb Реализованы формы для шагов смены E-mail адреса, покрыты unit-тестами
У EmailActivation добавлено поле $_data и дописано поведение для работы с ним
Упрощено подключение фикстур для EmailActivations
2016-05-16 01:33:19 +03:00
ErickSkrauch
e2e31c3720 Логика проверки ключа из KeyConfirmationForm вынесена в отдельный валидатор
У EmailActivationFixture зафиксирован стандартный путь к файлу данных
2016-05-15 14:13:51 +03:00
ErickSkrauch
0ba1be27e8 Наведён порядок в моделях проекта 2016-05-14 02:47:17 +03:00
ErickSkrauch
ecd92b8fda Добавлена поддержка запоминания языка для аккаунта
Обновлена минимальная версия Yii2
Удалено немного хлама от Yii2 Advanced
Исправлены некоторые тесты
2016-05-13 12:03:00 +03:00
ErickSkrauch
184ff02240 Изменёна кодировка столбца username в usernames_history для организации бинарного поиска
Из Account вынесена логика аутентификации в дочерний AccountIdentity
Исправлена логика валидации при вызове на неизменённом нике для формы смены ника
2016-05-12 11:50:30 +03:00
ErickSkrauch
2a4da87fd5 Реализована форма восстановления пароля от аккаунта
Логика проверки пароля вынесена в отдельный валидатор
В composer.json докинута зависимость от php7
2016-05-12 01:13:33 +03:00
ErickSkrauch
ebf4947c37 Обновлена версия Codeception (там поправили баг с анонимными классами)
Переписаны тесты для базовой формы с кодовым доступом
В базовую форму кодового доступа добавлена проверка на истечение кода
2016-05-12 01:13:33 +03:00
ErickSkrauch
15922ba02e Немного приемственности в именовании сущностей 2016-05-10 23:28:04 +03:00
ErickSkrauch
c6547b6540 Добавлен action для формы восстановления пароля 2016-05-10 23:25:04 +03:00
ErickSkrauch
a29cb76cbf Образован trait AccountFinder для поиска пользователя по его нику\мылу
Модель EmailActivation теперь умеет автоматически создавать своих правильных потомков по соответствующему типу
Добавлена форма восстановления пароля и её обработчик (без контроллера)
2016-05-10 22:40:06 +03:00
SleepWalker
75a0811488 Do not request password till newPassword and newRePassword are valid 2016-05-02 13:11:10 +03:00
ErickSkrauch
45b1f43d09 Добавлено поле для разлогивания всех авторизованных устройств при смене пароля (пока без имплементации) 2016-04-25 00:30:10 +03:00
ErickSkrauch
cba769a1ec В проект внедрён RabbitMQ.
Контроллер для работы с RabbitMQ научился создавать типизированные аргументы для $body
Добавлена таблица с историей ников
Добавлена таблица Mojang ников
Добавлена проверка активированности аккаунта в AccountsController
2016-04-23 21:44:10 +03:00
SleepWalker
067fc1d3d6 Добавил эксепшен в случае утсутствия мыла.
З.Ы. Туда бы di в тот класс... :)
2016-04-15 07:06:21 +03:00
ErickSkrauch
a69cd2da2c Исправлен баг с валидатором ника в форме смены никнейма 2016-04-15 02:01:01 +03:00
SleepWalker
d8a2cc21b8 Merge branch 'profile' 2016-03-21 20:28:18 +02:00
ErickSkrauch
b277f48785 Отрефакторены тесты для форм 2016-03-20 23:33:09 +03:00
ErickSkrauch
951b6928a2 Базовые модели перенесены в отдельное простраинство имён
Поправлены именования классов (хз, почему оно прежде работало)
2016-03-20 02:33:49 +03:00
ErickSkrauch
e67257b8aa Реализована форма смены ника пользователя
Добавлена базовая форма с запросом пароля
Валидация ника и email адреса вынесены из формы регистрации в модель аккаунта
Отрефакторен тест формы регистрации
Добавлены тесты для модели аккаунта
2016-03-20 02:25:26 +03:00
SleepWalker
e60a4783c1 Merge branch 'master' into profile 2016-03-16 08:04:06 +02:00
ErickSkrauch
6b04860f0e Добавлена передача email при входе в неактивированный аккаунт 2016-03-13 21:46:22 +03:00
ErickSkrauch
7343a3b506 Подрефакторена форма отправки нового письма с активацией аккаунта, дописаны юнит и функциональные тесты 2016-03-13 21:24:49 +03:00
ErickSkrauch
b9ee667829 Первичная реализация формы отправки нового письма с активацией аккаунта, чуть-чуть рефакторинга тестов 2016-03-13 02:19:00 +03:00
ErickSkrauch
81d4399bdd Добавлен проброс дополнительных данных на фронт в методе account/current 2016-03-12 01:02:52 +03:00
ErickSkrauch
d9a218e075 Добавлено запоминание последнего изменения пароля, удалено поле auth_key, поправлена загрузка фикстур для функциональных тестов 2016-03-12 00:55:46 +03:00
ErickSkrauch
7e2247ccb5 Добавлена инфомарция по получателю для формы регистрации 2016-03-01 01:02:06 +03:00
ErickSkrauch
478acde42a Конфиг отправителя для почты вынесен в отдельный параметр 2016-02-29 23:47:56 +03:00
SleepWalker
0e9be3dfb8 Рендеринг списка скоупов на oauth/permissions 2016-02-29 20:16:33 +02:00
ErickSkrauch
298f57841f Исправлено поведение формы регистрации 2016-02-28 15:08:00 +03:00
ErickSkrauch
2580119180 Добавлена ошибка для неактивированных аккаунтов при попытке логина 2016-02-28 00:50:49 +03:00
ErickSkrauch
5c056710bc Добавлена страница с отправкой письма для восстановления пароля от аккаунта 2016-02-28 00:26:13 +03:00
SleepWalker
af2580795a Исправил ошибку с undefined вместо значений полей запросов через service/request 2016-02-27 21:26:08 +02:00
ErickSkrauch
d1cdb847e0 Добавил генерацию jwt токена для формы подтверждения регистрации 2016-02-27 01:37:55 +03:00
ErickSkrauch
93a94c656b Добавлена форма смены пароля и её тесты 2016-02-27 01:22:09 +03:00
SleepWalker
86c63f8724 Суппорт jwt на фронте 2016-02-26 08:28:26 +02:00
ErickSkrauch
179d610eef Контроллер Users переименован в Accounts 2016-02-26 01:45:21 +03:00
ErickSkrauch
d9987a3185 Добавлен экшен для получения инфы о текущем аутентифицированном пользователе 2016-02-24 01:34:01 +03:00
ErickSkrauch
1fff80c7e8 Поправлена ссылка на форму регистрации 2016-02-24 01:20:10 +03:00
ErickSkrauch
8583edbb92 Все контроллеры переведены на использование jwt токенов 2016-02-24 01:15:04 +03:00
ErickSkrauch
601f0a290b Изменён алгоритм авторизации на использование jwt токенов 2016-02-23 01:22:04 +03:00
ErickSkrauch
1c6ba30abf Протестирована логика подписи access_token и refresh_token, добавлены базовые скоупы, подчищен проект 2016-02-23 00:49:46 +03:00
ErickSkrauch
f5f93ddef1 Реализована логика oAuth авторизации приложений, добавлен Redis, удалены лишние тесты, пофикшены старые. 2016-02-14 20:50:10 +03:00
SleepWalker
59addfac07 В первом приближении заинтегрировался с беком 2016-02-13 17:28:47 +02:00
ErickSkrauch
7e90f1838e Код модели подтверждения через email теперь является первичным ключом тамблицы
Реализована форма подтверждения email, обмазана тестами
Слегка отрефакторена форма регистрации и авторизации в пользу выноса части логики в общего родителя
Проект зачищен от стандартных тестовых параметров
Пофикшены методы доступа к API
2016-01-21 00:14:29 +03:00
ErickSkrauch
44aaea2c08 Отрефакторены тесты
Удалено тестовое окружение acceptance
Удалена часть потенциально ненужных тестов
Добавлена логика для формы регистрации
Добавлена таблица для хранения ключей активации по E-mail
Добавлены тесты для формы регистрации
Реорганизован роутинг
Добавлен компонент для ReCaptcha2
2016-01-15 12:21:27 +03:00
ErickSkrauch
45c31dfbbe Добавлено поле username в модель Account, скорретирована форма входа и её тесты 2016-01-04 18:31:14 +03:00
ErickSkrauch
c6a6f35be6 Переработана структура тестов для формы аутентификации 2016-01-03 20:37:55 +03:00
ErickSkrauch
7b650e2654 Описана базовая миграция, добавлена модель аккаунта, добавлена модель авторизации, написаны первичные тесты для этой модели, добавлен модуль авторизации, настроен базовый контроллер. Короче много чего сделано 2016-01-03 03:18:37 +03:00
ErickSkrauch
841303b8ab Инициализировано Yii2 приложение, выпилены лишние части, накинуты чуточку нужных 2016-01-02 16:43:18 +03:00