103928aee4356845252ac6b662d5c72c29903813eJake Slack//
203928aee4356845252ac6b662d5c72c29903813eJake Slack//  ========================================================================
303928aee4356845252ac6b662d5c72c29903813eJake Slack//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
403928aee4356845252ac6b662d5c72c29903813eJake Slack//  ------------------------------------------------------------------------
503928aee4356845252ac6b662d5c72c29903813eJake Slack//  All rights reserved. This program and the accompanying materials
603928aee4356845252ac6b662d5c72c29903813eJake Slack//  are made available under the terms of the Eclipse Public License v1.0
703928aee4356845252ac6b662d5c72c29903813eJake Slack//  and Apache License v2.0 which accompanies this distribution.
803928aee4356845252ac6b662d5c72c29903813eJake Slack//
903928aee4356845252ac6b662d5c72c29903813eJake Slack//      The Eclipse Public License is available at
1003928aee4356845252ac6b662d5c72c29903813eJake Slack//      http://www.eclipse.org/legal/epl-v10.html
1103928aee4356845252ac6b662d5c72c29903813eJake Slack//
1203928aee4356845252ac6b662d5c72c29903813eJake Slack//      The Apache License v2.0 is available at
1303928aee4356845252ac6b662d5c72c29903813eJake Slack//      http://www.opensource.org/licenses/apache2.0.php
1403928aee4356845252ac6b662d5c72c29903813eJake Slack//
1503928aee4356845252ac6b662d5c72c29903813eJake Slack//  You may elect to redistribute this code under either of these licenses.
1603928aee4356845252ac6b662d5c72c29903813eJake Slack//  ========================================================================
1703928aee4356845252ac6b662d5c72c29903813eJake Slack//
1803928aee4356845252ac6b662d5c72c29903813eJake Slack
1903928aee4356845252ac6b662d5c72c29903813eJake Slackpackage org.eclipse.jetty.security;
2003928aee4356845252ac6b662d5c72c29903813eJake Slack
2103928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.security.Principal;
2203928aee4356845252ac6b662d5c72c29903813eJake Slack
2303928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.security.B64Code;
2403928aee4356845252ac6b662d5c72c29903813eJake Slack
2503928aee4356845252ac6b662d5c72c29903813eJake Slackpublic class SpnegoUserPrincipal implements Principal
2603928aee4356845252ac6b662d5c72c29903813eJake Slack{
2703928aee4356845252ac6b662d5c72c29903813eJake Slack    private final String _name;
2803928aee4356845252ac6b662d5c72c29903813eJake Slack    private byte[] _token;
2903928aee4356845252ac6b662d5c72c29903813eJake Slack    private String _encodedToken;
3003928aee4356845252ac6b662d5c72c29903813eJake Slack
3103928aee4356845252ac6b662d5c72c29903813eJake Slack    public SpnegoUserPrincipal( String name, String encodedToken )
3203928aee4356845252ac6b662d5c72c29903813eJake Slack    {
3303928aee4356845252ac6b662d5c72c29903813eJake Slack        _name = name;
3403928aee4356845252ac6b662d5c72c29903813eJake Slack        _encodedToken = encodedToken;
3503928aee4356845252ac6b662d5c72c29903813eJake Slack    }
3603928aee4356845252ac6b662d5c72c29903813eJake Slack
3703928aee4356845252ac6b662d5c72c29903813eJake Slack    public SpnegoUserPrincipal( String name, byte[] token )
3803928aee4356845252ac6b662d5c72c29903813eJake Slack    {
3903928aee4356845252ac6b662d5c72c29903813eJake Slack        _name = name;
4003928aee4356845252ac6b662d5c72c29903813eJake Slack        _token = token;
4103928aee4356845252ac6b662d5c72c29903813eJake Slack    }
4203928aee4356845252ac6b662d5c72c29903813eJake Slack
4303928aee4356845252ac6b662d5c72c29903813eJake Slack    public String getName()
4403928aee4356845252ac6b662d5c72c29903813eJake Slack    {
4503928aee4356845252ac6b662d5c72c29903813eJake Slack        return _name;
4603928aee4356845252ac6b662d5c72c29903813eJake Slack    }
4703928aee4356845252ac6b662d5c72c29903813eJake Slack
4803928aee4356845252ac6b662d5c72c29903813eJake Slack    public byte[] getToken()
4903928aee4356845252ac6b662d5c72c29903813eJake Slack    {
5003928aee4356845252ac6b662d5c72c29903813eJake Slack        if ( _token == null )
5103928aee4356845252ac6b662d5c72c29903813eJake Slack        {
5203928aee4356845252ac6b662d5c72c29903813eJake Slack            _token = B64Code.decode(_encodedToken);
5303928aee4356845252ac6b662d5c72c29903813eJake Slack        }
5403928aee4356845252ac6b662d5c72c29903813eJake Slack        return _token;
5503928aee4356845252ac6b662d5c72c29903813eJake Slack    }
5603928aee4356845252ac6b662d5c72c29903813eJake Slack
5703928aee4356845252ac6b662d5c72c29903813eJake Slack    public String getEncodedToken()
5803928aee4356845252ac6b662d5c72c29903813eJake Slack    {
5903928aee4356845252ac6b662d5c72c29903813eJake Slack        if ( _encodedToken == null )
6003928aee4356845252ac6b662d5c72c29903813eJake Slack        {
6103928aee4356845252ac6b662d5c72c29903813eJake Slack            _encodedToken = new String(B64Code.encode(_token,true));
6203928aee4356845252ac6b662d5c72c29903813eJake Slack        }
6303928aee4356845252ac6b662d5c72c29903813eJake Slack        return _encodedToken;
6403928aee4356845252ac6b662d5c72c29903813eJake Slack    }
6503928aee4356845252ac6b662d5c72c29903813eJake Slack}
66