Size: a a a

2021 January 22

АП

Александр Поволоцкий... in Modern::Perl
                                  $c->oauth2->get_token_p(google => $get_token_args)->
                                   then(sub {
                                          return unless my $provider_res = shift; # Redirct to Facebook
                                          $c->session(token => $provider_res->{access_token});
                                          $self->log->info(Dump($provider_res));
                                          my $ua = Mojo::UserAgent->new();
                                          $self->log->info(Dump($ua->post( 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=AIzaSyD..._5WB1-ljKsrM4' =>
                                                                           json => { idToken => $provider_res->{id_token} } )->result->json));
                                          $self->log->info(Dump($ua->post( 'https://openidconnect.googleapis.com/v1/userinfo?key=AIzaSyDU..._5WB1-ljKsrM4' =>
                                                                           json => { idToken => $provider_res->{id_token} } )->result->json));
                                          $c->redirect_to("/");
                                        })->catch(sub {
                                                    $self->log->error(Dump([@_]));
                                                    $c->render("login", error => shift);
                                                  });
источник

АП

Александр Поволоцкий... in Modern::Perl
А, понял. Там нужные данные уже засунуты в токен!
источник

IA

Ivan Avseyanko in Modern::Perl
Эммм... Я конечно, не уверен, но кажется тут немного не то... Или что-то пропущено.
Мы редиректим клиента в гугл. На что-то вида
https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?response_type=id_token&client_id=1234-sometext.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&redirect_uri=куда вернуть&flowName=GeneralOAuthFlow&access_type=непомнюкакойнадо
источник

IA

Ivan Avseyanko in Modern::Perl
Клиент авторизуется, и после этого гугл дёргает redirect_uri (точнее перенаправляет клиента на redirect_uri).
источник

АП

Александр Поволоцкий... in Modern::Perl
Ivan Avseyanko
Эммм... Я конечно, не уверен, но кажется тут немного не то... Или что-то пропущено.
Мы редиректим клиента в гугл. На что-то вида
https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?response_type=id_token&client_id=1234-sometext.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&redirect_uri=куда вернуть&flowName=GeneralOAuthFlow&access_type=непомнюкакойнадо
Уже разобрался. Мне все нужное отдавали в токене.
источник

IA

Ivan Avseyanko in Modern::Perl
Так, окей, тогда продолжать не буду. )
источник

АП

Александр Поволоцкий... in Modern::Perl
Ivan Avseyanko
Так, окей, тогда продолжать не буду. )
Ну, в общем, да. У меня и так от совмещения фронта и бэка голова малость едет уже))
источник

IA

Ivan Avseyanko in Modern::Perl
Да, там всё непросто. Но, всё же проще, чем с Apple, которые тоже недавно OAuth2 внедрили. На свой манер, конечно. 😊
источник
2021 January 23

a

allter in Modern::Perl
Anton Petrusevich
у мыскуля флаг при коннекте, декод на уровне драйвера
К слову, у всех широко распространённых драйверов - DBD::mysql, DBD::Pg, DBD::SQLite - были изменения, которые принципиально меняли поведение работы с кодированием/флагами. Учитывая то, что у нас полно легаси продов, на это надо отдельно обращать внимание
источник

a

allter in Modern::Perl
Oleg Pronin
Я заметил, что многие путаются в utf8 сильно и получают wide character или кракозябры (двойной энкод etc). Хотя тема на самом деле дико простая.
Все что нужно знать:
1) у перла строка может представлять 2 сущности - byte stream и string. is_utf8 говорит какой из режимов включен. В режиме строки просто некоторые функции (substr, lenght И так далее) меняют свой behaviour с побайтового на посимвольный, что занимает дополнительное процессорное время естественно, потому что в пасяти все равно utf8.
2) внутренее представление не изменяется никак при переходе из одного режима в другой. decode_utf8 не делает нихрена кроме как проверяет что там нет инвалидных последовательностей utf8 и переключает режим.
3) чтобы не запутаться где какой режим, простое правило - все что приходит извне (чтение из сокета, файла, stdin, ...) - всегда байтовое. Соответсвенно все что туда отправляется должно быть тоже (иначе будет wide character, однако изза совпадения внутреннего прдставления, все будет работать).
4) еще простое правило - функция is_utf8 за крайне редкими исключениями не должна использоваться. Вы всегда должны знать где у вас байты а где символы. Для этого как правило сразу на входе декодят и в приложении используются символы (кроме случая когда данные бинарные должны быть), и энкодятся в самом конце перед записью в канал.
5) некоторые библиотеки избавляют вас от необходимости энкодить и декодить. Например json::xs::decode_json() ожидает от вас бинарный поток и порождает структуру с символами. А на encode ожидает символы и порождает байты. Обычно это интуитивно логично и ожидаемо.
В случаи работы через обьект JSON::XS->new->utf8->
Метод utf8 как раз заставляет его порождать на декод и ожидать на энкод символы. Если его не писать то в структуре которую вернет декод будут тоже байты (лучше так не делать, только если точно уверены что там только инглиш). Но на вход декод и выход энкод всегда байты, это не меняется, иначе бессмыслица.
Еще например template toolkit аналогично, считывает с диска байты, декодит в символы, ожидает от вас переменные в символах, рендерит и энкодит в байты итоговый результат.
ППКС. Надо бы это в виде FAQ где-то оформить, что бы посылать людей изучать.
источник

ВР

Василий Степанович Р... in Modern::Perl
Warstone
Освобождение памяти идет автоматически при потери последней ссылки на данные. Это поисходит или когда вы делаете undef $scalar_value_or_rereference или по достижению конца скоупа. Но память по умолчанию отдается во внутренний пулл Перла, а не системе.
А не по умолчанию как память вернуть именно системе?
источник

a

allter in Modern::Perl
Василий Степанович Родин
А не по умолчанию как память вернуть именно системе?
На самом деле, системе память иногда отдаётся. Но для этого нужно, что бы в последних аллоцированных аренах все скаляры были освобождены. Что в более-менее сложных программах очень редко случается.
Плюс ещё нужно иметь в виду, что перл не освобождает память из-под временных скаляров, что может ролять, если передаются большие куски каких-то файлов (это такая оптимизация).
источник

ВР

Василий Степанович Р... in Modern::Perl
Oleg Pronin
Чтобы отдавать назад в систему надо перемещать обьекты к началу (дефрагать) это незя делать потому что в коде куча указателей поедут. Для этого нужно вводить косвенную адресацию, что неминуемо скажется на скорости рантайма
Т.е. получается, что спасать память от перла можно только планированием недолговечности перлопроцессов?
источник

VG

Vadim Goncharov in Modern::Perl
ну еще предложи кэши из ОС выкинуть
источник

a

allter in Modern::Perl
Василий Степанович Родин
Т.е. получается, что спасать память от перла можно только планированием недолговечности перлопроцессов?
Просто не надо использовать Perl для задач, для которых он не очень подходит.
Ну и вообще, аллокация во всех ЯП - это боль.
Если прога правильно спроектирована, то она может жить длительное время без выжирания памяти даже будучи написанной на Perl.

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

AP

Anton Petrusevich in Modern::Perl
А что, с++ в плане аллокатора сильно лучше? всмомним мациллу, которую со спец аллокатором надо собирать, чтобы память не выжиралась
источник

VG

Vadim Goncharov in Modern::Perl
а хром даже и не пересобрать, еще больше сожрёт
источник

OP

Oleg Pronin in Modern::Perl
А причем тут с++ ? Там полная свобода
источник

OP

Oleg Pronin in Modern::Perl
Raii как в перле тогда без арены, а хочешь и с ареной будет
источник

a

allter in Modern::Perl
Anton Petrusevich
А что, с++ в плане аллокатора сильно лучше? всмомним мациллу, которую со спец аллокатором надо собирать, чтобы память не выжиралась
На самом деле, если хочется абстрагироваться от аллокаций - лучше брать jvm или node. C/C++/Rust в данном случае никто не имел в виду. :)
источник