a1aa2d77ae
authenticators and chained session factories. We can share a lot more code this way and the implicit requirement that the default authenticator/factory had to be configured before anyone else configured a chanied author/factory is gone. The other big change is that Credentials doesn't require a username (UsernamePasswordCreds inherits that username so most derived classes don't notice any difference). Instead we require that a canonical authentication username be determined and configured in AuthingConnection during the authentication process. This canonical username is then used to resolve the client session and map everything in the client manager. This is pretty much exactly what was going on before except that we were doing it all in an ad hoc way by jamming a new name into Credentials during the authentication process and also doing jiggery pokery in PresentsSession.assignStartingUsername. That all goes away and/or becomes cleaner and more explicit. This is going to impact some Yohoho jiggery pokery, which I will shortly commit a patch for, but we're going to need to test it. Omelets, eggs, etc. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5828 542714f4-19e9-0310-aa3c-eee0fc999fb1
109 lines
3.4 KiB
Java
109 lines
3.4 KiB
Java
//
|
|
// $Id$
|
|
//
|
|
// Narya library - tools for developing networked games
|
|
// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved
|
|
// http://www.threerings.net/code/narya/
|
|
//
|
|
// This library is free software; you can redistribute it and/or modify it
|
|
// under the terms of the GNU Lesser General Public License as published
|
|
// by the Free Software Foundation; either version 2.1 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this library; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
package com.threerings.presents.server.net;
|
|
|
|
import com.threerings.util.Name;
|
|
|
|
import com.threerings.presents.net.AuthRequest;
|
|
import com.threerings.presents.net.AuthResponse;
|
|
import com.threerings.presents.net.Message;
|
|
|
|
import static com.threerings.presents.Log.log;
|
|
|
|
/**
|
|
* The authing connection manages the client connection until authentication has completed (for
|
|
* better or for worse).
|
|
*/
|
|
public class AuthingConnection extends Connection
|
|
{
|
|
public AuthingConnection ()
|
|
{
|
|
setMessageHandler(new MessageHandler() {
|
|
public void handleMessage (Message msg) {
|
|
try {
|
|
// keep a handle on our auth request
|
|
_authreq = (AuthRequest)msg;
|
|
// post ourselves for processing by the authmgr
|
|
_cmgr.authenticateConnection(AuthingConnection.this);
|
|
} catch (ClassCastException cce) {
|
|
log.warning("Received non-authreq message during authentication process",
|
|
"conn", AuthingConnection.this, "msg", msg);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Returns a reference to the auth request currently being processed.
|
|
*/
|
|
public AuthRequest getAuthRequest ()
|
|
{
|
|
return _authreq;
|
|
}
|
|
|
|
/**
|
|
* Returns the auth response delivered to the client (only valid after the auth request has
|
|
* been processed.
|
|
*/
|
|
public AuthResponse getAuthResponse ()
|
|
{
|
|
return _authrsp;
|
|
}
|
|
|
|
/**
|
|
* Stores a reference to the auth response delivered to this connection. This is called by the
|
|
* auth manager after delivering the auth response to the client.
|
|
*/
|
|
public void setAuthResponse (AuthResponse authrsp)
|
|
{
|
|
_authrsp = authrsp;
|
|
}
|
|
|
|
/**
|
|
* Returns the username that uniquely identifies this authenticated session. This will be used
|
|
* to map Name -> PresentsSession in the ClientManager and used elsewhere.
|
|
*/
|
|
public Name getAuthName ()
|
|
{
|
|
return _authname;
|
|
}
|
|
|
|
/**
|
|
* During the authentication process, the authenticator must establish the client's
|
|
* authentication username and configure it via this method.
|
|
*/
|
|
public void setAuthName (Name authname)
|
|
{
|
|
_authname = authname;
|
|
}
|
|
|
|
@Override
|
|
public String toString ()
|
|
{
|
|
return "[mode=AUTHING, addr=" + getInetAddress() + "]";
|
|
}
|
|
|
|
protected AuthRequest _authreq;
|
|
protected AuthResponse _authrsp;
|
|
protected Name _authname;
|
|
}
|