Репутация пользователей

Привет. Я написал систему, которая позволяет пользователям ДОУ просматривать и редактировать репутацию других пользователей. Иными словами — карма.

Система состоит из двух частей: сервера и клиента. Для того, чтобы пользоваться клиентом достаточно установить расширение и быть зарегистрированным пользователем ДОУ.

Chrome Extension — chrome.google.com/...​lceffmacananlaajnnjfpofka

Есть ли ограничения на изменение репутации?
Да, имеются следующие ограничения:
1. Изменять репутацию могут только пользователи с проверенным аккаунтом dou.ua
2. Изменять репутацию одному и тому же пользователю можно не чаще, чем раз в 24 часа.
3. Имеется суточный лимит на изменение репутации. У пользователей с низким рейтингом он ниже, чем у пользователей с высоким (3 градации).
4. Изменять репутацию самому себе нельзя.

Что там с сервером? Хочу технических деталей!
Сервер и клиент написаны на javascript. Используется база данных — MongoDB и хранилище данных — Redis. Клиент написан с использованием React.

Исходный код клиента открыт — github.com/...​nbard/dou-karma-extension

Эй, я хочу поддержку Firefox!
Я тоже! Если проект будет интересен сообществу, я выпущу версию для Лисы.
Если кто-то возьмет на себя задачу по портированию, выполнит ее и запушит пулл реквест в репозиторий, то это еще сильнее ускорит появление клиента под Лису.

Я нашел баг.
Запости его сюда — github.com/...​ou-karma-extension/issues

У меня не обновляется расширение для Хрома!
Воспользуйтесь этим приложением для Хрома — chrome.google.com/...​mmpcnpikjeljgnaoabkaalbgc или дождитесь автообновления от браузера (ожидание может занять ~6 часов).

Update 02.05.2015 — Я собираюсь обновлять сервер. Корректная работа будет с клиентом версии 1.1.0 (будет доступна в течении часа)

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

здається після ревю секюріті проекта в автора піддиміло, і він його грохнув/закрив...
а шкода, це все можна було підфіксати до юзабільного «плагіна до доу»

міні ревю (АКА як зламати екстеншин, і що з цим робити)
так як на доу все ж програмісти сидять з третину програмістів — ламати можуть, аби було бажання
ламаєм!
1. набираєм базу юзерів.
так як на сторінці юзерів в доу доступно лише 200 з них (перші 10 сторінок по 20 юзерів — бага це чи фіча для безпеки — окреме питання) — брати треба з топіків :)
для змішаного списку найкраще почати з статті «топ-топикі 2014го», особливо список з максимумом коментарів, для отримання лише «підтверджених» юзерів — статті, з мінімальним фільтром — скажем по 300+ коментів.
метод скану — повністю автоматичний, заливаєм в софтину масив урляк/кусок хтмльки, а вона по кожній генерить реквест на доу і парсає список юзерів. одразу при парсанні зберігаєм імя, урляку на профіль(є підозра що цієї урли наразі вистачить, + кусок стилю з профіля що відповідає підтвердженим), урл на фотку і чи юзер підтверджений, список з простих обєктів серіалізуєм в хмл.
2. скануєм додуткову інфу по «корисним» користувачам
для перевірених користувачів починаєм бігати на доу, і витягати хтмльки повного профіля.
так як процес не сильно швидкий, багатопоточність буде не зайвою, але від сили з 5 потоків, нажаль сервер доу і так любить кидатись 500ми помилками про відкритті одразу 10х закладок з списку непрочитаних, без всякої автоматизації.
результат зберігаєм, при потребі — випарсюєм додаткову інфу.
крок суто опціональний,лише для майбутнього посилення секюрності плагіну.
3. «реєструєм» нових користувачів в плагіні.
тут можна почати трохи шифруватись — можна процесс перенести в клауд, і скажем підняти з 10-20 інстансів веб аплікейшина в ажурі, скориставшись безкоштовним кредитом з мсдн підписки, чи аналогічними сервісами.
схема проста як двері — в себе на компі завантажуєм сторінку на любому топіку без коментарів, потім те саме — для неавторизованого юзера, порівнюєм контент, в шапці заміняєм імя і фотку на плейсхолдер, «патч» для хтмля зберігаєм в аплікуху, а далі автоматично п орадому завантажуєм пости без відповідей, підміняєм плейсхолдери на інфу з власної «бази», засилаєм на сервер екстеншина.... «токени» звичайно ж зберігаєм в себе, так само і мітки що «цей юзер вже користується екстеншином» — потім можна статистику порахувати.
десь на цьому етапі можна помітити, що скорше за все сервер для вже авторизованих юзерів віддасть назад їх токен — все ж він міг з іншого бравзера зайти — отримуєм і радієм ;)
4. витягуєм повну базу юзерів, і починаєм розважатись....
берем по черзі всіх успішно зареєстрованих юзерів, і проходимся по повному списку юзерів, розставляєм їм рандомні/добрі/злі (залежно від настрою) оцінки з рандомними затримками, записуєм час використання кожної оцінки, щоб через добу можна було повторити — якщо ще не буде фікса.
5. починаєм тролити
«а куда ділись мої −5???!!!!»
«алекс, а скільки в тебе вже юзерів?»
«вау, доу не впізнати!»
етс..
а тепер найцікавіше:
бл@.. (АКА що ж робити?)
проблема #1: почнемо з того, що щоб зламати екстеншин.... ми його навіть не чіпали — сервер не містить жодної авторизації від кого ж від отримав запит... опен сорс це прікольно, але про секюріті теж не варто забувати.
пакращення #1: зашитий авторизаційний токен в екстеншині.
не забуваєм що в гіт файлик з ним не має попасти, тримаєм в себе локально в ігнорі. автоматом дає можливість розшарити сорси сервера — аналогічо, без ключика.
проблема#2: ключик то зашитий, але з фідлера його видно!..
пакращення #2: ну тут все просто — запити на сервер шлем лише по хттпс, валідуєм сертифікат, в ідеалі авторизацію привязуєм до часу, так щоб те що в екстеншині збережено != тому що шлем.
проблема #3: файлики екстеншина як були так і лишились зіпками, без пароля(якщо з часів 20го хрома нічого не змінилось), і лежать собі мирно в юзер директорії ... ну тут вже мало що зробиш...далі треба секюрити сервер.
проблема #4: хто вислав сторінку схожу на чесну — той і юзер.
пакращення #4: перше наближення — впаювати токен під профілем для авторизованих користувачів (вирішується лише з допомогою доу)
проблема #5: той хто перший пришле щось подібне на токен — той і юзер
пакращення #5: треба не лише мати можливість отримувати унікальний токен для аторизованого юзера, а ще й мати сервіс валідації «хто під цим токеном живе», або що краще — «от ця пара — токен і юзер — дружать між собою?», знову ж таки, на стороні доу, при першій реєстрації в екстеншині.
проблема #6: аудиторія.давати крутити карму для любого юзера, але лише «підтвердженні» можуть клікати? так тут підтверджених що з контакту зайшли стільки набіжить, що мало не здасться...
пакращення #6: варіант — всі юзери з 3+ місяців на доу з 30+ постами, чи щось таке. витягнути сторінку профіля на реєстрації і перевірити проблема не велика.

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

Ну что я могу сказать — вы особенно одаренный “молодец”.

Новые пользователи не вводятся в систему до тех пор пока/если администрация ДОУ откроет мне доступ к проверке новых.

так як на доу з третину програмістів — ламати можуть, аби було бажання
Класс, сломать, а потом выложить свой высер в паблик, почесав этим свое ЧСВ — мы только на такое способны?
Класс, сломать, а потом выложить свой высер в паблик, почесав этим свое ЧСВ — мы только на такое способны?
1) Это правильно, ибо стимулирует авторов (нормальных авторов) закрывать дыры. Когда тест упал ЦИ вам постоянно об этом напоминает, а не показывает что все зеленое.
2) А какую реакцию вы ожидали? Все резко побегут слать вам патчи?
Я уже в одном топике писал суровую правду жизни: Вам никто ничего не должен. Можно и так: Все люди сво...
А человек, вроде, даже какие-то решения указал.
3) Про ЧСВ даже не смешно, в контексте расширение для кармы. Для кармы, Карл!
Класс, сломать, а потом выложить свой высер в паблик, почесав этим свое ЧСВ — мы только на такое способны?
ні, не тільки, от що б ще варто запиляти:
— забрати карму з анонімуса — це мета юзер, для всіх коментів і топіків видалених/забанених юзерів
— забрати жирні нулі, лишити лише стрілки для порожньої карми
— додати збереження не лише факту зміни карми, а ще й ІД комента для якого це зроблено, і також топіка (ід коменту під датою/"хх хв назад", в лінці)
— сильно підняти ліміти карми, виставивши ХХ денних змін і скажем Х на одного юзера, але щоб всі з різних коментів.
— показувати загальну карму однією цифрою сірим/блідим кольором, а відповідну посту/топіку — іншою, яскравою
— наваяти відображення зміни карми для топіків в власній історії (профайл — коменти)
— активно постити топи юзерів по кармі, або наваяти в екстеншині менюшку і рендирити вбудовану сторінку з цим
п.с. при пості свого коменту додається твій, і підвантажуються нові коменти — там віджету нема ;)
Новые пользователи не вводятся в систему до тех пор пока/если администрация ДОУ откроет мне доступ к проверке новых.
доречі, був і інший варіант розвитку подій — подивитись на всі потенційні/реальні проблеми версії 1.0 (чи то 0.1), а на основі цього накатати версію 2.0(0.5), статтю про роботу над помилкми, і під шумок вайпнути базу...

Люди с положительной кармой будут думать, что говорить. С отрицательной — говорить то, что думают.

А теперь детишки я покажу вам систему которая будет мерять вашу душу. — Как зачем её измерять? Ну вот смотрите, это же так важно и нужно, система состоит из двух частей каждая часть портирована прям вам в мозг, и код вылит на гитхаб так что всё молодёжно

Мені не вдається змінити карму деяким користувачам, з’являється вікно з таким повідомленням: «Вы уже изменяли репутацию этого пользователя сегодня», хоча я цього не робив. Чому так?

Во многих случаях логи выглядят так:

2015-05-02T18:30:41.644900+00:00 app[web.1]: Karma Controller : User “YOU” modified reputation of “***” by 1
2015-05-02T18:30:41.644982+00:00 app[web.1]: Routing : 200 “/karma/***/good” 8ms
2015-05-02T18:30:44.394937+00:00 app[web.1]: { status: 409,
2015-05-02T18:30:44.394944+00:00 app[web.1]: message: ’"YOU" already modified reputation of “***” today’ }
2015-05-02T18:30:44.395417+00:00 app[web.1]: Routing : 409 “/karma/***/good” 7ms

Так что не баг.

Можливо потрібно було перезавантажити сторінку. В більшості випадків зміни відображалися зразу. В деяких — карма змінилася після перезавантаження .

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

може справа в тому що карма міняється в одному місці, а лейблів користувача на сторінці набагато більше?

Такое не должно происходить. Я кидаю событие по результату запроса, а на это событие уже подписаны все виджеты.

Чего у меня репутация «минус 1» ?!

ви не повірите — хтось з «перевірених» клікнув мінус :)

Давно так не сміявся. Хотів поставити плюс, але випадково нажав не ту стрілочку :))))))))) Тепер −2

це перший симптом що вам варто знести екстеншин і перестати про це паритись :))

Как я смогу теперь здесь что-то писать, зная что здесь есть человек способный поставить мне минус?

згадуючи правила вище по тексту, він не тільки здатен поставити вам мінус, а має можливість робити це щодня :)))
але проблема не в тому що мінуси хтось ставить, проблема що екстеншин практично виключно для мінусів і використовуєть, а для плюсів і далі використовуються «офіційні» підтримки, як наслідок скорше за все екстеншим буде лише використовуватись для кидання кашками, поки звідти останні не втечуть...

Я могу прилинковать «+1» на нажатие «Поддержать». И система будет прибавлять плюсики в пределах лимита.

проблема що екстеншин практично виключно для мінусів і використовуєть, а для плюсів і далі використовуються “офіційні” підтримки
В данный момент пользователи выставили 35 плюсов и 34 минуса.
В данный момент пользователи выставили 35 плюсов
:O
значить я ходжу на доу читати не ті топіки :)))

Сорі, завтра і післязавтра поставлю плюси, щоб виправити свою помилку :)

Теперь «-4». Кажется у меня начинается депрессия.

«-5» — я теряю веру в человечество

доведут тебя так до суицида, а потом окажется что есть баг и на самом деле репа на нуле :)

Ух ты! Я правда не фанат кармы, но если пользователи что-то делают для твоего проекта это в любом случае очень круто. Если нужна какая-то помощь (в смысле API endpoints), пиши пожалуйста.

Если нужна какая-то помощь (в смысле API endpoints)
Аутентификацию (выдачу токена) сделайте. А то у меня и по второму варианту есть сомнения.

Супер!

1) Было бы круто, если ДОУ начнет рендерить в страницу (например в <input type="hidden">) авторизированного юзера какой-нибудь токен, который можно было бы использовать для получения не приватной информации по пользователю.
В таком случае я не буду завязываться на собственные костыли с токенами и проверками, которые все равно можно обойти.
Аналогом инпута может служить существующая кука с сессией пользователя.

2) Какая-нибудь медийная поддержка для подобных проектов (это не первый мой и не я один пишу такие расширения). Топик уйдет вниз со временем, новые пользователи не узнают о расширении. А для подобного рода расширений, чем большее количество заинтересованных лиц будет им пользоваться, тем более качественный результат оно будет давать.
Как вариант, список в отдельной рубрике?

What do you think about that?

Было бы круто, если ДОУ начнет рендерить в страницу (например в <input type="hidden">) авторизированного юзера какой-нибудь токен, который можно было бы использовать для получения не приватной информации по пользователю. В таком случае я не буду завязываться на собственные костыли с токенами и проверками, которые все равно можно обойти. Аналогом инпута может служить существующая кука с сессией пользователя.

Напишите, пожалуйста, подробнее, что и как Вам нужно сделать Виталию на [email protected]

Спасибо, я оформлю запрос и отправлю его Виталию.

практика проходу по топікам показало, що 90% змін репутацій в мінус тим «кого давно мріяли замінусувати», наразі бачив лише трьох людей з плюсиками — що якось несерйозно

Умс. А зачем мне тратить время на игры с репутацией? какой у нее практический смысл?

это дает положительный эффект ресурсу, на котором репутацию ввели

Практический пример?

*** В данном случае система сторонняя, т.е. тот кто рейтинговую приблуду не поставил, тому от ее наличия — фиолетово.

Практический пример?
стековерфлоу
*** В данном случае система сторонняя, т.е. тот кто рейтинговую приблуду не поставил, тому от ее наличия — фиолетово.
с этого надо начинать, а не с полезности репутации

Класно, цього дуже тут не вистачало!

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

Вряд ли без согласия СВ/меня это получится. Вроде ни один из нас не фанат кармы. :)

«Бессонница крыльями машет в окне,
Не спится, не спится, не спится бы мне» ©

Конечно не спиться. Им же пить некогда, только о карме и думают.

тот самый случай, когда ться/тся меняет смысл

А могли бы вы рассказать про систему авторизации и тд.
А то у меня github.com/...ster/src/module/DAL.js#L6 есть сомнение.

Сомнения можно оформить на почту =)

Сомнения можно оформить на почту =)
На почту не интересно. :)
Поэтому спрошу тут:
А не является ли токеном хеш от публично доступной информации?

Хорошие мысли =) Сильно не хакайте, ночью пофикшу =)

Спасибо, работает :)

Установил, никаких стрелочек не появилось

Да, увидел в логах несколько 401-х запросов. Буду разбираться. В консоли браузера есть ошибки?

Интересно, почему он через https сделал запрос? DOU доступен через https?

Это хостинг сервера с репутацией. Позже добавлю поддержку КОРСов на нем.

Только что вырубил «heroku» (хз что это и каким боком относится к доу), кликнул на повышение тебе кармы:
— было «1»
— после клика «11»
— после перезагрузки «2»

кликнул на повышение тебе кармы:
— было «1»
— после клика «11»
— после перезагрузки «2»

Пофиксил, обновленная версия расширения уже в Хром сторе.

Підписатись на коментарі