Comments (94)
Вроде почти всё сделал, кроме двух вещей.
Во-первых, мне не очень нравится апи списка досок т. к. они не упорядочены. Правильно отдавать массив объектов с полями "board_name" и "title", например. Или на сервере в принципе не предусмотрен порядок досок, а на страницах доски вбиты вручную?
Во-вторых, поддержку "no_pomf" добавить не получится. Модули тут бессильны, новые кнопочки-галочки можно добавлять только на стороне приложения. Я бы подумал насчёт добавления в приложение, но фича уж больно уникальная и, по моему мнению, не сильно востребованная.
from dashchan-extensions.
Массив сейчас переделаю с сортировкой и ключами board_desc/board_name. На страницах вручную забиты, руки никак не дойдут допилить динамическую подгрузку досок.
Окей, no_pomf - не критично.
from dashchan-extensions.
Так доски по алфавиту сортируются? Просто сортировать json-объект нет никакого смысла, потому что он в принципе не может быть упорядоченным, в любом случае стоит сделать массив.
from dashchan-extensions.
Да. Действительно, но пусть будет, ибо мне один аргумент достаточно было json энкодеру скормить.
Готово, сейчас нормально?
from dashchan-extensions.
У меня что-то сайт вообще отвалился.
from dashchan-extensions.
Сейчас вроде открывается, у хостера что-то с IO, диски оче медленно работают.
from dashchan-extensions.
Так что, думаешь объектом всё таки оставить? А то я что-то не вижу разницы по сравнению с прошлым разом, лол.
from dashchan-extensions.
Не. Т.е. мне просто data
массивом сделать?
from dashchan-extensions.
Да, всё верно. И к каждому элементу массива добавить ещё поле кода доски.
from dashchan-extensions.
Интернеты отвалились :\
Что-то вроде
"data" : [
{
"board_desc" : "Чятик для двоих",
"board_key" : "a",
"board_name" : "Аниме"
},
]
получилось
from dashchan-extensions.
Или так сделать?
"data" : [
"a" : {
"board_desc" : "Чятик для двоих",
"board_key" : "a",
"board_name" : "Аниме"
},
]
from dashchan-extensions.
Первый вариант лучше. Короче, как сейчас — лучше всего.
from dashchan-extensions.
Done.
from dashchan-extensions.
Ок, тогда я всё сделал, сейчас обновлю.
from dashchan-extensions.
Сек
from dashchan-extensions.
Я думаю возврат апи удалялки тоже массивом сделать
from dashchan-extensions.
Да это уже необязательно.
from dashchan-extensions.
Ну ладно, тогда как есть оставлю. Спасибо.
from dashchan-extensions.
Просто я уже закоммитил релиз, лол. Я могу откатить, конечно, просто стоит ли?
from dashchan-extensions.
Ну если его легче парсить будет, то думаю да. Или инкремент версии сделать до 1.4 лучше
Алсо, delete еще это выдать может,
Тред закрыт
Неправильный IP - (посты можно удалять без пароля, если айпи клиента совпадает с ip поста)
Пост протух.
Или необязательно хандлить все сообщения?
from dashchan-extensions.
Ну, мне разницы-то нет, но если хочешь сделать чтобы типа "нормально" было — давай. Выпущу как 1.4 потом.
Обработку этих сообщений тоже добавлю.
from dashchan-extensions.
Только лучше не так, как сейчас
{
"error" : [
{
"380" : "Неверный пароль для удаления."
}
],
"error_code" : 200
}
а как-то так например:
{
"error" : [
{
"post_id": "380",
"reason": "Неверный пароль для удаления."
}
],
"error_code" : 200
}
from dashchan-extensions.
Кстати, вообще для апи рекомендую Content-Type
отдавать application/json; charset=utf-8
вместо простого application/json
.
from dashchan-extensions.
Оке, просто переписывать историю коммитов не есть хорошо, если форки есть :D
Теперь такой вывод (наверное еще больше complicated :\ )
"error" : [
{
"error_msg" : "Неверный пароль для удаления.",
"post" : "1331"
},
],
Поправила Content-Type
from dashchan-extensions.
Теперь post_id/reason в объекте
from dashchan-extensions.
Алсо, клиент куки сохраняет которые с ответом сервера после постинга прилетели?
from dashchan-extensions.
Нет. Что за куки и для чего они?
from dashchan-extensions.
name, если в нейме есть трип который есть в дб, то можно постить на любых досках с неймом и без капчи (что-то вроде пасскодов, лол).
from dashchan-extensions.
Не понял, а почему эта кука после постинга появляться должна?
from dashchan-extensions.
Header set-cookie в ответе task=post.
from dashchan-extensions.
Не, как куки работают я знаю. Я просто не могу понять, что она делать должна. Имя-то везде можно использовать, кроме некоторых досок, да и капчи тоже я нигде не видел.
from dashchan-extensions.
/api/checkconfig проверяет через нее есть ли "специальный" трипкод из дб в имени, и возвращает captcha=0 и names_allowed=1 даже если постинг с неймом в конфиге отключен.
Но наверное нет смысла ковыряться с ней, оверкилл.
Капча есть у всех кроме /RU UA BY KZ EU/
from dashchan-extensions.
Так погоди, эта кука же просто хранит последнее введённое имя, так? И при наличии куки просто немного меняется конфиг? То есть фактически мне не надо даже сохранять куку, а просто можно использовать введённое имя?
Про капчу я вообще забыл, что она есть, лол, а ведь она реализована в модуле.
from dashchan-extensions.
Йеп. Хмм, можно использовать последнее введенное имя, если оно где-то сохраняется, если надо могу инпут name к checkconfig добавить вместо печеньки.
from dashchan-extensions.
Не, не обязательно, я без проблем смогу сделать чтобы с кукой передавалось.
from dashchan-extensions.
А такой вопрос: например, я ввожу имя, которое есть в базе, отправляю пост, иду в d, ввожу там другое имя, снова отправляю пост. Таким образом, кука заменится, но пост отправится со вторым введённым именем?
Вообще было бы хорошо, если бы для тестирования для меня было бы заведено такое имя, хотя бы на время.
from dashchan-extensions.
Пост отправится только если введено имя, которое в дб, иначе просто "Аноним". В функции постинга тоже проверка есть.
Оки, вот тестовый трип #TestCode
from dashchan-extensions.
Я просто думаю, может, в таком случае, стоит оформить это как авторизацию? Дашчан поддерживает авторизацию пользователей.
from dashchan-extensions.
Хм, можно. Может тогда отдельную куку для этих целей прикрутить (что-то вроде auth, трипкод прошел проверку -> сохранить этот трип в auth и проверять уже по куке auth)?
Имхо так лучше будет.
from dashchan-extensions.
Да не обязательно, можно как есть оставить. Я вот так хочу сделать:
- В настройках надо ввести свой трипкод. Если он проходит авторизацию — сохраняю его.
- При открытии окна постинга проверяется наличие сохранённого в настройках трипкода. Если он есть — разрешаю отображение поля ввода имени.
- При отправке поста этот трипкод автоматически склеивается с введённым именем.
from dashchan-extensions.
Да я все равно уже re-implementing this. Добавлю в чекконфиг инпут с auth и в ответ поле вроде check_success.
Мне идея со склеиванием не оче нравится, что если я введу другой трип в поле нейма?
И 2 пункт немного переделать можно будет
- Отправляем checkconfig с инпутом (или кукой?) auth который содержит трип из настроек при обновлении доски.
если names_allowed отдает 1 то поле ввода же само включается?
from dashchan-extensions.
Мне идея со склеиванием не оче нравится, что если я введу другой трип в поле нейма?
if (name.indexOf('#') == -1) name += '#' + authorizedTripcode;
То есть теперь авторизация будет возможна отдельно от трипкода? Это, конечно, лучше.
from dashchan-extensions.
Да.
Кука auth с трипом должна будет отправляться чекконфигу и функции постинга/удаления, сможешь реализовать?
from dashchan-extensions.
Смогу. А с удалением что? Типа пароль не нужен?
from dashchan-extensions.
Удаление без задержки как вариант.
Может функцию авторизации отдельно добавить? пока код еще редактирую
from dashchan-extensions.
Готово
/api/authorize?auth=trip, только trip должен быть urlencoded, task=post с правильным трипом также авторизует (отдает куки auth)
/api/checkconfig теперь содержит поле authorized в объекте config
from dashchan-extensions.
Лол, заодно обнаружил баг в приложении, в определённый момент ссылка декодируется и вся часть ссылки начиная с # считается фрагментом ссылки и не отправляется на сервер. Буду использовать пост-запрос, но баг устраню в следующей версии на будущее, разумеется.
from dashchan-extensions.
Great.
from dashchan-extensions.
Так, к authorize нельзя пост-запросом обращаться, только гет?
from dashchan-extensions.
Хм, вроде фильтра никакого на нем нет, так что можно.
from dashchan-extensions.
У меня чего-то не получается, выдаёт html страницу.
from dashchan-extensions.
Так должно работать
<form id="postform" action="/wakaba.pl" method="post" enctype="multipart/form-data">
<input type="hidden" name="section" value="b">
<input type="hidden" name="task" value="json">
<input type="hidden" name="json" value="authorize">
<input type="text" name="auth" value="">
</forrm>
from dashchan-extensions.
Лол, а я шлю запрос на b/api/authorize
.
Попробую тогда.
from dashchan-extensions.
rewrite правило /api/ не работает с POST запросами
Оки
from dashchan-extensions.
Well, параметр task тут не нужен.
from dashchan-extensions.
section
, как оказывается, тоже. Ну это логично.
from dashchan-extensions.
section == b
, если нет аргумента.
from dashchan-extensions.
Всё, выпустил 1.4 с поддержкой авторизации.
from dashchan-extensions.
Thanks again
from dashchan-extensions.
Хм, а флаги стран прикрутить можно? Поля location, location_full в объекте поста, geoip_enabled в конфиг объекте, флаги лежат в /img/flags/ (файлнеймы капсом)
И еще auth cookie добавить к /api/thread,/api/threads (клиент же оттуда берет конфиг?) и проверку c authorizedTripcode != null можно убрать тогда, если names_allowed будет отдавать 1.
И тут вроде должно быть
int attachmentCount = configObject.optInt("max_files", 4);
вместо
int attachmentCount = configObject.optInt("max_res", 4);
from dashchan-extensions.
Хм, а флаги стран прикрутить можно?
Готово
и проверку c authorizedTripcode != null можно убрать тогда
Я, помню, специально делал именно так, как это сделано сейчас, но это было когда ещё кука auth не поддерживалась. Сейчас, наверное, можно убрать эту проверку.
И тут вроде должно быть
Точно, невнимательно копировал же. Сделал нормально.
Всё, заливать обновление, или ещё что-то?
from dashchan-extensions.
Спасибо, пока вроде всё, заливай.
from dashchan-extensions.
Залил.
from dashchan-extensions.
Оки.
from dashchan-extensions.
Можешь допилить хандлер чтобы показывал ip/причину/срок когда истекает(0 - never)?
Новый апи для банов (return функции поста)
бан as-сети
{
"banned" : 1,
"bans" : [
{
"showmask" : 0,
"ip" : "94.242.58.252",
"reason" : "AS Network is banned",
"expires" : "0"
}
],
"error" : "Бан :<",
"error_code" : 200
}
обычный ip-бан
{
"banned" : 1,
"bans" : [
{
"network" : "94.242.58.252",
"showmask" : 0,
"ip" : "94.242.58.252",
"reason" : "test",
"setbits" : 32,
"expires" : "1468527252"
}
],
"error" : "Бан :<",
"error_code" : 200
}
бан dnsbl
{
"banned" : 1,
"bans" : [
{
"showmask" : 0,
"ip" : "176.10.104.240",
"reason" : "This IP was listed in tor.dnsbl.sectoor.de blacklist!",
"expires" : 0
}
],
"error" : "Найдена прокси.",
"error_code" : 200
}
и еще печеньку auth добавь к /api/post.
from dashchan-extensions.
Готово. Обновлять?
from dashchan-extensions.
Сек, еще вопрос, можно у Icon менять размер шрифта/позицию текста или это в самом клиенте захардкожено?
from dashchan-extensions.
Не понял. У иконки поста? Что за размер шрифта и позиция текста?
from dashchan-extensions.
У меня на старой мобилке с низкоразрешением не влезала геоинфа в диалоге по клику на флаг (получалось что-то вроде RUSSIAN FEDERATION, SAINT PETERS), пришлось урезать строку до вида RU, Saint Petersburg.
Алсо, функция поста не всегда отдает поле banned, не будет exception из-за того что его нет, или лучше добавить его во все ошибки?
from dashchan-extensions.
А, да, текст должен быть коротким и влезать в 1 строку. Оно на что-то более серьёзное не было рассчитано.
from dashchan-extensions.
Алсо, функция поста не всегда отдает поле banned, не будет exception из-за того что его нет, или лучше добавить его во все ошибки?
int banned = jsonObject.optInt("banned", 0);
Не будет. Если оно отсутствует или оно не преобразуется в число — вернёт 0.
from dashchan-extensions.
Тогда окей.
Поиск по борде еще можно прикрутить? /api/search
Параметры
find - строка для поиска
op - искать только в оп-постах
comment - поиск по тексту в посте (должен быть 1)
subject - поиск по теме
from dashchan-extensions.
Тоже готово.
from dashchan-extensions.
Thx~
Обновляй.
from dashchan-extensions.
#crash
В общем, если я отключаю флажки на борде, и рефрешу полностью тред (который закешировался с флажками), то клиент вылетает.
Device: Sony Ericsson hallon (MT15i)
SDK: 18 (4.3.1)
Application: 1031 (2.8.0)
----------------------------------------
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at chan.content.model.Post.contentEquals(Post.java:559)
at chan.content.model.Posts.pendingMerge(Posts.java:339)
at com.mishiranu.dashchan.async.ReadPostsTask.doInBackground(ReadPostsTask.java:184)
at com.mishiranu.dashchan.async.ReadPostsTask.doInBackground(ReadPostsTask.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
... 3 more
from dashchan-extensions.
Да, глупая ошибка. Попробуй удали пока что тред из кэша (или вообще кэш очисти), а я сейчас исправлю.
from dashchan-extensions.
Это ошибка не в модуле, а в клиенте, так что только с его обновлением что-то изменится.
from dashchan-extensions.
Оки.
from dashchan-extensions.
Done.
from dashchan-extensions.
Эх, я только подумал, что мне будет проще локально у себя их просто убрать для теста, и удалил прошлое сообщение... Ну да ладно.
from dashchan-extensions.
Да я уже всё проверил.
На будущее — лучше создай issue у самого проекта, если подобный вылет происходит, расширение само по себе не может приводить к вылету (нет, ну может конечно, если постараться), а если всё таки приводит — это баг клиента.
from dashchan-extensions.
Получилось пофиксить?
Alrighty.
from dashchan-extensions.
Да, получилось.
from dashchan-extensions.
API update
Новые поля в конфиге
max_comment_length //Maximum number of characters in a comment
max_field_length //Maximum number of characters in subject, name, and email
default_name //Дефолтный нейм (аноним итд)
Скорость борды (постов в час) - поле board_speed в boardinfo.
Печенька auth
переименована в wakaauth
Алсо, категории борд можешь прикрутить? Только я не знаю как их лучше реализовать (чтобы динамически подгружалось), сейчас есть поле board_cat в объекте массива с досками.
Могу добавить пару строк, чтобы делать сплит по "|" в массивы
"info" : {
"category_order" : "Обсуждения|Общее|Японская культура",
"board_order" : "a|b|d|diy|elf|h|l|mg|mu"
}
Или добавить сортированные массивы
"info" : {
"category_array" : [
"Обсуждения",
"Общее",
"Японская культура"
],
"board_array" : [
"a",
"b",
"d",
"diy",
"elf",
"h",
"l",
"mg",
"mu"
],
}
UPD: Welp, думаю оставлю массивы
UPD: Алсо, добавь капкод мода
adminpost == 1 //capcode - Team
adminpost == 2 //capcode - Mod
from dashchan-extensions.
max_comment_length
Точно максимальное число символов? Не байт?
from dashchan-extensions.
Байт, но сейчас исправлю.
from dashchan-extensions.
Печенька auth переименована в wakaauth
А b/api/authorize
как работает? Его параметр тоже wakaauth
называется или по прежнему auth
?
from dashchan-extensions.
Байт, но сейчас исправлю.
Лол, я сейчас в d пытался пост отправить, мне в качестве кода ошибки возвращалась длина строки. Я так и понял, что ты длину строки тестируешь.
from dashchan-extensions.
Лол, я сейчас в d пытался пост отправить, мне в качестве кода ошибки возвращалась длина строки. Я так и понял, что ты длину строки тестируешь.
Да, лол.
Done, теперь чекает по символам.
Параметр по прежнему auth называется.
from dashchan-extensions.
Готово всё. Обновлять?
from dashchan-extensions.
Йеп.
from dashchan-extensions.
Можешь альт. домен обновить?
02ch.info мертв, новый - buttflaps.pp.ua
from dashchan-extensions.
Готово.
from dashchan-extensions.
Сменили движок на meguca (на тохочане тоже), соотвественно апи поменялся, можешь запилить?
Описание здесь
Алсо у объекта треда еще поля sticky и locked, но в доке не описаны.
from dashchan-extensions.
Related Issues (20)
- DashChan Endchan HOT 1
- Support for Wikieat.in
- Support for 27chan.org HOT 3
- Верните brchan.org назад HOT 8
- I've written an extension, how can I get it merged? HOT 6
- Can you please add kohlchan extension? HOT 1
- 8chan captcha "no need to enter captcha" HOT 1
- Support for 77chan.com HOT 1
- Когда будет поддержка a2ch.ru?
- Requesting support for 8kun.top, sushigirl.us and crystal.cafe HOT 4
- New extension: moechannel (2channel.moe) HOT 6
- Requesting support for warosu.org
- Requesting Support for fchan.us
- Где исходники расширений? HOT 2
- The extension is not showing in the app HOT 4
- Проблемы с reCAPTCHA 2.0 HOT 6
- Support posting to FoolFuuka ghost threads / native boards. HOT 1
- Support for lainchan.jp HOT 2
- Erlach: image upload request HOT 25
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dashchan-extensions.