1 package org.eclipse.aether.transport.http;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 import org.apache.http.HttpHost;
26 import org.apache.http.auth.AuthScheme;
27 import org.apache.http.client.AuthCache;
28
29
30
31
32
33 final class SharingAuthCache
34 implements AuthCache
35 {
36
37 private final LocalState state;
38
39 private final Map<HttpHost, AuthScheme> authSchemes;
40
41 SharingAuthCache( LocalState state )
42 {
43 this.state = state;
44 authSchemes = new HashMap<>();
45 }
46
47 @SuppressWarnings( "checkstyle:magicnumber" )
48 private static HttpHost toKey( HttpHost host )
49 {
50 if ( host.getPort() <= 0 )
51 {
52 int port = host.getSchemeName().equalsIgnoreCase( "https" ) ? 443 : 80;
53 return new HttpHost( host.getHostName(), port, host.getSchemeName() );
54 }
55 return host;
56 }
57
58 @Override
59 public AuthScheme get( HttpHost host )
60 {
61 host = toKey( host );
62 AuthScheme authScheme = authSchemes.get( host );
63 if ( authScheme == null )
64 {
65 authScheme = state.getAuthScheme( host );
66 authSchemes.put( host, authScheme );
67 }
68 return authScheme;
69 }
70
71 @Override
72 public void put( HttpHost host, AuthScheme authScheme )
73 {
74 if ( authScheme != null )
75 {
76 authSchemes.put( toKey( host ), authScheme );
77 }
78 else
79 {
80 remove( host );
81 }
82 }
83
84 @Override
85 public void remove( HttpHost host )
86 {
87 authSchemes.remove( toKey( host ) );
88 }
89
90 @Override
91 public void clear()
92 {
93 share();
94 authSchemes.clear();
95 }
96
97 private void share()
98 {
99 for ( Map.Entry<HttpHost, AuthScheme> entry : authSchemes.entrySet() )
100 {
101 state.setAuthScheme( entry.getKey(), entry.getValue() );
102 }
103 }
104
105 @Override
106 public String toString()
107 {
108 return authSchemes.toString();
109 }
110
111 }