]> git.proxmox.com Git - pve-manager-legacy.git/commitdiff
fix APIClient and examples
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 17 Jan 2012 08:07:13 +0000 (09:07 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 17 Jan 2012 08:08:19 +0000 (09:08 +0100)
PVE/API2Client.pm
bin/test/example1.pl
bin/test/example2.pl
bin/test/perftest1.pl

index cf998f75bd537caf87c18741428c276e4f283727..296d36ce9afbb2fc13a2b8063a5658116639d667 100755 (executable)
@@ -34,6 +34,13 @@ sub delete {
     return $self->call('DELETE', $path, $param);
 }
 
+sub update_ticket {
+    my ($self, $ticket) = @_;
+
+    my $domain = "$self->{host}.local" unless  $self->{host} =~ /\./;
+    $self->{cookie_jar}->set_cookie(0, 'PVEAuthCookie', $ticket, '/', $domain);
+}
+
 sub call {
     my ($self, $method, $path, $param) = @_;
        
@@ -54,7 +61,7 @@ sub call {
        $uri->scheme($self->{protocol});
        $uri->host($self->{host});
        $uri->port($self->{port});
-       $uri->path('/api2/json/ticket');
+       $uri->path('/api2/json/access/ticket');
 
        my $response = $ua->post($uri, { 
            username => $self->{username},
@@ -63,7 +70,11 @@ sub call {
        if (!$response->is_success) {
            die $response->status_line . "\n";
        }
-       # the auth cookie should be set now
+
+       my $data = from_json($response->decoded_content, {utf8 => 1, allow_nonref => 1});
+
+       $self->update_ticket($data->{data}->{ticket});
+       $self->{csrftoken} = $data->{data}->{CSRFPreventionToken};
     }
 
     my $uri = URI->new();
@@ -75,7 +86,11 @@ sub call {
     # print $ua->{cookie_jar}->as_string;
 
     #print "CALL $method : " .  $uri->as_string() . "\n";
+
+    if ($self->{csrftoken}) {
+       $self->{useragent}->default_header('CSRFPreventionToken' => $self->{csrftoken});
+    }
+
     my $response;
     if ($method eq 'GET') {
        $uri->query_form($param);
@@ -111,6 +126,7 @@ sub new {
 
     my $self = { 
        ticket => $param{ticket},
+       csrftoken => $param{csrftoken},
        username => $param{username},
        password => $param{password},
        host => $param{host} || 'localhost',
@@ -128,11 +144,7 @@ sub new {
 
     $self->{cookie_jar} = HTTP::Cookies->new (ignore_discard => 1);
 
-    if ($self->{ticket}) {
-       my $domain = "$self->{host}.local" unless  $self->{host} =~ /\./;
-       $self->{cookie_jar}->set_cookie(0, 'PVEAuthCookie', $self->{ticket},  
-                                       '/', $domain);
-    }
+    $self->update_ticket($self->{ticket}) if $self->{ticket};
 
     $self->{useragent} = LWP::UserAgent->new(
        cookie_jar => $self->{cookie_jar},
@@ -140,7 +152,7 @@ sub new {
        timeout => $self->{timeout},
        );
 
-     $self->{useragent}->default_header('Accept-Encoding' => 'gzip'); # allow gzip
+    $self->{useragent}->default_header('Accept-Encoding' => 'gzip'); # allow gzip
   
     return $self;
 }
index 45c0501b037314ce47d44915974c933ec45d3751..1bce551477a82387138f32e54306247e36e7deed 100755 (executable)
@@ -11,13 +11,15 @@ use Data::Dumper;
 my $hostname = PVE::INotify::read_file("hostname");
 
 # normally you use username/password,
-# but we can simply create a ticket if we are root
-my $ticket = PVE::AccessControl::assemble_ticket('root');
+# but we can simply create a ticket and CRSF token if we are root
+my $ticket = PVE::AccessControl::assemble_ticket('root@pam');
+my $csrftoken = PVE::AccessControl::assemble_csrf_prevention_token('root@pam');
 
 my $conn = PVE::API2Client->new(
-#    username => 'root',
-#    password => 'yourpassword',
+    #username => 'root@pam',
+    #password => 'yourpassword',
     ticket => $ticket,
+    csrftoken => $csrftoken,
     host => $hostname,
     );
 
index c85301dfd4b7f4ace0835d0f80a32c2d6fba442c..73682428fb0ae18d1ee23d9b45c8755b0de23783 100755 (executable)
@@ -11,13 +11,15 @@ use Data::Dumper;
 my $hostname = PVE::INotify::read_file("hostname");
 
 # normally you use username/password,
-# but we can simply create a ticket if we are root
-my $ticket = PVE::AccessControl::assemble_ticket('root');
+# but we can simply create a ticket and CRSF token if we are root
+my $ticket = PVE::AccessControl::assemble_ticket('root@pam');
+my $csrftoken = PVE::AccessControl::assemble_csrf_prevention_token('root@pam');
 
 my $conn = PVE::API2Client->new(
-    #username => 'root',
+    #username => 'root@pam',
     #password => 'yourpassword',
     ticket => $ticket,
+    csrftoken => $csrftoken,
     host => $hostname,
     );
 
index 502ecb936a5de424a2cd96c708852ca0d4e395b7..83d7f392c9871b6cd5c1ace1707d0b1bdb018b24 100755 (executable)
@@ -12,7 +12,7 @@ my $hostname = PVE::INotify::read_file("hostname");
 
 # normally you use username/password,
 # but we can simply create a ticket if we are root
-my $ticket = PVE::AccessControl::assemble_ticket('root');
+my $ticket = PVE::AccessControl::assemble_ticket('root@pam');
 
 my $wcount = 4;
 my $qcount = 500;
@@ -21,7 +21,7 @@ sub test_rpc {
     my ($host) = @_;
 
     my $conn = PVE::API2Client->new(
-       #username => 'root',
+       #username => 'root@pam',
        #password => 'yourpassword',
        ticket => $ticket,
        host => $host,