package RT::Client::Console::Connection; use strict; use warnings; use parent qw(RT::Client::Console); use Curses::Forms::Dialog::Logon; use Curses::Forms::Dialog::Input; use Error qw(:try); use Params::Validate qw(:all); use RT::Client::REST; use relative -aliased => qw(::Session ::Session::Ticket); =head1 METHODS =cut # global connection data my %cnx_data = ( handler => undef, # RT handler servername => undef, username => undef, password => undef, ); =head2 get_cnx_data Returns the connection data. input : none output : hashref, a copy of the connection data keys/values =cut sub get_cnx_data { return { %cnx_data }; } =head2 connect Connects to the RT server. parameters not passed are taken from the configuration, or asked to the user. input : rt_servername (optional) : RT server name (full URL) rt_username (optional) : RT login rt_password (optional) : RT password =cut sub connect { my $class = shift; my %params = validate( @_, { rt_servername => 0, rt_username => 0, rt_password => 0, } ); if (!defined $params{rt_servername}) { $params{rt_servername} = $class->input_ok_cancel('Connection', 'RT server name') or return; } $params{rt_servername} or return; try { my $rt_handler = RT::Client::REST->new( server => $params{rt_servername}, ); if (!(defined $params{rt_username} && defined $params{rt_password})) { (my $rv, $params{rt_username}, $params{rt_password}) = logon('connect to RT server', BTN_OK | BTN_CANCEL, 50, qw(white red yellow) ); } Session->execute_wait_modal(' Connecting to the RT server... ', sub { $rt_handler->login(username => $params{rt_username}, password => $params{rt_password}); $cnx_data{handler} = $rt_handler; $cnx_data{servername} = $params{rt_servername}; $cnx_data{username} = $params{rt_username}; $cnx_data{password} = $params{rt_password}; } ); } catch Exception::Class::Base with { $class->error("problem logging in: " . shift->message()); }; return; } # disconnect from RT, unload loaded tickets sub disconnect { my ($class) = @_; undef $cnx_data{handler}; undef $cnx_data{servername}; undef $cnx_data{username}; undef $cnx_data{password}; my $ticket; while ($ticket = Ticket->get_current_ticket()) { $ticket->unload(); } return; } =head1 EXCEPTIONS RT::Client::Console::Connection::Exception:: =cut 1;