From 54f98a5f27e200bb8b0c21ed89a4b0b9eedf584d Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Mon, 10 Dec 2018 11:57:23 +0100 Subject: [PATCH] Save cookies to a file so we don't have to login at every invocation GLPI #34449 --- zabbix_scripts/check_unifi | 33 +++++++++++++++++++++++---------- zabbix_scripts/disco_unifi | 36 +++++++++++++++++++++++++----------- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/zabbix_scripts/check_unifi b/zabbix_scripts/check_unifi index c4edec1..a280d2d 100755 --- a/zabbix_scripts/check_unifi +++ b/zabbix_scripts/check_unifi @@ -5,8 +5,11 @@ use warnings; use JSON; use Getopt::Long; use LWP::UserAgent; +use HTTP::Cookies; use Data::Dumper; +umask 077; + my $user = 'zabbix'; my $pass = 'secret'; my $site = 'default'; @@ -36,22 +39,32 @@ GetOptions ( my @radio_proto = qw/a b g na ng ac/; my $resp; +my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<); +my $cj = HTTP::Cookies->new( + file => "/tmp/.unifi_$username.txt", + autosave => 1, + ignore_discard => 1 +); my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 }, - cookie_jar => {} + cookie_jar => $cj ); -# Log into the API -$resp = $ua->post( - $url . '/api/login', - Content => to_json({ username => $user, password => $pass }), - Content_Type => 'application/json;charset=UTF-8' -); -die "Login failed: " . $resp->message . "\n" if $resp->is_error; +# Check if we need to login +$resp = $ua->get($url . '/api/self/sites'); +if ($resp->is_error){ + # Log into the API + $resp = $ua->post( + $url . '/api/login', + Content => to_json({ username => $user, password => $pass }), + Content_Type => 'application/json;charset=UTF-8' + ); + die "Login failed: " . $resp->message . "\n" if $resp->is_error; + $resp = $ua->get($url . '/api/self/sites'); + die $resp->message . "\n" if $resp->is_error; +} # Now, we need to get the site ID -$resp = $ua->get($url . '/api/self/sites'); -die $resp->message . "\n" if $resp->is_error; foreach (@{from_json($resp->decoded_content)->{data}}){ if ($_->{name} eq $site || $_->{desc} eq $site){ $site_id = $_->{_id}; diff --git a/zabbix_scripts/disco_unifi b/zabbix_scripts/disco_unifi index a84585c..3471df6 100755 --- a/zabbix_scripts/disco_unifi +++ b/zabbix_scripts/disco_unifi @@ -5,8 +5,11 @@ use warnings; use JSON; use Getopt::Long; use LWP::UserAgent; +use HTTP::Cookies; use Data::Dumper; +umask 077; + my $user = 'zabbix'; my $pass = 'secret'; my $site = 'default'; @@ -32,21 +35,32 @@ GetOptions ( $type = 'all' if ($type eq ''); my $site_id; my $resp; +my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<); +my $cj = HTTP::Cookies->new( + file => "/tmp/.unifi_$username.txt", + autosave => 1, + ignore_discard => 1 +); my $ua = LWP::UserAgent->new( - ssl_opts => { verify_hostname => 0 }, - cookie_jar => {} + ssl_opts => { verify_hostname => 0 }, + cookie_jar => $cj ); -# Login on the API -$resp = $ua->post( - $url . '/api/login', - Content => to_json({ username => $user, password => $pass }), - Content_Type => 'application/json;charset=UTF-8' -); -die "Login failed: " . $resp->message . "\n" if $resp->is_error; -# Now, we need to get the site ID +# Check if we need to login $resp = $ua->get($url . '/api/self/sites'); -die $resp->message . "\n" if $resp->is_error; + +if ($resp->is_error){ + # Login on the API + $resp = $ua->post( + $url . '/api/login', + Content => to_json({ username => $user, password => $pass }), + Content_Type => 'application/json;charset=UTF-8' + ); + die "Login failed: " . $resp->message . "\n" if $resp->is_error; + $resp = $ua->get($url . '/api/self/sites'); + die $resp->message . "\n" if $resp->is_error; +} + foreach (@{from_json($resp->decoded_content)->{data}}){ if ($_->{name} eq $site || $_->{desc} eq $site){ $site_id = $_->{_id};