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:
@@ -24,12 +24,13 @@ package com.threerings.presents.server;
|
||||
import com.threerings.util.Name;
|
||||
|
||||
import com.threerings.presents.net.AuthRequest;
|
||||
import com.threerings.presents.net.Credentials;
|
||||
|
||||
/**
|
||||
* Used to determine what type of {@link PresentsSession} to use to manage an authenticated client
|
||||
* as well the type of {@link ClientResolver} to use when resolving clients' runtime data.
|
||||
*/
|
||||
public interface SessionFactory
|
||||
public abstract class SessionFactory
|
||||
{
|
||||
/** The default client factory. */
|
||||
public static SessionFactory DEFAULT = new SessionFactory() {
|
||||
@@ -42,14 +43,35 @@ public interface SessionFactory
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the {@link PresentsSession} derived class to use for the session that authenticated
|
||||
* with the supplied request.
|
||||
* Creates a session factory that handles clients with the supplied credentials and
|
||||
* authentication name.
|
||||
*/
|
||||
Class<? extends PresentsSession> getSessionClass (AuthRequest areq);
|
||||
public static SessionFactory newSessionFactory (
|
||||
final Class<? extends Credentials> credsClass,
|
||||
final Class<? extends PresentsSession> sessionClass,
|
||||
final Class<? extends Name> nameClass,
|
||||
final Class<? extends ClientResolver> resolverClass)
|
||||
{
|
||||
return new SessionFactory() {
|
||||
public Class<? extends PresentsSession> getSessionClass (AuthRequest areq) {
|
||||
return credsClass.isInstance(areq.getCredentials()) ? sessionClass : null;
|
||||
}
|
||||
public Class <? extends ClientResolver> getClientResolverClass (Name username) {
|
||||
return nameClass.isInstance(username) ? resolverClass : null;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link PresentsSession} derived class to use for the session that authenticated
|
||||
* with the supplied request or null if this factory does not handle sessions of the supplied
|
||||
* type.
|
||||
*/
|
||||
public abstract Class<? extends PresentsSession> getSessionClass (AuthRequest areq);
|
||||
|
||||
/**
|
||||
* Returns the {@link ClientResolver} derived class to use to resolve a client with the
|
||||
* specified username.
|
||||
* specified username or null if this factory does not handle clients of the supplied type.
|
||||
*/
|
||||
Class <? extends ClientResolver> getClientResolverClass (Name username);
|
||||
public abstract Class <? extends ClientResolver> getClientResolverClass (Name username);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user