[PATCH/RFC] add git credential login to remote mediawiki
From: Javier Roucher <jroucher@gmail.com>
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