wiz 28.06.2010 19:31
Мой OpenSource проект — croom - вебморда к xmpp конференциям
http://chat.mymcomm.net/#[email protected]Как многие уже знают, однажды я нашёл прикольную морду к XMPP-конференциям - Speeqe. И начал везде её пиарить. Но у неё есть две больших проблемы:
президенты - любой вошедший по ссылке человек будет иметь ник ИмяПрезидентаСША123456. Это ужасно - надо знать команду из IRC /nick и надо это делать каждый раз при входе. Регистрация помогает, но это (о ужас!) надо регистрироваться. У себя на хосте я прикрутил OpenID, SSO и много других слов и саму систему это отнюдь не упростило.движок на питоне. Несмотря на то, что прекрасная библиотека Strophe может работать на голом nginx, Speeqe хочет свой сервер, питон, джангу и всё такое. При чём хочет совершенно необосновано.
Я долго хотел сделать велосипед, лишённый этих педалей недостатков и наконец решился. Устав от унылого проекта на работе я таки выкатил нечто, входящее в конфы и даже не вызывающее желание взять и ... поставить гаджим.
Основными критериями было:
возможность дать ссылку на комнатусначала спросить ник, потом входитьвосстанавливать ник и комнаты при заходе, например, с закладки... и чтобы при этом не тоормозиллоо
Ручной труд я страшно нелюблю, поэтому для интерфейса взял ExtJS (уже Sencha), jQuery для работы с XML и StropheJS для XMPP BOSH транспорта. Нечто подобное я использую и в своём рабочем проекте. Проект лежит в bzr-репозитории на Launchpad. Собственно практически весь код доступен через view page source и он довольно прост.
Состояние записывается в localStorage браузера (это типа кукисов, но намного мощнее), а для совсем танкованых браузеров (и для выдачи ссылок на комнаты) - в урл после #. Тоесть получается, что даже простой nginx должен это раздавать. XMPP BOSH требует проксирования урла чтобы браузер смог делать запросы к жабер-серверу, поэтому совсем на тупостатике на бесплатном хостинге выкатить пока не получится.
Изначально я сделал вебморду как надстройку над джанго-проектом для захода по ссылкам, восстановления состояния и всего такого. Но так и не использовал, обойдясь голым JS, пусть и современным. По-хорошему, надо отделить движок MUC, обшивку интерфейса (контейнер для комнаты) и серверный бэкенд. В принципе, можно на той же джанге сделать регистрацию и на её юзеров завязать внешнюю авторизацию жабер-сервера. Ну и там ещё фичи типа пре-бинд сессий и пр.
В будущем хотелось бы иметь embedded режим для встраивания в свои сайтики с автологином и автозаходом куда надо. Это не сложно, но надо делать. Как минимум - надо ещё доделать список присутствующих, но я уже уполз обратно в работу.
Если кто хочет поучаствовать или просто интересуется деталями - пишите. Патч - лучшая критика (;
upd: Открыл полноценный проект на https://launchpad.net/croom. Баги, вопросы и код можно кидать туда. Подписывайтесь на ленты.

+ 0 -
Плюс :)
опять бош через прокси :(
жирный плюс за проект... в ближайшее время опробую в жизни
жирный плюс за проект... в ближайшее время опробую в жизни
А что не так с бош прокси? В принципе в строфе есть через flash, но это имх совсем печально. Ждём вебсокетов и будет счастье.
не каждый хостинг умеет, эх как хорошо иметь свой сервак :)
забыл спросить, а как с запароленными конфами?
забыл спросить, а как с запароленными конфами?
У строфы есть какие-то хитрые интерфейсы на этот случай, можно попробовать ими цепляться.
С запаролеными и закапчеными пока никак - patches welcome (: Ну или хотя бы ссылки на соответствующие XEP и JEP. Это не сложно, но надо делать.
С запаролеными и закапчеными пока никак - patches welcome (: Ну или хотя бы ссылки на соответствующие XEP и JEP. Это не сложно, но надо делать.
Эх блин, а я вот буквально пару месяцев назад свою написал… Причем с такими костылями, что аж самому не по себе.
Если коротко - то в конфе сидит бот, который пишет логи. Эти логи парсит php+javascript (jQuery), и выдает их в окошко пользователю.
Самый главный недостаток - это то, что я не разобрался (времени не было), как заставить скрипт надолго приконнектиться к серверу.
Собственно, происходит что. Webclient заходит в конфу, отправляет сообщение и отключается. Я вижу месадж в своей конфе, а пользователь - в браузере. Ну и я могу ему отвечать. Ну или бота можно насторожить так, чтобы говорил "извините, никого нет дома".
Проблема возникнет тогда, когда два человека одновременно зайдут.
Но такого еще не было. Да и не будет наверное - не те люди наши клиенты, чтобы так вот общаться с нами вот так вот. Они лучше позвонят и будут по телефону мозг выносить :D
Если коротко - то в конфе сидит бот, который пишет логи. Эти логи парсит php+javascript (jQuery), и выдает их в окошко пользователю.
Самый главный недостаток - это то, что я не разобрался (времени не было), как заставить скрипт надолго приконнектиться к серверу.
Собственно, происходит что. Webclient заходит в конфу, отправляет сообщение и отключается. Я вижу месадж в своей конфе, а пользователь - в браузере. Ну и я могу ему отвечать. Ну или бота можно насторожить так, чтобы говорил "извините, никого нет дома".
Проблема возникнет тогда, когда два человека одновременно зайдут.
Но такого еще не было. Да и не будет наверное - не те люди наши клиенты, чтобы так вот общаться с нами вот так вот. Они лучше позвонят и будут по телефону мозг выносить :D
А вот, скажем, есть форум phpbb, трудно ли сделать так, чтобы при входе в конференцию, брался логин с форума?
Думаю, что нет. Там обычная таблица юзеров с паролями в мд5, ЕМНИП.
Нужна только обвязка на пхп, как я понимаю, т.к. само приложение на чистом js.
Нужна только обвязка на пхп, как я понимаю, т.к. само приложение на чистом js.
О, вообще ничего писать не надо, как я понял. Поставить ссылку на форуме и каждому юзеру отдавать свой config.js с его логином.
Не совсем. Если только для чятиков, то да - в конфиг ник, а сам юзер анонимный.
Если хочется нормальных юзеров, то надо к жабер-серверу прикручивать внешнюю авторизацию, а в строфу передавать либо ключ авторизации либо авторизованую pre-bind сессию (так лучше).
Если хочется нормальных юзеров, то надо к жабер-серверу прикручивать внешнюю авторизацию, а в строфу передавать либо ключ авторизации либо авторизованую pre-bind сессию (так лучше).
Совсем ламерский вопрос. Как скачать весь ваш проект не имея bazaar? Или качать каждый файлик отдельно?
Установил bazaar (В дебиане/убунте aptitude install bzr). После этого выполняем
$ bzr branch https://code.launchpad.net/~wiz/+junk/croom
$ bzr branch https://code.launchpad.net/~wiz/+junk/croom
Раскажу, как я понял работу вебморды. python и django вообще не участвуют, лишь отдают юзеру index.html и скрипты. С набором скриптов браузер выступает в качестве клиента. Подключается к серверу, указанному в config.js.
Я не очень понял, как он подрубается к jabber серверу. При заходе на http://room.aenor.ru/#имя_комнаты, у меня был адрес аккаунта что-то вроде.
Получается при каждом заходе ваш клиент регистрирует аккаунт? Можно ли осветить поподробнее настройки jabber-сервера?
И что можно сделать, если на хостинге не установлен jabber-сервер, можно ли использовать какой-нить внешний сервак, что-то вроде jabber.org или jabber.ru?
Я не очень понял, как он подрубается к jabber серверу. При заходе на http://room.aenor.ru/#имя_комнаты, у меня был адрес аккаунта что-то вроде.
56[email protected]/29484541361277764641617653
1[email protected]/998514162127776505740466
28646547041[email protected]/28866583591277769001522538
1[email protected]/998514162127776505740466
28646547041[email protected]/28866583591277769001522538
Получается при каждом заходе ваш клиент регистрирует аккаунт? Можно ли осветить поподробнее настройки jabber-сервера?
И что можно сделать, если на хостинге не установлен jabber-сервер, можно ли использовать какой-нить внешний сервак, что-то вроде jabber.org или jabber.ru?
Это SASL Anonymous - одноразовые анонимные юзеры. В ростер их добавлять бесполезно, а для конференций там всё равно пишется ник.
Надо договориться с админами сервера чтобы они разрешили анонимные BOSH-подключения к ним и через реверс-прокси на них завернуть урл.
Для сайто-хостинга эта штука недоступна, минимум VPS надо.
Эти чятики больше для админов локалок - чтобы не городить ужасные поделия типа как выше описано.
Для сайто-хостинга эта штука недоступна, минимум VPS надо.
Эти чятики больше для админов локалок - чтобы не городить ужасные поделия типа как выше описано.
А можно использовать один аккаунт? Что-то типа
[email protected]/user1
[email protected]/user2
Jabber же, вроде позволяет мульти-подключение. Или при этом будет пароль всем в настройках показываться? Мне бы веб-морду к конференции сделать на форуме, людей немного, человек 20 максимум. Форум на виртуальном хостинге.
[email protected]/user1
[email protected]/user2
Jabber же, вроде позволяет мульти-подключение. Или при этом будет пароль всем в настройках показываться? Мне бы веб-морду к конференции сделать на форуме, людей немного, человек 20 максимум. Форум на виртуальном хостинге.
В конференциях этот (анонимный) адрес не используется, там все пользователи вида [email protected]/nickname
Ну вот и я к тому же. То есть все подключаются к одному адресу [email protected], а потом заходят в конференцию с этого адреса под разными никами. Что надо сделать, чтобы по такому принципу работало? А то я сам как работает протокол xmpp не очень разбираюсь, и что за реверс прокси и BOSH не очень понимаю. И тема что-то не гуглиться, все на английском, трудновато дается. Можешь подсказать?
Ну хотя бы потому что у меня нет VPS и джаббер-сервера, а только виртуальный хостинг.
Я думаю тебе проще будет с нуля нарисовать простеньку морду для чятика, чем мне раскорячивать авторизацию под такой формат.
Про сервер без BOSH я пока не могу ничего конкретного сказать - пока не занимался плотно.
Про сервер без BOSH я пока не могу ничего конкретного сказать - пока не занимался плотно.
Да, там оно их уже получает для таб-дополнения, но нигде не показывает.
Ладно, перефразирую вопрос. Планируется ли показывать пользователю список пользователей? :)
Открыл полноценный проект на https://launchpad.net/croom. Баги, вопросы и код можно кидать туда. Подписывайтесь на ленты.
У вас в репозитории отсутствует файл media/stuff.js. Добавлен в исключения, почему-то.
В связи с нехваткой времени по всем фронтам, ап!
Немного пофиксил фичи, добавил баги и оставил задел на расширение. Нужен человек со знанием JS чтобы дописать плагинчиков.
Алсо, добавлен специальный режим для встраивания в свои сайтики.
Немного пофиксил фичи, добавил баги и оставил задел на расширение. Нужен человек со знанием JS чтобы дописать плагинчиков.
Алсо, добавлен специальный режим для встраивания в свои сайтики.
Проект переехал на hg и, соотв-но, bitbucket: https://bitbucket.org/dpwiz/croom.
Заодно почистил от джанговского барахла.
Заодно почистил от джанговского барахла.