NTUserPrincipal.java revision 069490a5ca2fd1988d29daf45d892f47ad665115
1076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl/*
294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/auth/NTUserPrincipal.java $
394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy * $Revision: 658430 $
494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy * $Date: 2008-05-20 14:04:27 -0700 (Tue, 20 May 2008) $
594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *
694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy * ====================================================================
794ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *
894ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  Licensed to the Apache Software Foundation (ASF) under one or more
994ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  contributor license agreements.  See the NOTICE file distributed with
1094ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  this work for additional information regarding copyright ownership.
1194ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  The ASF licenses this file to You under the Apache License, Version 2.0
1294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  (the "License"); you may not use this file except in compliance with
1394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  the License.  You may obtain a copy of the License at
1494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *
1594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *      http://www.apache.org/licenses/LICENSE-2.0
1694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *
17867579972d9a1e9e077626de6d6d083e30fea110Terry Jan Reedy *  Unless required by applicable law or agreed to in writing, software
1894ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  distributed under the License is distributed on an "AS IS" BASIS,
1994ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy *  See the License for the specific language governing permissions and
21c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy *  limitations under the License.
22d43ffc9aba8d3a594486d2488bf3e3dfb50a43b2Terry Jan Reedy * ====================================================================
23d43ffc9aba8d3a594486d2488bf3e3dfb50a43b2Terry Jan Reedy *
24d43ffc9aba8d3a594486d2488bf3e3dfb50a43b2Terry Jan Reedy * This software consists of voluntary contributions made by many
2594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy * individuals on behalf of the Apache Software Foundation.  For more
26c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy * information on the Apache Software Foundation, please see
27c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy * <http://www.apache.org/>.
28c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy *
29c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy */
30c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy
31c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedypackage org.apache.http.auth;
3294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
3394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedyimport java.security.Principal;
3494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedyimport java.util.Locale;
3594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
3694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedyimport org.apache.http.util.LangUtils;
3794ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
3894ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy/**  NT (MS Windows specific) user principal used for HTTP authentication
3994ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *
4094ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
4194ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy *
4294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy * @since 4.0
4394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy */
4494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedypublic class NTUserPrincipal implements Principal {
4594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
4694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    private final String username;
4794ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    private final String domain;
4894ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    private final String ntname;
4994ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
5094ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    public NTUserPrincipal(
5194ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            final String domain,
5294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            final String username) {
5394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        super();
5494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        if (username == null) {
5594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            throw new IllegalArgumentException("User name may not be null");
5694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        }
5794ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        this.username = username;
5894ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        if (domain != null) {
5994ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            this.domain = domain.toUpperCase(Locale.ENGLISH);
6094ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        } else {
6194ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            this.domain = null;
6294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        }
6394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        if (this.domain != null && this.domain.length() > 0) {
6494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            StringBuilder buffer = new StringBuilder();
6594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            buffer.append(this.domain);
6694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            buffer.append('/');
6794ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            buffer.append(this.username);
6894ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            this.ntname = buffer.toString();
6994ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        } else {
7094ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy            this.ntname = this.username;
7194ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        }
7294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    }
7394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
7494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    public String getName() {
7594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        return this.ntname;
7694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    }
7794ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
7894ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    public String getDomain() {
7994ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        return this.domain;
8094ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    }
8194ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
8294ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    public String getUsername() {
8394ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy        return this.username;
8494ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    }
8594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy
8694ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    @Override
8794ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    public int hashCode() {
88076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        int hash = LangUtils.HASH_SEED;
89076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        hash = LangUtils.hashCode(hash, this.username);
90076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        hash = LangUtils.hashCode(hash, this.domain);
91076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        return hash;
922bac3b778f0a3efe374334b9694e99ed48431414Terry Jan Reedy    }
936fa5bdc6e85ec48925bc0d856b134f59d01c300fTerry Jan Reedy
946fa5bdc6e85ec48925bc0d856b134f59d01c300fTerry Jan Reedy    @Override
9594ee51ed9ee1df1890b9d2493a64bc484a522da2Terry Jan Reedy    public boolean equals(Object o) {
96076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        if (o == null) return false;
97076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        if (this == o) return true;
98076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        if (o instanceof NTUserPrincipal) {
99076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl            NTUserPrincipal that = (NTUserPrincipal) o;
100c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy            if (LangUtils.equals(this.username, that.username)
101076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl                    && LangUtils.equals(this.domain, that.domain)) {
102076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl                return true;
103076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl            }
104076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        }
105076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl        return false;
106076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl    }
107076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl
108076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl    @Override
109076cbae4b97cfb7764321f92d8506ef38366facaGeorg Brandl    public String toString() {
110c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy        return this.ntname;
111c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy    }
112c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy
113c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy}
114c6a1c02cce3a12683cd951193c8f9ce30d79f6dcTerry Jan Reedy