1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.net;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An implementation of this class is able to obtain authentication information
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for a connection in several ways. For this purpose it has to set the default
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * authenticator which extends {@code Authenticator} by {@code
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * setDefault(Authenticator a)}. Then it should override {@code
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getPasswordAuthentication()} which dictates how the authentication info is
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * obtained. Usually, it prompts the user for the required input.
27f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #setDefault
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getPasswordAuthentication
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class Authenticator {
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // the default authenticator that needs to be set
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Authenticator thisAuthenticator;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String host;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private InetAddress addr;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private int port;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String protocol;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String prompt;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String scheme;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private URL url;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private RequestorType rt;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the collected username and password for authorization. The
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * subclass has to override this method to return a value different to the
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * default which is {@code null}.
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns {@code null} by default.
51f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return collected password authentication data.
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected PasswordAuthentication getPasswordAuthentication() {
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return null;
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the port of the connection that requests authorization.
60f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return port of the connection.
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected final int getRequestingPort() {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this.port;
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the address of the connection that requests authorization or
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code null} if unknown.
70f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return address of the connection.
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected final InetAddress getRequestingSite() {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this.addr;
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the realm (prompt string) of the connection that requests
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * authorization.
80f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return prompt string of the connection.
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected final String getRequestingPrompt() {
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this.prompt;
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the protocol of the connection that requests authorization.
89f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return protocol of the connection.
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected final String getRequestingProtocol() {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this.protocol;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the scheme of the connection that requests authorization, for
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * example HTTP Basic Authentication.
99f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return scheme of the connection.
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected final String getRequestingScheme() {
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this.scheme;
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
10787548e8585334658c3ee89050ec917a10ca35e5aElliott Hughes     * Invokes the methods of the registered
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * authenticator to get the authentication info.
109f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return password authentication info or {@code null} if no authenticator
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         exists.
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rAddr
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            address of the connection that requests authentication.
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rPort
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            port of the connection that requests authentication.
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rProtocol
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            protocol of the connection that requests authentication.
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rPrompt
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            realm of the connection that requests authentication.
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rScheme
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            scheme of the connection that requests authentication.
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static synchronized PasswordAuthentication requestPasswordAuthentication(
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            InetAddress rAddr, int rPort, String rProtocol, String rPrompt,
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String rScheme) {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (thisAuthenticator == null) {
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // set the requester info so it knows what it is requesting
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // authentication for
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.addr = rAddr;
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.port = rPort;
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.protocol = rProtocol;
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.prompt = rPrompt;
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.scheme = rScheme;
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.rt = RequestorType.SERVER;
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // returns the authentication info obtained by the registered
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Authenticator
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return thisAuthenticator.getPasswordAuthentication();
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets {@code a} as the default authenticator. It will be called whenever
14587548e8585334658c3ee89050ec917a10ca35e5aElliott Hughes     * the realm that the URL is pointing to requires authorization.
146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param a
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            authenticator which has to be set as default.
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static void setDefault(Authenticator a) {
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator = a;
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
15587548e8585334658c3ee89050ec917a10ca35e5aElliott Hughes     * Invokes the methods of the registered
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * authenticator to get the authentication info.
157f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return password authentication info or {@code null} if no authenticator
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         exists.
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rHost
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            host name of the connection that requests authentication.
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rAddr
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            address of the connection that requests authentication.
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rPort
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            port of the connection that requests authentication.
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rProtocol
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            protocol of the connection that requests authentication.
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rPrompt
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            realm of the connection that requests authentication.
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rScheme
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            scheme of the connection that requests authentication.
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static synchronized PasswordAuthentication requestPasswordAuthentication(
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String rHost, InetAddress rAddr, int rPort, String rProtocol,
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String rPrompt, String rScheme) {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (thisAuthenticator == null) {
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // set the requester info so it knows what it is requesting
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // authentication for
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.host = rHost;
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.addr = rAddr;
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.port = rPort;
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.protocol = rProtocol;
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.prompt = rPrompt;
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.scheme = rScheme;
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.rt = RequestorType.SERVER;
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // returns the authentication info obtained by the registered
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Authenticator
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return thisAuthenticator.getPasswordAuthentication();
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the host name of the connection that requests authentication or
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code null} if unknown.
197f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return name of the requesting host or {@code null}.
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected final String getRequestingHost() {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return host;
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
20587548e8585334658c3ee89050ec917a10ca35e5aElliott Hughes     * Invokes the methods of the registered
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * authenticator to get the authentication info.
207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return password authentication info or {@code null} if no authenticator
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         exists.
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rHost
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            host name of the connection that requests authentication.
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rAddr
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            address of the connection that requests authentication.
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rPort
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            port of the connection that requests authentication.
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rProtocol
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            protocol of the connection that requests authentication.
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rPrompt
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            realm of the connection that requests authentication.
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rScheme
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            scheme of the connection that requests authentication.
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rURL
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            url of the connection that requests authentication.
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param reqType
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            requestor type of the connection that requests authentication.
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static PasswordAuthentication requestPasswordAuthentication(
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String rHost, InetAddress rAddr, int rPort, String rProtocol,
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String rPrompt, String rScheme, URL rURL,
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Authenticator.RequestorType reqType) {
231b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes        if (thisAuthenticator == null) {
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // sets the requester info so it knows what it is requesting
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // authentication for
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.host = rHost;
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.addr = rAddr;
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.port = rPort;
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.protocol = rProtocol;
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.prompt = rPrompt;
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.scheme = rScheme;
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.url = rURL;
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        thisAuthenticator.rt = reqType;
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // returns the authentication info obtained by the registered
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Authenticator
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return thisAuthenticator.getPasswordAuthentication();
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the URL of the authentication request.
253f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return authentication request url.
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected URL getRequestingURL() {
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return url;
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the type of this request, it can be {@code PROXY} or {@code SERVER}.
262f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return RequestorType of the authentication request.
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected Authenticator.RequestorType getRequestorType() {
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return rt;
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Enumeration class for the origin of the authentication request.
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public enum RequestorType {
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Type of proxy server
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PROXY,
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Type of origin server
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SERVER
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
285