App-MatrixTool

 view release on metacpan or  search on metacpan

lib/App/MatrixTool/Command/client/login.pm  view on Meta::CPAN


package App::MatrixTool::Command::client::login;

use strict;
use warnings;
use base qw( App::MatrixTool::Command::client );

our $VERSION = '0.08';

use constant DESCRIPTION => "Obtain a client authentication token";
use constant ARGUMENTS => ( "user", "password?" );
use constant OPTIONS => ();

=head1 NAME

matrixtool client login - Obtain a client authentication token

=head1 SYNOPSIS

   $ matrixtool client login @me:example.com

=head1 DESCRIPTION

This command performs the C</login> steps of the Matrix client API, obtaining
an access token for the given user ID. This requires a password - either
provided on the commandline as a second argument, or requested interactively
on the terminal.

Once the access token is obtained it is stored in the token cache, which lives
in F<$HOME/.matrix/client-tokens>. This cache will be consulted by other
C<matrixtool client> sub-commands to automatically provide the access token if
required.

Note that the interactive terminal method requires the optional dependency of
L<IO::Termios> to be installed, so that local echo can temporarily be disabled
while the user types in the password.

=cut

sub run
{
   my $self = shift;
   my ( $opts, $user, $password ) = @_;

   $self->{user_id} = $user;

   if( !defined $password ) {
      require IO::Termios;
      my $stdin = IO::Termios->new( \*STDIN );

      STDOUT->autoflush(1);
      print "Password: ";

      $stdin->setflag_echo( 0 );
      $password = <$stdin>; chomp $password; print "\n";
      $stdin->setflag_echo( 1 );
   }

   $self->do_json( POST => "/_matrix/client/r0/login",
      content => {
         type => "m.login.password",
         user => $user,
         password => $password,
      }
   )->then( sub {
      my ( $body ) = @_;

      $self->client_token_store->put(
         server => $self->{server},
         id     => $user,
         data   => $body->{access_token},
      );



( run in 0.771 second using v1.01-cache-2.11-cpan-49f99fa48dc )