From: Javier Roucher <jroucher@xxxxxxxxx> This path uses git credential to store the login/password of the mediawiki. --- contrib/mw-to-git/git-remote-mediawiki | 96 ++++++++++++++++++++++++++++------ 1 file changed, 81 insertions(+), 15 deletions(-) diff --git a/contrib/mw-to-git/git-remote-mediawiki b/contrib/mw-to-git/git-remote-mediawiki index c18bfa1..4dcc189 100755 --- a/contrib/mw-to-git/git-remote-mediawiki +++ b/contrib/mw-to-git/git-remote-mediawiki @@ -152,29 +152,95 @@ while (<STDIN>) { ########################## Functions ############################## # MediaWiki API instance, created lazily. +sub run_credential { + my $cre_protocol = ""; + my $cre_host = ""; + my $cre_path = ""; + my $msg = ""; + my $result = ""; + my $op = $_[0]; + + my $parsed = URI->new($url); + $cre_protocol = $parsed->scheme; + $cre_host = $parsed->host; + $cre_path = $parsed->path; + + if ($wiki_login ne "") { + $msg .= "username=$wiki_login\n"; + } + if ($wiki_passwd ne "") { + $msg .= "password=$wiki_passwd\n"; + } + if ($cre_protocol ne "") { + $msg .= "protocol=$cre_protocol\n"; + } + if ($cre_host ne "") { + $msg .= "host=$cre_host\n"; + } + if ($cre_path ne "") { + $msg .= "path=$cre_path\n"; + } + $msg .= "\n"; + + my $key; + my $value; + my $Prog = "git credential $op"; + open2 (*Reader, *Writer, $Prog); + print Writer $msg; + close (Writer); + + if ($op eq "fill") { + while (<Reader>) { + my ($key, $value) = /([^=]*)=(.*)/; + if (not defined $key) { + print STDERR "ERROR receiving response git credential fill\n Reponse: $_\n"; + # exit 1; + } + if ($key eq "username") { + $wiki_login = $value; + } + if ($key eq "password") { + $wiki_passwd = $value; + } + } + } else { + while (<Reader>) { + print STDERR "\nERROR while running git credential $op:\n$_"; + } + } +} + my $mediawiki; +sub ask_credential { + run_credential("fill"); + + if (!$mediawiki->login( { + lgname => $wiki_login, + lgpassword => $wiki_passwd, + lgdomain => $wiki_domain, + } )) { + print STDERR "Failed to log in mediawiki user: $wiki_login\n on: $url\n"; + print STDERR "URL: $wiki_domain $url\n"; + print STDERR "(error " . + $mediawiki->{error}->{code} . ': ' . + $mediawiki->{error}->{details} . ")\n"; + run_credential("reject"); +# exit 1; + } else { + print STDERR "Logged in with user: $wiki_login.\n"; + run_credential("approve"); + } +} + sub mw_connect_maybe { + if ($mediawiki) { return; } $mediawiki = MediaWiki::API->new; $mediawiki->{config}->{api_url} = "$url/api.php"; - if ($wiki_login) { - if (!$mediawiki->login({ - lgname => $wiki_login, - lgpassword => $wiki_passwd, - lgdomain => $wiki_domain, - })) { - print STDERR "Failed to log in mediawiki user \"$wiki_login\" on $url\n"; - print STDERR "(error " . - $mediawiki->{error}->{code} . ': ' . - $mediawiki->{error}->{details} . ")\n"; - exit 1; - } else { - print STDERR "Logged in with user \"$wiki_login\".\n"; - } - } + ask_credential(); } sub get_mw_first_pages { -- 1.7.10.2.573.ged8bfa6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html