Корзинка
Количество просмотров: 187

Регистрация TeamSpeak для «Танков»

На прошлой неделе сделал регу для тимспика, на основе API танков.

Отдельно спасибо wargaming, так как в отличие от исландских «слоупоков» CCP под предвадительством укуренной коровы они первыми сделали грамотную ouath аутентификацию на openid.

Конечно у ЦЦПшников своя фишка в виде API keys и процент школоты, играющей в Eveonline существенно ниже примерно такой [спасибо, блять, за казуальные апдейты] же как и в танчики, но именно вот такая кнопка дает ответ на вопрос: «что писать, куда нажимать??»
tsreg_onebutton

Одно кольцо чтобы править всеми Одна кнопка, чтобы пере/за-региться везде пока что в ТСке. После регистрации пользователь получает информацию, которую надо использовать в teamspeak3, чтобы получить тот или иной тикер корпы клана.

«Регистрация» для тимспика состоит из 3-х модулей.

  1. tsreg.jsp
  2. TSWGRegister.java
  3. TSWGClanSync.java

tsreg.jsp — как не банально, это JSP страница.
Работает в контейнере, который танцует nginx.

Алгоритм работы:

  • сгенерировать для юзера openid ссылку
  • получить token и account_id (и положить болт на всю паразитную информацию, которую юзверь горазд послать)
  • проверить валидность
  • проверить корпу клан (блять ненавижу это слово, напоминает сцаные ла2)
  • проверить реги
  • создать сессию (о как!) на регистрацию/перерегистрацию
  • записать приватную информацию о обращении которая доступна админам и приближенным :trololo:

TSWGRegister.java — это модуль, прописанный в кроне, который пробегает по сессиям, которых разожрался до 3х подмодулей.
Для успокоения паранойи в коде жестко прописаны предели, в которых (по кому) он работает, а по кому нет. Соответственно если сферически на сервере ТС кто-то захочет стать легитимным сервер админом ТСа.. он им не станет, так как прога не пропустит такие значения:)
С сервером ТС общение осуществляется через query на 10011 порте (обычный телнет).
В виде реги:

  • пройтись по сессиям
  • проверить юзера в тске
  • выдать группу
  • прописать в Description таг и никнейм в танках Сделано для того, чтобы люди могли сидеть под любыми никами (блять, никакой системы!), но при клике на СуперВасю в окне ТСки мы бы увидели [таг]prostoVasya . Юзерам редактирование Description закрыто.

В виде пере-регистрации:

  • все как выше + проверить наличие старого юзера, удалить его, и после этого только новый будет зареган.

В виде банилки:

  • тут все просто, если юзер не в корпе, то его аккаунт в ТС удаляется.
  • важный момент: обработка только аккаунтов прошедших через эту «систему». То есть если второй-нубо-но-админ-Петя дал Васе группу Клана ногебаторов, то Васю не кикнет из ТСки после проверки. Но для этого есть regexp и лог сервера. Сделать же проверку по всем — изменение одного запроса с внутренних табличек на таблички ТСки.

TSWGClanSync.java — это очень простая штука с одним мозгоебным моментом , которая работает как надо:)
Цель — пробежаться по кланам и актуализовать информацию во внутренней базе + обновить токены юзеров.
Вот на актуализации clan_id+account_id и было решено испольовать правильное решение:

  • если старый юзер не в clan_id — удалить связь (delete)
  • если старый юзер в clan_id — ничего не делать
  • если новый юзео в clan_id — insert связи
  • если у старого юзера поменялся clan_id — update  связи 😈

Вот на реализации апдейта связей юзеров из общем кучи юзеров и было потрачено дополнительных мозгоресурсов.
Так как юзеры в куче могут рандомно изменить кланы на сервере варгейменгов, то был создан хешмап:

HashMap<Integer, String> clan_id_update = new HashMap<Integer, String>();

В котором ключ это новый clan_id, а вторая часть это.. тело запроса к базе, которое собирается из кусочков в функции, обрабатывающей записи. Эта функция пробегается по результатам в векторе и формирует пачку account_id в string поле этого hashmap для будущих insert’ов.

Затем, в функции по обновлении записей после инсертов и делитов приходит время апдейтов, которые берутся по key’ям.

Первоначально был вариант delete — insert, но в итоге решил сделать нормальный update.

Банилка работает в cron’е, JSP’шка есессно по запросам, а регистрация в постоянном запуске (с таймеров на проверки).

Исходный код есессно не публикую, так как проект закрытый, но самой идеей поделится не считаю чем-то зазорным. И это может помочь тем, кто собирается убить неделю на разработку и тесты делать аналогичную штуковину для своих друзей в танках.

Facebooktwittergoogle_plusredditpinterestlinkedintumblrFacebooktwittergoogle_plusredditpinterestlinkedintumblr

Comments are closed.