[PATCH v2] add git credential login to remote mediawiki

Subsystems: the rest

STALE3715d

3 messages, 3 authors, 2016-06-15 · open the first message on its own page

[PATCH v2] add git credential login to remote mediawiki

From: <hidden>
Date: 2016-06-15 22:54:02

From: Javier Roucher <redacted>

This path uses git credential to store the login/password of the mediawiki.

Changes in the version2 vs version1:
· Correction of the name of the PATCH v2 vs PATCH_v1
· Code style correction
. Code correction, now is user who defines the helper how wants to use


If i miss some correction, please remember me. Thanks.

Adding to the next patch, version3:
· Tests files

Signed-off-by: Pavel Volek <redacted>
Signed-off-by: NGUYEN Kim Thuat <redacted>
Signed-off-by: ROUCHER IGLESIAS Javier <redacted>
Signed-off-by: Matthieu Moy <redacted>

---
 contrib/mw-to-git/git-remote-mediawiki | 103 +++++++++++++++++++++++++++++----
 1 file changed, 92 insertions(+), 11 deletions(-)
diff --git a/contrib/mw-to-git/git-remote-mediawiki b/contrib/mw-to-git/git-remote-mediawiki
index c18bfa1..09ec0f0 100755
--- a/contrib/mw-to-git/git-remote-mediawiki
+++ b/contrib/mw-to-git/git-remote-mediawiki
@@ -154,26 +154,107 @@ while (<STDIN>) {
 # MediaWiki API instance, created lazily.
 my $mediawiki;
 
+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) = /([^=]*)=(.*)/;
+			# 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");
+
+	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;
+		if (!$wiki_passwd) {
+			#user knows, password not.
+			ask_login();
 		} else {
-			print STDERR "Logged in with user \"$wiki_login\".\n";
+			#user and password knows.
+			ask_login();
 		}
+	} else 	{
+		#user or password not knows
+		ask_login();
 	}
 }
 
-- 
1.7.11.rc2.4.gfbe8a84.dirty

Re: [PATCH v2] add git credential login to remote mediawiki

From: Simon Perrat <hidden>
Date: 2016-06-15 22:54:03

2012/6/11 [off-list ref]
+       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";
rec*eiving re*sponse

+sub ask_login {
+       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\" on $url\n";
Is there a reason for escaping $wiki_login alone ?
+                       print STDERR "URL:$wiki_domain $url\n";
Space after :
+                       print STDERR "(error " .
+                           $mediawiki->{error}->{code} . ': ' .
+                           $mediawiki->{error}->{details} . ")\n";
Broken indentation
+               if (!$wiki_passwd) {
+                       #user knows, password not.
+                       ask_login();
know*n (other instances below)
and don't forget space after # ;)


Best regards.

Re: [PATCH v2] add git credential login to remote mediawiki

From: roucherj <hidden>
Date: 2016-06-15 22:54:03

On Tue, 12 Jun 2012 10:44:40 +0200, Simon Perrat wrote:
2012/6/11 [off-list ref]
quoted
+       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";
rec*eiving re*sponse
Changed it
quoted
+sub ask_login {
+       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\" on $url\n";
Is there a reason for escaping $wiki_login alone ?
Ok, i have changed the message now there is no quotes
quoted
+                       print STDERR "URL:$wiki_domain $url\n";
Space after :
Space added
quoted
+                       print STDERR "(error " .
+                           $mediawiki->{error}->{code} . ': ' .
+                           $mediawiki->{error}->{details} . ")\n";
Broken indentation
indentation changed
quoted
+               if (!$wiki_passwd) {
+                       #user knows, password not.
+                       ask_login();
know*n (other instances below)
and don't forget space after # ;)


Best regards.
Space added


Thanks
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help