Email or username:

Password:

Forgot your password?
Dr. Quadragon ❌

Нак, надо писать дальше, а то я этот чертов проект никогда не добью.

56 comments
Dr. Quadragon ❌

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

Dr. Quadragon ❌

Г-сп-дь всемогущий, какой же долбоеб писал документацию к этой библиотеке.

Даже начальный пример с авторизацией приложению ТУПО НЕ ДОПИСАН.

Dr. Quadragon ❌

А ссылка на авторизацию вместо амперсандов выдает \u0026. То есть, "не юникод".

Мне интересно, автор либы сам ее использовал вообще когда-нибудь?

Dr. Quadragon ❌

Неужели через replace придется херачить, мама родная.

Dr. Quadragon ❌

Так, ну получил я эту строку. Дальше-то чего.

Dr. Quadragon ❌

И куда мне это пхать...

Ладно, документация молчит, читаем сорцы.

D:\side\

@drq это и есть тот самый authorization code, который идёт в AuthenticateToken.

Dr. Quadragon ❌

@dside Ага, и по идее AuthenticateToken мне должен выплюнуть наконец-то AccessToken?

Dr. Quadragon ❌

@dside Перун-громовержец, а что, интересно, мешало автору библиотеки упаковать все это в пару функций...

Dr. Quadragon ❌ replied to Dr. Quadragon ❌

@dside Ну типа, я столько уже обвяза над этой хероборой написал.

Dr. Quadragon ❌ replied to Dr. Quadragon ❌

@dside Слушай, а куда он мне его должен выплюнуть?

pkg.go.dev/github.com/mattn/go

По идее, он только еггог возвращает.

Dr. Quadragon ❌ replied to Dr. Quadragon ❌

@dside А, все, он триггерит Client.Authentiacte. Собственно, потом надо будет вылавливать access token из Client, я правильно понял?

D:\side\ replied to Dr. Quadragon ❌

@drq по задумке библиотеки, видимо, надо просто использовать этот Client напрямую, и он сам к запросам подставит токен.

github.com/mattn/go-mastodon/b

Dr. Quadragon ❌ replied to D:\side\

@dside Да, но надо его как-то сохранить на попозже в конфиг, и потом его вставлять. Чтобы не регистрировать каждый раз новый апп :)

D:\side\ replied to Dr. Quadragon ❌

@drq а, если так, то да, через Client.Config.AccessToken доставать и в NewClient скармливать обратно.

Dr. Quadragon ❌ replied to Dr. Quadragon ❌

@dside Хорошо, что автор - не хирург.

D:\side\ replied to Dr. Quadragon ❌

@drq мне всё-таки кажется, что для твоего случая автор просто подразумевал вход по логину с паролем, чтобы при каждом запуске процесс получал новый access token и трогать его руками и тем более сохранять куда-то не было бы нужно.

(Правда, для безопасности тут особого выигрыша нет, т. к. пароль фактически полностью содержит возможности токена. Но здесь мои полномочия всё.)

Dr. Quadragon ❌ replied to D:\side\

@dside Во-первых, по логину с паролем я уже пробовал, во-вторых, не хотет.

D:\side\ replied to Dr. Quadragon ❌

@drq ну, судя по коду Authenticate, у автора ни один из этих пунктов затруднений не вызвал :blobfoxupsidedown:

Alexey Skobkin replied to Dr. Quadragon ❌

@drq @dside
На самом деле не очень, лол.

Alexey Skobkin replied to Dr. Quadragon ❌

@drq @dside
Но он так и сделал.
Просто у него семантика нейминга методов НЕСКОЛЬКО СТРАДАЕТ.

D:\side\

@drq трудно сказать. Не было надо? Для твоего случая автор бы, наверное, просто дал пароль от пользователя на вход. Такой метод я там вроде мельком видел.

Флоу c authorization code предназначен всё-таки для ситуаций, когда между одним сервисом и другим ещё есть непосредственно выдающий доступ пользователь, и authorization code нужен именно чтобы доказать, что согласие пользователя было, но не получая его реквизитов ни на каком этапе, чтобы не было соблазна применить их для чего-либо ещё. И тут паковать в библиотеку особо нечего, т. к. один из этапов, по задумке, интерактивный.

@drq трудно сказать. Не было надо? Для твоего случая автор бы, наверное, просто дал пароль от пользователя на вход. Такой метод я там вроде мельком видел.

Флоу c authorization code предназначен всё-таки для ситуаций, когда между одним сервисом и другим ещё есть непосредственно выдающий доступ пользователь, и authorization code нужен именно чтобы доказать, что согласие пользователя было, но не получая его реквизитов ни на каком этапе, чтобы не было соблазна применить их для чего-либо ещё. И тут паковать...

Dr. Quadragon ❌

Надо же, блять, оно разродилось доступом.

Спасибо, @dside

Alexey Skobkin

@drq @dside

Заебись 👍

// Но куда пихать эту строчку я тебе писал ещё вчера 🙂

Alexey Skobkin

@drq
Хорошо, что там, ЕМНИП, app secret нужен чтобы токен получить, но ты всё равно даёшь, конечно.

Moana Rijndael 🍍🍕

@drq ты же бота пишешь, не? Нахрена ему авторизация? В вебморде мастодона токен создать, и всё

Moana Rijndael 🍍🍕

@drq настройки > разработчикам > создать приложение

Токен подставлять в HTTP заголовок
И никаких проблем с хитрым Oauth.....

Dr. Quadragon ❌

@mo Надо по красоте делать, чтобы по возможности без рук.

Moana Rijndael 🍍🍕

@drq не надо. Авторизация машины с машиной по логину/паролю нафиг не нужна

Moana Rijndael 🍍🍕

@drq по хорошему человеков тоже надо нормально авторизовать, но они уже привыкли....

Dr. Quadragon ❌

@mo Пароль храниться не будет.

Moana Rijndael 🍍🍕

@drq ...и смысл тогда? Ты просто реимплементируешь получение токена, которое уже есть :blobcatgooglyholdingitsheadinitshands:

Dr. Quadragon ❌

@mo Если есть, но руками - значит нет.

Moana Rijndael 🍍🍕

@drq всё равно придется руками вбить логпасс в бота

Dr. Quadragon ❌ replied to Moana Rijndael 🍍🍕

@mo Ну правильно. Один раз. А не открывать браузер, искать там в настройках настроек чего-то одному Сварогу известное.

А дальше - токен.

Moana Rijndael 🍍🍕 replied to Dr. Quadragon ❌

@drq ладно, кто я такая чтобы запрещать тебе ебаться :blobcatgooglyshrug:

D:\side\ replied to Dr. Quadragon ❌

@drq чтоб максимально беспилотно и без пароля, оно должно работать примерно так:
0. Спрашивает у тебя адрес инстанса
1. Делает RegisterApp и куда-то персистентно сохраняет результат (там вроде никакого входа на инстанс не требуется?)
2. С помощью client_id и адреса инстанса генерит тебе ссылку на /oauth/authorize — которую ты открываешь в браузере сам от нужного пользователя и получаешь код
3. Спрашивает у тебя вышеприведённый код, обменивает его на токен и его тоже персистентно сохраняет
3.1415… ???
4. Профит!

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

Моя ленивая жопа с этим бы, наверное, справилась. Как заядлый любитель "docker-compose up -d и похерачили" не люблю интерактивные сеансы настройки, но здесь это выглядит как путь наименьшего сопротивления.

@mo

@drq чтоб максимально беспилотно и без пароля, оно должно работать примерно так:
0. Спрашивает у тебя адрес инстанса
1. Делает RegisterApp и куда-то персистентно сохраняет результат (там вроде никакого входа на инстанс не требуется?)
2. С помощью client_id и адреса инстанса генерит тебе ссылку на /oauth/authorize — которую ты открываешь в браузере сам от нужного пользователя и получаешь код
3. Спрашивает у тебя вышеприведённый код, обменивает его на токен и его тоже персистентно сохраняет
3.1415… ???

Dr. Quadragon ❌ replied to D:\side\

@dside У меня примерно так и сделано.

Что интересно: если перед этим не скормить клиенту логин с паролем, он перебрасывает на промежуточную страничку типа "а вы точно уверены, что хотите вот это вот позволить?".

Мне интересно, а может он в таком свете и строку эту дебильную сможет сам взять?... Но да ладно, это уже мечты. Главное доступ есть, конфиг сохраняется в жсон, загружается из него, и ленту домашнюю кажет.

Теперь бы получить стрим этой самой ленты - чтобы не поллить по таймауту.

@mo

D:\side\ replied to Dr. Quadragon ❌

@drq гипотетически да, его можно научить, если использовать в процессе получения кода redirdct_uri, который ведёт в приложение.

Но для этого приложение должно быть доступно из браузера хотя бы с хоста с этим самым браузером. И нужно тащить в приложение вебсервер только ради вот этого вот одного запроса. А этому вебсерверу нужен порт. И что-то эта идея кажется всё менее привлекательной…

@mo

Dr. Quadragon ❌ replied to D:\side\

@dside Короче, ладно, по хуям, скопипастит - не развалятся.

@mo

Dr. Quadragon ❌ replied to D:\side\

@dside погоди, а сервер нахрена? По идее, нужен курл с авторизованной в инстатнсе кукой.

@mo

D:\side\ replied to Dr. Quadragon ❌

@drq ты про получение кода напрямую приложением спрашивал.
Вот для этого.
Поскольку ты там особое значение передаёшь, в конце процесса Мастодон показывает тебе красивую страничку с кодом.
А если вместо этого значения передать урл, то Мастодон вместо страницы с кодом приклеит к этому урлу ?code=Х и отдаст туда редирект.
И вебсервер нужен, чтобы этот редирект поймать.

@mo

@drq ты про получение кода напрямую приложением спрашивал.
Вот для этого.
Поскольку ты там особое значение передаёшь, в конце процесса Мастодон показывает тебе красивую страничку с кодом.
А если вместо этого значения передать урл, то Мастодон вместо страницы с кодом приклеит к этому урлу ?code=Х и отдаст туда редирект.
И вебсервер нужен, чтобы этот редирект поймать.

Dr. Quadragon ❌ replied to D:\side\

@dside Хм. Ну, Го, кстати, умеет по-бырику раскручивать веб-сервер.

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

@mo

D:\side\ replied to Dr. Quadragon ❌

@drq если ты /oauth/authorize в залогиненном браузере открываешь, то этот же браузер по редиректу и пойдёт.

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

А иначе в этой затее нет смысла.
Если редирект будет на мёртвую ссылку, то браузер успешно пойдёт и по ней. И код можно будет скопировать из адресной строки, если хочется, но со специальной страницы Мастодона это делать всё же удобнее.

А если ты хочешь и чтоб на /oauth/authorize приложение сходило само, это ему нужны будут логин+пароль или сессия, чего ты вроде как хочешь избежать.

@mo

@drq если ты /oauth/authorize в залогиненном браузере открываешь, то этот же браузер по редиректу и пойдёт.

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

А иначе в этой затее нет смысла.
Если редирект будет на мёртвую ссылку, то браузер успешно пойдёт и по ней. И код можно будет скопировать из адресной строки, если хочется, но со специальной страницы Мастодона это делать всё же удобнее.

Dr. Quadragon ❌ replied to D:\side\

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

@mo

D:\side\ replied to Dr. Quadragon ❌

@drq тогда проще спрашивать прямо логин с паролем и делать запрос токенов с grant_type: password, что и делает Authenticate. Выглядит он работоспособным.

И никакая возня с /oauth/authorize и authorization code в процессе не появляется вообще.

@mo

Dr. Quadragon ❌ replied to D:\side\

@dside Но тогда их придется *хранить*. И вот этого я хочу избежать.

@mo

Go Up