Revamping/cleanup of how we handle authentication usernames as well as chained

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
This commit is contained in:
Michael Bayne
2009-06-20 00:56:01 +00:00
parent 7d125bec73
commit a1aa2d77ae
35 changed files with 622 additions and 656 deletions
@@ -465,15 +465,13 @@ public class PresentsSession
* Initializes this client instance with the specified username, connection instance and client
* object and begins a client session.
*/
protected void startSession (AuthRequest req, Connection conn, Object authdata)
protected void startSession (Name authname, AuthRequest req, Connection conn, Object authdata)
{
_username = authname;
_areq = req;
_authdata = authdata;
setConnection(conn);
// obtain our starting username
assignStartingUsername();
// resolve our client object before we get fully underway
_clmgr.resolveClientObject(_username, this);
@@ -481,17 +479,6 @@ public class PresentsSession
_sessionStamp = System.currentTimeMillis();
}
/**
* This is factored out to allow derived classes to use a different starting username than the
* one supplied in the user's credentials. Generally one only wants to munge the starting
* username if the user will subsequently choose a "screen name" and it is desirable to avoid
* collision between the authentication user namespace and the screen namespace.
*/
protected void assignStartingUsername ()
{
_username = getCredentials().getUsername();
}
/**
* Called by the client manager when a new connection arrives that authenticates as this
* already established client. This must only be called from the congmr thread.