1# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*- 2# vim: ts=4 sts=4 sw=4: 3package CPAN::HTTP::Credentials; 4use strict; 5use vars qw($USER $PASSWORD $PROXY_USER $PROXY_PASSWORD); 6 7$CPAN::HTTP::Credentials::VERSION = $CPAN::HTTP::Credentials::VERSION = "1.9601"; 8 9sub clear_credentials { 10 clear_non_proxy_credentials(); 11 clear_proxy_credentials(); 12} 13 14sub clear_non_proxy_credentials { 15 undef $USER; 16 undef $PASSWORD; 17} 18 19sub clear_proxy_credentials { 20 undef $PROXY_USER; 21 undef $PROXY_PASSWORD; 22} 23 24sub get_proxy_credentials { 25 my $self = shift; 26 if ($PROXY_USER && $PROXY_PASSWORD) { 27 return ($PROXY_USER, $PROXY_PASSWORD); 28 } 29 if ( defined $CPAN::Config->{proxy_user} 30 && $CPAN::Config->{proxy_user} 31 ) { 32 $PROXY_USER = $CPAN::Config->{proxy_user}; 33 $PROXY_PASSWORD = $CPAN::Config->{proxy_pass} || ""; 34 return ($PROXY_USER, $PROXY_PASSWORD); 35 } 36 my $username_prompt = "\nProxy authentication needed! 37 (Note: to permanently configure username and password run 38 o conf proxy_user your_username 39 o conf proxy_pass your_password 40 )\nUsername:"; 41 ($PROXY_USER, $PROXY_PASSWORD) = 42 _get_username_and_password_from_user($username_prompt); 43 return ($PROXY_USER,$PROXY_PASSWORD); 44} 45 46sub get_non_proxy_credentials { 47 my $self = shift; 48 if ($USER && $PASSWORD) { 49 return ($USER, $PASSWORD); 50 } 51 if ( defined $CPAN::Config->{username} ) { 52 $USER = $CPAN::Config->{username}; 53 $PASSWORD = $CPAN::Config->{password} || ""; 54 return ($USER, $PASSWORD); 55 } 56 my $username_prompt = "\nAuthentication needed! 57 (Note: to permanently configure username and password run 58 o conf username your_username 59 o conf password your_password 60 )\nUsername:"; 61 62 ($USER, $PASSWORD) = 63 _get_username_and_password_from_user($username_prompt); 64 return ($USER,$PASSWORD); 65} 66 67sub _get_username_and_password_from_user { 68 my $username_message = shift; 69 my ($username,$password); 70 71 ExtUtils::MakeMaker->import(qw(prompt)); 72 $username = prompt($username_message); 73 if ($CPAN::META->has_inst("Term::ReadKey")) { 74 Term::ReadKey::ReadMode("noecho"); 75 } 76 else { 77 $CPAN::Frontend->mywarn( 78 "Warning: Term::ReadKey seems not to be available, your password will be echoed to the terminal!\n" 79 ); 80 } 81 $password = prompt("Password:"); 82 83 if ($CPAN::META->has_inst("Term::ReadKey")) { 84 Term::ReadKey::ReadMode("restore"); 85 } 86 $CPAN::Frontend->myprint("\n\n"); 87 return ($username,$password); 88} 89 901; 91 92