MozillaFirefox/mozilla-get-app-id

52 lines
1.1 KiB
Perl

#!/usr/bin/perl -w
use XML::Simple;
my $file = shift || die "Usage: $0 [install.rdf|somefile.xpi]\n";
my $xml;
if ($file =~ /\.xpi$/) {
use Archive::Zip qw/:ERROR_CODES :CONSTANTS/;
my $zip = Archive::Zip->new();
if ( $zip->read($file) != AZ_OK ) {
die "zip file read error\n";
}
my $data = $zip->contents("install.rdf");
die "missing install.rdf in $file\n" unless $data;
$xml = XMLin($data) || die "$!\n";
} elsif ($file =~ /install.rdf/) {
$xml = XMLin($file) || die "$!\n";
} else {
die "unsupported file format\n";
}
my $desc;
for my $tag (qw/RDF:Description Description/) {
if (exists $xml->{$tag}) {
if (ref $xml->{$tag} eq 'ARRAY') {
$desc = $xml->{$tag};
} else {
$desc = [ $xml->{$tag} ];
}
}
}
my $uuid;
my $id;
for my $x (@$desc) {
if ($x->{"em:id"} =~ /{[[:xdigit:]]+-/) {
print STDERR "Warning: multiple uuids!\n" if defined $uuid;
$uuid = $x->{"em:id"};
} elsif ($x->{"em:id"} =~ /@/) {
print STDERR "Warning: multiple ids!\n" if defined $id;
$id = $x->{"em:id"};
}
}
if (defined $id) {
print "$id\n";
} elsif (defined $uuid) {
print "$uuid\n";
} else {
exit 1;
}