#!/usr/bin/perl ################################################################################ # Mandriva Online # # # # Copyright (C) 2009 Mandriva # # # # Thierry Vignaud # # # # This program is free software; you can redistribute it and/or modify # # it under the terms of the GNU General Public License Version 2 as # # published by the Free Software Foundation. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program; if not, write to the Free Software # # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ################################################################################ use strict; use lib qw(/usr/lib/libDrakX /usr/lib/libDrakX/drakfirsttime); use standalone; # for explanations use common; use run_program; use feature 'state'; BEGIN { unshift @::textdomains, 'mdkonline' } use mygtk2 qw(gtknew); #- do not import gtkadd which conflicts with ugtk2 version use ugtk2 qw(:all); use urpm::cfg; use mdkonline; use mdkapplet_gui; use interactive; use XML::Simple; use URI::Escape; use LWP::UserAgent; use HTTP::Request::Common; use HTTP::Request; my $version; foreach my $opt (@ARGV) { if ($opt =~ /--(rpm-root|urpmi-root)=(.*)/) { $::rpmdrake_options{$1}[0] = $2; } else { $version = $opt; } } $version or die "usage: mdkapplet-enterprise-update-helper \n"; get_restricted_authentication(); ugtk2::exit(0); sub get_restricted_authentication() { my $w = ugtk2->new(N("Adding an additional package medium"), width => $width + 20); my ($password_w, $email_w, $password); $password_w = gtknew('Entry'); $password_w->set_visibility(0); # WARNING: WON'T WORK IF EVER EMBEDDED $w->{real_window}->signal_connect(destroy => sub { $password = $password_w->get_text }); require interactive::gtk; my $res = fill_n_run_portable_dialog( $w, [ get_banner(N("Adding an additional package medium")), gtknew('Label_Left', text => N("Please fill in your account ID to add an additional package medium"), @common), gtknew('HButtonBox', layout => 'start', children_tight => [ interactive::gtk::add_padding( new_link_button('https://my.mandriva.com/info', N("More information on your user account"))) ]), gtknew('Table', col_spacings => 5, row_spacings => 5, children => [ [ N("Your email"), $email_w = gtknew('Entry') ], [ N("Your password"), $password_w ], ]), gtknew('HButtonBox', layout => 'start', children_tight => [ interactive::gtk::add_padding( new_link_button('https://my.mandriva.com/reset/password/', N("Forgotten password"))) ]), create_okcancel($w, N("Next"), N("Cancel")), ]); my $email = $email_w->get_text; if ($res) { if ($email && $password) { add_enterprise_update_medium($email, $password); } else { interactive->vnew->ask_warn(N("Error"), N("Password and email cannot be empty.")); goto &get_restricted_authentication; } } else { ugtk2::exit(0); } } sub has_mes5_rights { my ($ref) = @_; $ref->{data}{groups}{'es5-prod'} || $ref->{data}{groups}{'es5-demo'}; } my $error; sub add_enterprise_update_medium { my ($email, $password) = @_; my $res = get_from("https://my.mandriva.com/rest/authenticate", [ 'username', $email, 'password', $password, 'return', 'userdata' ]); my $ref = xml2perl($res); if ($ref->{code} != 0) { my $in = interactive->vnew; $in->ask_warn(N("Error"), N("An error occurred") . "\n" . $ref->{message}); goto &get_restricted_authentication; } elsif (!has_mes5_rights($ref)) { no_rights_dialog(); } else { $error = 0; my $arch = urpm::cfg::get_arch(); actually_add_enterprise_update_medium($ref, $password, $arch) or adding_media_failed(); if (!$error) { #interactive->vnew->ask_okcancel(N("Error"), N("An error occurred while adding medium")); my $w = ugtk2->new(N("Successfully added media %s.", 'Update'), grab => 1); $w->_ask_okcancel(N("Successfully added media %s.", 'Update'), N("Ok"), undef); ugtk2::main($w); } } } sub no_rights_dialog() { my $w = ugtk2->new(N("Adding an additional package medium"), width => $width + 20); fill_n_run_portable_dialog( $w, [ get_banner(N("Adding an additional package medium")), gtknew('Label_Left', text => N("Your Mandriva account does not have %s download subscription enabled.", translate_product()), @common), gtknew('HButtonBox', layout => 'start', children_tight => [ interactive::gtk::add_padding( new_link_button('http://www2.mandriva.com/linux/server/', N("More Information"))) ]), create_okcancel($w, N("Close"), undef), ]); } sub adding_media_failed { $error = 1; interactive->vnew->ask_warn(N("Error"), N("An error occurred while adding medium")); goto &get_restricted_authentication; } sub actually_add_enterprise_update_medium { my ($ref, $password, $arch) = @_; $password = uri_escape($password); my @options = ({ sensitive_arguments => 1 }, 'urpmi.addmedia', '--xml-info', 'always'); my $uri = "https://" . uri_escape($ref->{data}{email}) . ":$password\@download.mandriva.com/$version/rpms/$arch/"; run_program::raw(@options, '--update', '--distrib', $uri); }