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