package railo.runtime.tag;
import javax.servlet.jsp.tagext.Tag;
import railo.commons.io.res.Resource;
import railo.runtime.exp.PageException;
import railo.runtime.ext.tag.TagImpl;
import railo.runtime.listener.ApplicationContext;
import railo.runtime.security.CredentialImpl;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.scope.Scope;
/**
*
*/
public final class Loginuser extends TagImpl {
private String name;
private String password;
private String[] roles;
@Override
public void release() {
super.release();
name=null;
password=null;
roles=null;
}
/**
* @param name The name to set.
*/
public void setName(String name) {
this.name = name;
}
/**
* @param password The password to set.
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @param oRoles The roles to set.
* @throws PageException
*/
public void setRoles(Object oRoles) throws PageException {
roles=CredentialImpl.toRole(oRoles);
}
@Override
public int doStartTag() throws PageException {
Resource rolesDir = pageContext.getConfig().getConfigDir().getRealResource("roles");
CredentialImpl login = new CredentialImpl(name,password,roles,rolesDir);
pageContext.setRemoteUser(login);
Tag parent=getParent();
while(parent!=null && !(parent instanceof Login)) {
parent=parent.getParent();
}
ApplicationContext appContext = pageContext.getApplicationContext();
if(parent!=null) {
int loginStorage = appContext.getLoginStorage();
String name=Login.getApplicationName(appContext);
if(loginStorage==Scope.SCOPE_SESSION && pageContext.getApplicationContext().isSetSessionManagement())
pageContext.sessionScope().set(KeyImpl.init(name),login.encode());
else {//if(loginStorage==Scope.SCOPE_COOKIE)
pageContext.cookieScope().setCookie(KeyImpl.init(name),login.encode(),
-1,false,"/",Login.getCookieDomain(appContext));
}
}
return SKIP_BODY;
}
@Override
public int doEndTag() {
return EVAL_PAGE;
}
}