Инвайтер: как убрать топики с 1500+ комментариями про инвайты

    После того, как я открыл топик про Гугл+ с 1500+ комментариями с просьбой дать инвайт, решил написать веб-сайтик, упрощающий этот процесс.

    В результате вышел вот такой вот веб-апп.

    Как работает:

    1. Пользователь проходит аутентификацию через Google OpenID.

    2. Пользователь выбирает свой начальный статус:
    а) или он «инвайтер» (т.е. тот, кто может дать инвайт)
    б) или он хочет получить инвайт
    в) он уже получил инвайт
    image

    После этого если он «инвайтер», у него появляется возможность получить случайный е-мейл одного их тех, кто ожидает инвайт. И если ему нравится этот емейл и он кинет инвайт, он нажимает соответствующую кнопку. Тогда емейл помечается как тот, кому возможно уже выслали инвайт.
    image

    В любой момент пользователь может сменить свой статус на любой из этих трех.

    Таким образом фактически то же самое, что постить в темах комментарии «пришлите пожалуйста».

    Как минус — любой кто имеет ссылку, может оставить свой емейл. Еще — злобный человек может зайти и пометить все емейлы как те, кому отослали инвайт.

    В общем система чисто «для своих» и рассчитана на честность. Крутится на Amazon EC2 (Free Tier). Ссылку я запостил только на Хабре, в закрытом блоге. Конечно, это не защита, но все же может не пролезут злые люди. В худшем случае все что можно сделать — это подсмотреть емейл того, кто хочет инвайт (и то пока ему не отослали), но в комментариях все равно постят открытым текстом.

    Исходный код доступен на ГитХабе: github.com/olostan/invitor (использовал node.js, mongodb)

    Всякую статистику и текущее состояние (кол-во ожидающих и т.д.) прикручу чуть позже.
    Поделиться публикацией

    Комментарии 45

      +2
      Оперативно! Молодца!
        0
        Отлично! Продолжаем раздачу!
          +2
          ​Вот как это выглядит

          определяете свой статус

          выбираете кого пригласить

          комментарий согласован с автором.
            +1
            добавил все-таки в топик чтоб легче было читать.

            ПС. Сам не мог сделать скрины, так что спасибо за помощь :)
            +1
            ок, я бы тебе и переслал… )
              +1
              Непонятно. «Я могу приглашать» куда? На Хабру? На Гугло+? Ещё что-то?
                0
                Тоже непонятно.
                  +1
                  Сам апп писалось в качестве реакции на конкретный топик (про «гугл+») за несколько часов вчера вечером — думаю по коду это очень хорошо видно :)

                  По этому я не особо думал о конкретном тексте :) Прошу пулить с предложениями — в гитхабе это довольно просто. Тем более для таких профи в JavaScript'е (без иронии)

                  Если будет желание, можно развить этот мини-проектик в более универсальную штуку, хотя аналогов полно (ниже ссылки). Но цель была именно конкретный топик, именно для Хабра :)
                    0
                    Не, код, впринципе, довольно неплох. Из замечаний — разные кавычки в html файлах:
                    <form method='get' action='/authenticate'>
                    <input type="submit" value="Login using Google" />
                    </form>
                    

                    Непонятно откуда появившаяся перменная: rand = Math.random();, var rand я сходу не нашёл.

                    Запись кода в одну строку:
                    collection.save({_id:req.session.email, mode: req.body.usermode, random: Math.random() },{safe:true}, function(err,i) { res.redirect('/'); })
                    
                    // =>
                    collection.save(
                        {
                            _id:req.session.email,
                            mode: req.body.usermode,
                            random: Math.random()
                        }, {
                            safe:true
                        }, function (err,i) {
                            res.redirect('/');
                        }
                    )
                    


                    И не следование собственному стилю:
                    // 109 строка
                    else { res.send(user);}
                    // 111 строка
                    else res.send(user);
                    


                    На самом деле архитектурные изъяны вылезут в случае развития, но сейчас судить рано. Лично мне не нравится идеология express.js, она, имхо, поощряет плохую архитектуру.
                      +1
                      Спасибо :)

                      Код действительно писался «на коленке» прямо на сервере (без какой либо IDE), и части просто были скопи-пейстнуты из примеров (напр. OpenID и способ получения рандомной записи из MongoDB), именно по этому разница стилях кода.

                      Где заметил подправил. За одно заменил использование res.header+res.end на Express-овские res.send.

                      Вот что не могу понять, почему иногда скрипт вываливается в:
                      URIError: URI malformed
                          at decodeURIComponent (native)
                          at Router._match (/home/ubuntu/node_modules/express/lib/router/index.js:329:17)
                          at pass (/home/ubuntu/node_modules/express/lib/router/index.js:196:30)
                      ....
                      


                      При чем node-dev не перестартовывает скрипт после такого падения. Гугление пока показывает на проблему с парсингом кук, но где у себя добавить try-catch чтоб хоть не так жостко валилось пока никак не пойму. Попробуй добавить хотя бы трейс запросов чтоб узнать когда именно падает, но не уверен что поможет — походу что-то внутрях connect'а или Express'а.

                      Может есть какие-то идеи?
                        0
                        гм… походу я ступил — когда формировал запрос на получение следующего емейла, забыл encodeURI :)

                        Надеюсь в этом бяка была
                          0
                          Ловите все ошибки, отображайте пользователю 500, заодно можно логировать и найти проблему:
                          process.on('uncaughtException', function(error){
                              // process error
                          })
                          
                            0
                            да оно как-то странно падало — если бы из процесса вышло то node-dev перезапустил бы процесс. А оно и не выходило, но новые коннекшены не принимало.

                            Возможно из-за висящего коннекшена к mongo.

                            Тогда действительно можно на «uncaughtException» повесить закрытие коннекшена к монго — тогда теоретически евент луп бы закончился и процесс перезапустился
                    +1
                    Или пойти на www.inviter.ru/ или inwhite.ru/
                      0
                      получил инвайт через 2 минуты, отлично :)
                        0
                        Вроде под хаброэффектом…
                          0
                          неа, это я где-то пропустил… чета Express выкаблучивается.
                            0
                            Сейчас вошел, ок. кого-то пригласил)
                              +1
                              нашел ляп вкоде :) спс.
                                0
                                все еще лежит
                          –3
                          У сайта только один недостаток: нет живого общения.
                            0
                            ​Ну, как минимум, есть два топика, где общения хоть отбавляй :)
                            Хорошо когда есть выбор.
                              0
                              А можно как-нибудь узнать количество оставшихся инвайтов?
                                0
                                Вроде бы никак. Я примерно 30 уже потратил, а кнопка инвайта не исчезла.
                                0
                                Блин моя идея прогарела, с утра предложил. А информационное поле земли подхватила и кто-то написал. Да 1500 постов, мой комп на работе не выдержал и завис. А насчет инвайтов, скинул некоторым после 15.00, а оно уже не дает регится. Гугл боится хабр сообщество?
                                  –1
                                  Ваша идея реализована минимум год назад на inwhite.ru/, но штука не работает, похоже. Все предлагают всякую чушь вроде lockerz и ждут инвайта на zombobox.
                                    0
                                    не вплане обмена инвайтами, а автоматизация отправки инвайта. А насчет инвайта на zombo это фантастика!
                                  +1
                                  хабраэффект сделал своё дело)))
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      Проверяли спам?
                                        0
                                        Дело в том, что я никак не могу проверить действительно ли кто-то выслал инвайт. Т.е. все «на честном слове».

                                        Считайте что это просто замена коммента «вышлете мне инвайт» на который ответили «выслал».

                                        Хотя… гм… А почему бы не сделать чтоб если кто-то нажал «выслать» отобразить емейл того, кто нажал чтоб можно было бы связаться с ним и спросить.

                                        Вроде логично.

                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            Сейчас отображается история всех «телодвижений» с аккаунтом (кто когда и кого :))
                                        0
                                        Закончились желающие получить инвайт на 21 человеке :) Все, волна спала? :)
                                          0
                                          Ну ссылочка то не думаю, что попала в широкие круги. А на Хабре, мне кажется, уже все желающие получили инвайт.

                                          ПС. Щас вон еще 2 ожидающих инвайта появилось. Ой, уже 1. Быстро однако :)
                                            0
                                            Да, сижу, караулю желающих :)
                                              0
                                              аха! так вот из-за кого мне пришлось добавлять «нет» когда нет желающих? :)
                                                0
                                                Да, спасибо :) Кстати, народ, зачем повторно размещать заявку, с первого раза не получается чтоли? :)
                                                  0
                                                  Увы бывает что кто-то раздал тебе инвайт смотришь и спам и входящие а там пусто :(
                                          0
                                          image
                                            0
                                            Странно, но работает не у всех.
                                            0
                                            Мне показало, что кто-то выслал инвайт в 0:11, а фактически письмо пришло в 6:33. В спам не попало. Спасибо.
                                              +3
                                              а как его использовать и где смотреть?
                                              написано что 2 человека выслало, но никаких изменений у меня это не вызвало — на plus.google.com висит рекламка, в ящике — ничего.
                                                0
                                                Ну тут остается наедятся, что оба человека действительно выслали инвайт (никак проверить нельзя, все «на честном слове»).

                                                Кроме того Гугл временами лимитирует отсылку инвайтов. По этому можно еще пару раз попробовать поменять статус — может кто-то другой отошлет и(или) подождать еще немного.

                                                По идее на почту должно прийти сообщение о том, что кто-то расшарил пост или добавил в круг с ссылкой, по которой можно будет зайти в гугло+.
                                                0
                                                Буду надеяться что и мне вышлют, хотя я немного «опоздал» :(

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.