Commit 031df250 by Antti Tönkyrä

Add logincontext to localcontextholder

1 parent 81b321b0
...@@ -3,6 +3,9 @@ package fi.insomnia.bortal.clientutils; ...@@ -3,6 +3,9 @@ package fi.insomnia.bortal.clientutils;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -15,6 +18,8 @@ public class BortalLocalContextHolder { ...@@ -15,6 +18,8 @@ public class BortalLocalContextHolder {
private String hostname; private String hostname;
private boolean ssl = false; private boolean ssl = false;
private Integer hostnameId; private Integer hostnameId;
private LoginContext loginContext;
private final Map<IAppPermission, Boolean> rightcache = new HashMap<IAppPermission, Boolean>(); private final Map<IAppPermission, Boolean> rightcache = new HashMap<IAppPermission, Boolean>();
...@@ -30,6 +35,7 @@ public class BortalLocalContextHolder { ...@@ -30,6 +35,7 @@ public class BortalLocalContextHolder {
super(); super();
this.hostname = old.hostname; this.hostname = old.hostname;
this.ssl = old.ssl; this.ssl = old.ssl;
this.loginContext = old.loginContext;
} }
public static void setHostname(String hostname) { public static void setHostname(String hostname) {
...@@ -111,4 +117,31 @@ public class BortalLocalContextHolder { ...@@ -111,4 +117,31 @@ public class BortalLocalContextHolder {
} }
THREAD_WITH_CONTEXT.set(new BortalLocalContextHolder(contextHolder)); THREAD_WITH_CONTEXT.set(new BortalLocalContextHolder(contextHolder));
} }
public void setLoginContext(LoginContext loginContext) {
this.loginContext = loginContext;
}
public LoginContext getLoginContext() {
return loginContext;
}
public boolean executeLogin() {
try {
this.loginContext.login();
System.err.println("execute login");
return true;
} catch (LoginException e) {
return false;
}
}
public void executeLogout() {
try {
this.loginContext.logout();
System.err.println("execute logout");
} catch(Exception e) {
}
}
} }
\ No newline at end of file
...@@ -6,6 +6,10 @@ import java.io.InputStreamReader; ...@@ -6,6 +6,10 @@ import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.HashMap;
import javax.annotation.PostConstruct;
import javax.security.auth.login.LoginException;
import org.apache.sshd.server.Command; import org.apache.sshd.server.Command;
import org.apache.sshd.server.Environment; import org.apache.sshd.server.Environment;
...@@ -14,20 +18,29 @@ import org.slf4j.Logger; ...@@ -14,20 +18,29 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder; import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.cmdline.Hello;
import fi.insomnia.bortal.cmdline.ICommandlineCommand;
public class BortalCommand implements Command, Runnable { public class BortalCommand implements Command, Runnable {
private static Logger logger = LoggerFactory.getLogger(BortalCommand.class); private static Logger logger = LoggerFactory.getLogger(BortalCommand.class);
private OutputStream errstream; private OutputStreamWriter errstream;
private ExitCallback exitCallback; private ExitCallback exitCallback;
private InputStreamReader instream; private InputStreamReader instream;
private OutputStreamWriter outstream; private OutputStreamWriter outstream;
private BortalLocalContextHolder contextHolder; private BortalLocalContextHolder contextHolder;
private Charset UTF8 = Charset.forName("UTF-8"); private Charset UTF8 = Charset.forName("UTF-8");
private HashMap<String, ICommandlineCommand> commandMap = new HashMap<String, ICommandlineCommand>();
public BortalCommand(BortalLocalContextHolder context) { public BortalCommand(BortalLocalContextHolder context) {
contextHolder = context; contextHolder = context;
} }
public BortalCommand addCommandlineCommand(String name, ICommandlineCommand c) {
this.commandMap.put(name, c);
return this;
}
@Override @Override
public void setInputStream(InputStream in) { public void setInputStream(InputStream in) {
...@@ -42,7 +55,7 @@ public class BortalCommand implements Command, Runnable { ...@@ -42,7 +55,7 @@ public class BortalCommand implements Command, Runnable {
@Override @Override
public void setErrorStream(OutputStream err) { public void setErrorStream(OutputStream err) {
errstream = err; errstream = new OutputStreamWriter(err, UTF8);
} }
@Override @Override
...@@ -59,16 +72,20 @@ public class BortalCommand implements Command, Runnable { ...@@ -59,16 +72,20 @@ public class BortalCommand implements Command, Runnable {
@Override @Override
public void destroy() { public void destroy() {
logger.info("destroying ssh command"); logger.info("destroying ssh command");
} }
@Override @Override
public void run() { public void run() {
BortalLocalContextHolder.copy(contextHolder); BortalLocalContextHolder.copy(contextHolder);
BortalLocalContextHolder.getInstance().executeLogin();
try { try {
logger.info("Created new bortalCommane"); logger.info("Created new bortalCommane");
outstream.write("Hello you..."); outstream.write("Hello you...");
StringBuilder cmdBuilder = new StringBuilder(); StringBuilder cmdBuilder = new StringBuilder();
// prime 0 return value
int returnValue = 0;
while (true) { while (true) {
if (!instream.ready()) { if (!instream.ready()) {
...@@ -78,9 +95,12 @@ public class BortalCommand implements Command, Runnable { ...@@ -78,9 +95,12 @@ public class BortalCommand implements Command, Runnable {
if (inchar == '\n' || inchar == '\r') if (inchar == '\n' || inchar == '\r')
{ {
outstream.write("\r\n# "); outstream.write("\r\n");
outstream.flush();
returnValue = parseCommand(cmdBuilder.toString());
outstream.write("[" + returnValue + "] " + BortalLocalContextHolder.getInstance().loginContext.getSubject().getPrincipals().iterator().next().getName() + " # ");
outstream.flush(); outstream.flush();
parseCommand(cmdBuilder.toString());
cmdBuilder = new StringBuilder(); cmdBuilder = new StringBuilder();
...@@ -99,14 +119,33 @@ public class BortalCommand implements Command, Runnable { ...@@ -99,14 +119,33 @@ public class BortalCommand implements Command, Runnable {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
BortalLocalContextHolder.getInstance().executeLogout();
exitCallback.onExit(3); exitCallback.onExit(3);
} }
private void parseCommand(String string) { private int parseCommand(String args) {
if (string != null && !string.isEmpty()) String[] argv = null;
{ if(args != null) {
logger.info("received command {}", string); if(args.length() == 0) return 0;
argv = args.split(" ");
}
if(argv != null && argv.length > 0) {
logger.info("received command {}", argv[0]);
ICommandlineCommand cmd;
if((cmd = this.commandMap.get(argv[0])) != null) {
return cmd.execute(argv,this.instream, this.outstream, this.errstream);
} else {
try {
this.errstream.write("unknown command\r\n");
this.errstream.flush();
} catch(IOException ioe) {}
return -1;
}
} else {
return 0;
} }
} }
} }
...@@ -64,6 +64,8 @@ public class BortalPasswordAuthenticator implements PasswordAuthenticator { ...@@ -64,6 +64,8 @@ public class BortalPasswordAuthenticator implements PasswordAuthenticator {
} }
}); });
loginContext.login(); loginContext.login();
context.setLoginContext(loginContext);
// loginContext.logout(); // loginContext.logout();
return true; return true;
} catch (Exception e) { } catch (Exception e) {
......
...@@ -6,6 +6,7 @@ import java.util.Map; ...@@ -6,6 +6,7 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.security.auth.login.LoginException;
import javax.servlet.Servlet; import javax.servlet.Servlet;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.ServletException; import javax.servlet.ServletException;
...@@ -22,7 +23,9 @@ import org.slf4j.Logger; ...@@ -22,7 +23,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder; import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.cmdline.Hello;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
/** /**
...@@ -38,6 +41,8 @@ public class SshServlet extends HttpServlet { ...@@ -38,6 +41,8 @@ public class SshServlet extends HttpServlet {
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
@EJB private PermissionBeanLocal permBean;
/** /**
* @see HttpServlet#HttpServlet() * @see HttpServlet#HttpServlet()
...@@ -58,8 +63,12 @@ public class SshServlet extends HttpServlet { ...@@ -58,8 +63,12 @@ public class SshServlet extends HttpServlet {
@Override @Override
public Command create() { public Command create() {
logger.info("creating new bortal command"); logger.info("creating new bortal command");
BortalCommand bc = new BortalCommand(context);
return new BortalCommand(context); bc
.addCommandlineCommand("hello", new Hello(permBean))
.addCommandlineCommand("hallo", new Hello(permBean));
return bc;
} }
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!