use Modern::Perl; use utf8; use Mojo::Base -strict, -signatures, -async_await; our $redis; our $client; our $config; package abon_client; use darsan_client; my $auth = abon_auth->new; sub new($class) { my $client = darsan_client->new(undef, $config->{darsan}->{servers}); $client->map($config->{darsan_map}) if $config->{darsan_map}; return bless {client => $client}, $class; } our $AUTOLOAD; sub AUTOLOAD($self, $info, @rest) { # Remove qualifier from original method name... my $called = $AUTOLOAD =~ s/.*:://r; return $self->{client}->auth($auth->telegram($info->{id}))->$called(@rest); } package abon_auth; sub new($class) { return bless {telegram=>undef}, $class; } sub telegram($self, $tel_id) { $self->{telegram} = $tel_id; return $self; } async sub token_p { my $self = shift; my $key = "ab-$self->{telegram}-token"; my $tok = $redis->get($key); return $tok if $tok; my $res = await $client->post_p("client", "/telegram/$self->{telegram}/token"); $redis->set($key, $res->{token}); $redis->expireat($key, darsan_auth::parse_time($res->{expires})-5); return $res->{token}; } 1;