View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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   * Call Context handler that handles basic authentication.
35   */
36  public class BasicAuthCallContextHandler implements CallContextHandler, Serializable
37  {
38      private static final long serialVersionUID = 1L;
39  
40      /**
41       * Constructor.
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              // extract user and password and add them to map
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  }