В пакете control лежит реализация предложенного интерфейса. Внутри он использует интерфейс хранилища. Использование интерфейса хранилища позволяет гибко настраивать работу с хранилищем, например, использовать вместо моей реализации (хранилище в памяти) какую-либо реляционную базу данных (PostgreSQL, MySQL, SQLite) или NoSQL базу данных (MongoDB, Redis).
В пакете storage лежит реализация хранилища, которое хранит данные в памяти.
Помимо стандартной реализации, я реализовал проверку нахождения в черном списке. Пользователи, которые находятся в BlackListStorage (интерфейс хранилища черного списка), не проходят проверку.
Пакет control логирует результаты проверки. Реализация логирования - стандартный пакет log.
Каждый пакет содержит свои тесты. Общее покрытие около 80%.