From: Javier Roucher <jroucher@xxxxxxxxx> This path uses git credential to store the login/password of the mediawiki. Signed-off-by: Pavel Volek <Pavel.Volek@xxxxxxxxxxxxxxx> Signed-off-by: NGUYEN Kim Thuat <Kim-Thuat.Nguyen@xxxxxxxxxxxxxxx> Signed-off-by: ROUCHER IGLESIAS Javier <roucherj@xxxxxxxxxxxxxxx> Signed-off-by: Matthieu Moy <Matthieu.Moy@xxxxxxx> --- contrib/mw-to-git/git-remote-mediawiki | 107 +++++++++++++++++++++++++++++---- 1 file changed, 95 insertions(+), 12 deletions(-) diff --git a/contrib/mw-to-git/git-remote-mediawiki b/contrib/mw-to-git/git-remote-mediawiki index c18bfa1..4b14d78 100755 --- a/contrib/mw-to-git/git-remote-mediawiki +++ b/contrib/mw-to-git/git-remote-mediawiki @@ -152,28 +152,111 @@ 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]; + if (scalar(@_) == 2) { + if ($_[1] eq ("store" || "cache")) { + run_git("config credential.helper \'$_[1]\'"); + } else { + print STDERR "ERROR: run_credential (fill|approve|reject) [store|cache]\n"; + exit 1; + } + } + 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) = /([^=]*)=(.*)/; + # error if key undef + if (not defined $key) { + print STDERR "ERROR reciving reponse git credential fill\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_login { + run_credential("fill","store"); + + 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 "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"; + if (!$wiki_passwd) { + #user knows, password not. + ask_login(); } + } else { + #user or password not knows + ask_login(); } } -- 1.7.11.rc2.9.ge2c5c96.dirty -- 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