private Object[] RecoveryQ(Message m) { int sessID = (int) m.msg[m.msg.length - 1]; Object[] rms = null; Challenge reoveryChallenge = challengeHanlder.generateChallenge(sessID); boolean success = challengeHanlder.checkChallenge(reoveryChallenge); if (success) { String userName = (String) m.msg[0]; Person p = LoginManager.get(userName); if (p != null) { int qIDs[] = p.getQID(); rms = new Object[] { Message.Type.RecoveryQResponse.name().toCharArray(), String.valueOf(qIDs[0]).toCharArray(), String.valueOf(qIDs[1]).toCharArray(), String.valueOf(reoveryChallenge.nonce).toCharArray() }; network.sendMessage(rms, sessID); return rms; } else { rms = new Object[] { Message.Type.Failed.name().toCharArray(), "UserName invalid".toCharArray() }; network.sendMessage(rms, sessID); return rms; } } else { rms = new Object[] { Message.Type.Failed.name().toCharArray(), "tried too many, wait for 2 mins".toCharArray() }; network.sendMessage(rms, sessID); return rms; // no response.. ignore, the request. } }
private Object[] Login(Message m) { int sessID = (int) m.msg[m.msg.length - 1]; Challenge loginChallenge = challengeHanlder.generateChallenge(sessID); Object[] rms = null; boolean success = challengeHanlder.checkChallenge(loginChallenge); if (success) { rms = new Object[] { Message.Type.LoginResponse.name().toCharArray(), String.valueOf(loginChallenge.nonce).toCharArray() }; network.sendMessage(rms, sessID); return rms; } else { rms = new Object[] { Message.Type.Failed.name().toCharArray(), "tried too many, wait for 2 mins".toCharArray() }; // no response.. ignore, the request. } return rms; }
public Message LoginResponse(Message m) { int sessID = (int) m.msg[m.msg.length - 1]; char[] pw = null; Message rm = null; try { String userName = (String) m.msg[0]; pw = (char[]) m.msg[1]; Integer userNonce = (Integer) m.msg[2]; Challenge userPrevNonce = challengeHanlder.getChallege(sessID); Person user = null; if (userPrevNonce.nonce + 1 == userNonce) { for (Person p : LoginManager.getPersons()) { if (p.getUsername().equals(userName)) { user = p; break; } } // System.out.println("In server, user.checkLogin(pw): "+ user.checkLogin(pw)); if (user != null && user.checkLogin(pw)) { LoginResponse lr = new LoginResponse(true, user); rm = new Message(Message.Type.Authenticated, lr); network.setAuthentication( (SecretKey) m.msg[3], (SecretKey) m.msg[4], (int) m.msg[m.msg.length - 1], userName); network.sendMessage(rm, sessID); } else { rm = new Message(Message.Type.Failed, "Login failed"); network.setAuthentication( (SecretKey) m.msg[3], (SecretKey) m.msg[4], (int) m.msg[m.msg.length - 1], userName); network.sendMessage(rm, (int) m.msg[m.msg.length - 1]); network.setAuthentication(null, null, sessID, ""); } } } finally { if (pw != null) { for (int i = 0; i < pw.length; i++) { pw[i] = '\0'; } } } return rm; }
private Object[] RecoveryQResponse(Message m) { int sessID = (int) m.msg[m.msg.length - 1]; Challenge challenge = challengeHanlder.getChallege(sessID); String userName = String.valueOf(m.msg[0]); int userR = (int) m.msg[4]; Object[] rms = null; if (challenge.nonce + 1 == userR) { Person p = LoginManager.get(userName); char[] pw = (char[]) m.msg[3]; if (p != null && p.checkRecovery((char[]) m.msg[1], (char[]) m.msg[2])) { if (Person.checkPasswordValidity(pw)) { p.resetPassword(pw); rms = new Object[] { Message.Type.Recovered.name().toCharArray(), "Password change completed".toCharArray() }; network.sendMessage(rms, sessID); return rms; } else { rms = new Object[] { Message.Type.Failed.name().toCharArray(), "New Password is invalid".toCharArray() }; network.sendMessage(rms, sessID); return rms; } } else { rms = new Object[] {Message.Type.Failed.name().toCharArray(), "wrong answers".toCharArray()}; network.sendMessage(rms, sessID); return rms; } } rms = new Object[] { Message.Type.Failed.name().toCharArray(), "Password change failed".toCharArray() }; network.sendMessage(rms, sessID); return rms; }