Mishiranu / Dashchan-Extensions

Dashchan extensions
GNU General Public License v3.0
48 stars 29 forks source link

#nulldvachin #1

Open lisanyan opened 8 years ago

lisanyan commented 8 years ago

I suck at intros..

В общем, если файл загружен на pomf.cat, то src получается вида //a.pomf.cat/plapla.webm (линк без протокола) и в итоге аппендится к домену борды. В массиве файла есть ключ external_upload (1/0), можно по нему проверять, и не аппендить линк или добавлять к нему протокол (e.g. "https:" + //a.pomf.cat/plapla.webm).

Еще в апи пару новых фич добавила Удаление постов теперь может отдавать json, параметр ajax=1 в запрос

{
   "error" : {
      "1325" : "Неверный пароль для удаления.",
      "1327" : "Неверный пароль для удаления.",
      "1292" : "Неверный пароль для удаления.",
      "766" : "Неверный пароль для удаления."
   },
   "error_code" : 200
}

При успешном удалении вернет { "redir" : "/b/thread/num" } или если был удален тред { "redir" : "/b/" }

Еще желательно добавлять параметр parent с номером треда к delete task, если пост из треда удаляется, чтобы правильный редирект был.

Список борд теперь можно забирать по /board/api/getboards

Алсо, теги sup/sub в разметку можно добавить и инпут no_pomf (не грузить файлы на внешний сервер) в форму отправки (если не сложно).

Mishiranu commented 8 years ago

Вроде почти всё сделал, кроме двух вещей.

Во-первых, мне не очень нравится апи списка досок т. к. они не упорядочены. Правильно отдавать массив объектов с полями "board_name" и "title", например. Или на сервере в принципе не предусмотрен порядок досок, а на страницах доски вбиты вручную?

Во-вторых, поддержку "no_pomf" добавить не получится. Модули тут бессильны, новые кнопочки-галочки можно добавлять только на стороне приложения. Я бы подумал насчёт добавления в приложение, но фича уж больно уникальная и, по моему мнению, не сильно востребованная.

lisanyan commented 8 years ago

Массив сейчас переделаю с сортировкой и ключами board_desc/board_name. На страницах вручную забиты, руки никак не дойдут допилить динамическую подгрузку досок.

Окей, no_pomf - не критично.

Mishiranu commented 8 years ago

Так доски по алфавиту сортируются? Просто сортировать json-объект нет никакого смысла, потому что он в принципе не может быть упорядоченным, в любом случае стоит сделать массив.

lisanyan commented 8 years ago

Да. Действительно, но пусть будет, ибо мне один аргумент достаточно было json энкодеру скормить.

Готово, сейчас нормально?

Mishiranu commented 8 years ago

У меня что-то сайт вообще отвалился.

lisanyan commented 8 years ago

Сейчас вроде открывается, у хостера что-то с IO, диски оче медленно работают.

Mishiranu commented 8 years ago

Так что, думаешь объектом всё таки оставить? А то я что-то не вижу разницы по сравнению с прошлым разом, лол.

lisanyan commented 8 years ago

Не. Т.е. мне просто data массивом сделать?

Mishiranu commented 8 years ago

Да, всё верно. И к каждому элементу массива добавить ещё поле кода доски.

lisanyan commented 8 years ago

Интернеты отвалились :\

Что-то вроде

   "data" : [
      {
         "board_desc" : "Чятик для двоих",
         "board_key" : "a",
         "board_name" : "Аниме"
      },
    ]

получилось

lisanyan commented 8 years ago

Или так сделать?

   "data" : [
      "a" : {
         "board_desc" : "Чятик для двоих",
         "board_key" : "a",
         "board_name" : "Аниме"
      },
    ]
Mishiranu commented 8 years ago

Первый вариант лучше. Короче, как сейчас — лучше всего.

lisanyan commented 8 years ago

Done.

Mishiranu commented 8 years ago

Ок, тогда я всё сделал, сейчас обновлю.

lisanyan commented 8 years ago

Сек

lisanyan commented 8 years ago

Я думаю возврат апи удалялки тоже массивом сделать

Mishiranu commented 8 years ago

Да это уже необязательно.

lisanyan commented 8 years ago

Ну ладно, тогда как есть оставлю. Спасибо.

Mishiranu commented 8 years ago

Просто я уже закоммитил релиз, лол. Я могу откатить, конечно, просто стоит ли?

lisanyan commented 8 years ago

Ну если его легче парсить будет, то думаю да. Или инкремент версии сделать до 1.4 лучше

Алсо, delete еще это выдать может,

Тред закрыт
Неправильный IP - (посты можно удалять без пароля, если айпи клиента совпадает с ip поста)
Пост протух.

Или необязательно хандлить все сообщения?

Mishiranu commented 8 years ago

Ну, мне разницы-то нет, но если хочешь сделать чтобы типа "нормально" было — давай. Выпущу как 1.4 потом.

Обработку этих сообщений тоже добавлю.

Mishiranu commented 8 years ago

Только лучше не так, как сейчас

{
   "error" : [
      {
         "380" : "Неверный пароль для удаления."
      }
   ],
   "error_code" : 200
}

а как-то так например:

{
   "error" : [
      {
         "post_id": "380",
         "reason": "Неверный пароль для удаления."
      }
   ],
   "error_code" : 200
}
Mishiranu commented 8 years ago

Кстати, вообще для апи рекомендую Content-Type отдавать application/json; charset=utf-8 вместо простого application/json.

lisanyan commented 8 years ago

Оке, просто переписывать историю коммитов не есть хорошо, если форки есть :D Теперь такой вывод (наверное еще больше complicated :\ )

"error" : [
      {
         "error_msg" : "Неверный пароль для удаления.",
         "post" : "1331"
      },
   ],

Поправила Content-Type

lisanyan commented 8 years ago

Теперь post_id/reason в объекте

lisanyan commented 8 years ago

Алсо, клиент куки сохраняет которые с ответом сервера после постинга прилетели?

Mishiranu commented 8 years ago

Нет. Что за куки и для чего они?

lisanyan commented 8 years ago

name, если в нейме есть трип который есть в дб, то можно постить на любых досках с неймом и без капчи (что-то вроде пасскодов, лол).

Mishiranu commented 8 years ago

Не понял, а почему эта кука после постинга появляться должна?

lisanyan commented 8 years ago

Header set-cookie в ответе task=post.

Mishiranu commented 8 years ago

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

lisanyan commented 8 years ago

/api/checkconfig проверяет через нее есть ли "специальный" трипкод из дб в имени, и возвращает captcha=0 и names_allowed=1 даже если постинг с неймом в конфиге отключен.

Но наверное нет смысла ковыряться с ней, оверкилл.

Капча есть у всех кроме /RU UA BY KZ EU/

Mishiranu commented 8 years ago

Так погоди, эта кука же просто хранит последнее введённое имя, так? И при наличии куки просто немного меняется конфиг? То есть фактически мне не надо даже сохранять куку, а просто можно использовать введённое имя?

Про капчу я вообще забыл, что она есть, лол, а ведь она реализована в модуле.

lisanyan commented 8 years ago

Йеп. Хмм, можно использовать последнее введенное имя, если оно где-то сохраняется, если надо могу инпут name к checkconfig добавить вместо печеньки.

Mishiranu commented 8 years ago

Не, не обязательно, я без проблем смогу сделать чтобы с кукой передавалось.

Mishiranu commented 8 years ago

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

lisanyan commented 8 years ago

Пост отправится только если введено имя, которое в дб, иначе просто "Аноним". В функции постинга тоже проверка есть.

Оки, вот тестовый трип #TestCode

Mishiranu commented 8 years ago

Я просто думаю, может, в таком случае, стоит оформить это как авторизацию? Дашчан поддерживает авторизацию пользователей.

lisanyan commented 8 years ago

Хм, можно. Может тогда отдельную куку для этих целей прикрутить (что-то вроде auth, трипкод прошел проверку -> сохранить этот трип в auth и проверять уже по куке auth)?

Имхо так лучше будет.

Mishiranu commented 8 years ago

Да не обязательно, можно как есть оставить. Я вот так хочу сделать:

  1. В настройках надо ввести свой трипкод. Если он проходит авторизацию — сохраняю его.
  2. При открытии окна постинга проверяется наличие сохранённого в настройках трипкода. Если он есть — разрешаю отображение поля ввода имени.
  3. При отправке поста этот трипкод автоматически склеивается с введённым именем.
lisanyan commented 8 years ago

Да я все равно уже re-implementing this. Добавлю в чекконфиг инпут с auth и в ответ поле вроде check_success.

Мне идея со склеиванием не оче нравится, что если я введу другой трип в поле нейма?

И 2 пункт немного переделать можно будет

Mishiranu commented 8 years ago

Мне идея со склеиванием не оче нравится, что если я введу другой трип в поле нейма?

if (name.indexOf('#') == -1) name += '#' + authorizedTripcode;

То есть теперь авторизация будет возможна отдельно от трипкода? Это, конечно, лучше.

lisanyan commented 8 years ago

Да.

Кука auth с трипом должна будет отправляться чекконфигу и функции постинга/удаления, сможешь реализовать?

Mishiranu commented 8 years ago

Смогу. А с удалением что? Типа пароль не нужен?

lisanyan commented 8 years ago

Удаление без задержки как вариант.

Может функцию авторизации отдельно добавить? пока код еще редактирую

lisanyan commented 8 years ago

Готово

/api/authorize?auth=trip, только trip должен быть urlencoded, task=post с правильным трипом также авторизует (отдает куки auth) /api/checkconfig теперь содержит поле authorized в объекте config

Mishiranu commented 8 years ago

Лол, заодно обнаружил баг в приложении, в определённый момент ссылка декодируется и вся часть ссылки начиная с # считается фрагментом ссылки и не отправляется на сервер. Буду использовать пост-запрос, но баг устраню в следующей версии на будущее, разумеется.

lisanyan commented 8 years ago

Great.

Mishiranu commented 8 years ago

Так, к authorize нельзя пост-запросом обращаться, только гет?

lisanyan commented 8 years ago

Хм, вроде фильтра никакого на нем нет, так что можно.