001    /*
002     * CDDL HEADER START
003     *
004     * The contents of this file are subject to the terms of the
005     * Common Development and Distribution License, Version 1.0 only
006     * (the "License").  You may not use this file except in compliance
007     * with the License.
008     *
009     * You can obtain a copy of the license at
010     * docs/licenses/cddl.txt
011     * or http://www.opensource.org/licenses/cddl1.php.
012     * See the License for the specific language governing permissions
013     * and limitations under the License.
014     *
015     * When distributing Covered Code, include this CDDL HEADER in each
016     * file and include the License file at
017     * docs/licenses/cddl.txt.  If applicable,
018     * add the following below this CDDL HEADER, with the fields enclosed
019     * by brackets "[]" replaced with your own identifying information:
020     *      Portions Copyright [yyyy] [name of copyright owner]
021     *
022     * CDDL HEADER END
023     *
024     *
025     *      Copyright 2011-2014 UnboundID Corp.
026     */
027    
028    package com.unboundid.directory.sdk.http.types;
029    
030    import javax.servlet.http.HttpServletRequest;
031    
032    /**
033     * A {@link com.unboundid.directory.sdk.http.types.AuthenticationRequest}
034     * implementation where the user's credentials is a simple password.
035     */
036    public class UsernamePasswordAuthenticationRequest
037        implements AuthenticationRequest
038    {
039      private final String principal;
040      private final String credentials;
041      private final HttpServletRequest httpServletRequest;
042    
043      /**
044       * Constructs a new UsernamePasswordAuthenticationRequest with the provided
045       * information.
046       *
047       * @param principal The user resource to authentication against.
048       * @param credentials The password credential provided by the user.
049       * @param httpServletRequest The httpServletRequest that initiated the
050       *                           authentication request.
051       */
052      public UsernamePasswordAuthenticationRequest(
053          final String principal, final String credentials,
054          final HttpServletRequest httpServletRequest)
055      {
056        this.credentials = credentials;
057        this.principal = principal;
058        this.httpServletRequest = httpServletRequest;
059      }
060    
061      /**
062       * Retrieves the password credential provided by the user.
063       *
064       * @return The password credential provided by the user.
065       */
066      public String getCredentials()
067      {
068        return credentials;
069      }
070    
071      /**
072       * Retrieves the username provided by the user.
073       *
074       * @return The username provided by the user.
075       */
076      public String getPrincipal()
077      {
078        return principal;
079      }
080    
081      /**
082       * {@inheritDoc}
083       */
084      public HttpServletRequest getHttpServletRequest()
085      {
086        return httpServletRequest;
087      }
088    
089      /**
090       * {@inheritDoc}
091       */
092      @Override
093      public boolean equals(final Object o)
094      {
095        if (this == o)
096        {
097          return true;
098        }
099        if (!(o instanceof UsernamePasswordAuthenticationRequest))
100        {
101          return false;
102        }
103    
104        UsernamePasswordAuthenticationRequest that =
105            (UsernamePasswordAuthenticationRequest) o;
106    
107        if (!credentials.equals(that.credentials))
108        {
109          return false;
110        }
111        if (httpServletRequest != null ?
112            !httpServletRequest.equals(that.httpServletRequest) :
113            that.httpServletRequest != null)
114        {
115          return false;
116        }
117        if (!principal.equals(that.principal))
118        {
119          return false;
120        }
121    
122        return true;
123      }
124    
125      /**
126       * {@inheritDoc}
127       */
128      @Override
129      public int hashCode()
130      {
131        int result = principal.hashCode();
132        result = 31 * result + credentials.hashCode();
133        result = 31 * result + (httpServletRequest != null ?
134            httpServletRequest.hashCode() : 0);
135        return result;
136      }
137    
138      /**
139       * {@inheritDoc}
140       */
141      @Override
142      public String toString()
143      {
144        final StringBuilder sb =
145            new StringBuilder("UsernamePasswordAuthenticationRequest{");
146        sb.append("principal='").append(principal).append('\'');
147        sb.append(", credentials='****'");
148        sb.append(", httpServletRequest=").append(httpServletRequest);
149        sb.append('}');
150        return sb.toString();
151      }
152    }