1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.server.shared;
20
21 import org.apache.chemistry.opencmis.commons.server.CallContext;
22
23 import org.apache.commons.codec.binary.Base64;
24
25 import java.io.Serializable;
26
27 import java.util.HashMap;
28 import java.util.Map;
29
30 import javax.servlet.http.HttpServletRequest;
31
32
33
34
35
36 public class BasicAuthCallContextHandler implements CallContextHandler, Serializable
37 {
38 private static final long serialVersionUID = 1L;
39
40
41
42
43 public BasicAuthCallContextHandler( )
44 {
45 }
46
47 public Map<String, String> getCallContextMap( HttpServletRequest request )
48 {
49 Map<String, String> result = null;
50
51 String authHeader = request.getHeader( "Authorization" );
52
53 if ( ( authHeader != null ) && ( authHeader.trim( ).toLowerCase( ).startsWith( "basic " ) ) )
54 {
55 int x = authHeader.lastIndexOf( ' ' );
56
57 if ( x == -1 )
58 {
59 return result;
60 }
61
62 String credentials = null;
63
64 try
65 {
66 credentials = new String( Base64.decodeBase64( authHeader.substring( x + 1 ).getBytes( "ISO-8859-1" ) ),
67 "ISO-8859-1" );
68 }
69 catch ( Exception e )
70 {
71 return result;
72 }
73
74 x = credentials.indexOf( ':' );
75
76 if ( x == -1 )
77 {
78 return result;
79 }
80
81
82 result = new HashMap<String, String>( );
83 result.put( CallContext.USERNAME, credentials.substring( 0, x ) );
84 result.put( CallContext.PASSWORD, credentials.substring( x + 1 ) );
85 }
86
87 return result;
88 }
89 }