Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Creative commons Attribution-NonCommercial license. http://creativecommons.org/licenses/by-nc/2.5/au/deed.en_GB NO WARRANTY IS GIVEN OR IMPLIED, USE AT YOUR OWN RISK.
  
  package base.jee.api.sql;
  
 import base.Command;
 import base.json.Json;
 
 import java.util.Date;
 import java.util.UUID;
 
 import static base.jee.api.sql.util.Log.log;
 
 public class ResetPasswordUsingToken extends Command {
 
 	private DataSource ds;
 	private String token;
 	private String password;
 	private String password2;
 	private String ip;
 
 	}
 
 	public ResetPasswordUsingToken(DataSource dsString tokenString passwordString password2String ip) {
 		if(ds == null) {
 			throw new IllegalArgumentException("Invalid parameter: ds");
 		}
 		if(token == null || token.trim().length() == 0 || token.length() > .) {
 			throw new IllegalArgumentException("Invalid parameter: token");
 		}
 		if(password == null || password.trim().length() == 0) {
 			throw new IllegalArgumentException("Invalid parameter: password");
 		}
 		if(password2 == null || password2.trim().length() == 0) {
 			throw new IllegalArgumentException("Invalid parameter: password2");
 		}
 		if(ip == null || ip.trim().length() == 0) {
 			throw new IllegalArgumentException("Invalid parameter: ip");
 		}
 
 		if(password.length() > .) {
 			throw new IllegalArgumentException("Please choose a shorter password. Passwords should not have more than " + . + " characters.");
 		}
 		if(password.length() < .) {
 			throw new IllegalArgumentException("Please choose a longer password. Passwords should contain at least " + . + " characters.");
 		}
 		if(!password.equals(password2)) {
 			throw new IllegalArgumentException("Please ensure both passwords match.");
 		}
 
 		this. = ds;
 		this. = token;
 		this. = password;
 		this. = password2;
 		this. = ip;
 	}
 
 	protected void execute() throws IOException {
 		Connection c = null;
 		PreparedStatement s = null;
 		ResultSet r = null;
 
 		try {
 			c = .getConnection();
 			c.setAutoCommit(false);
 
 			s = c.prepareStatement("select person_uuid from request_token where type='password_reset' and token=?");
 			s.setString(1, );
 			r = s.executeQuery();
 			if(!r.next()) {
 				throw new IllegalArgumentException("Invalid request token.");
 			}
 			UUID uuid = UUID.fromString(r.getString(1));
 			r.close();
 			r = null;
 			s.close();
 			s = null;
 
 			s = c.prepareStatement("select expiry, first_name, last_name from person where uuid=?");
 			s.setString(1, uuid.toString());
 			r = s.executeQuery();
 			if(!r.next()) {
				throw new IllegalArgumentException("Invalid person uuid.");
			}
			if(r.getLong(1) > 0 && new Date(r.getLong(1)).getTime() < new Date().getTime()) {
				throw new IllegalStateException("Resetting password of expired account is not allowed.");
			}
			String firstName = r.getString(2);
			String lastName = r.getString(3);
			r.close();
			r = null;
			s.close();
			s = null;
			PreparedStatement t = c.prepareStatement("update person set password=?, updated=? where uuid=?");
			t.setString(1, Password.encode());
			t.setLong(2, new Date().getTime());
			t.setString(3, uuid.toString());
			t.close();
			t = null;
			// Upon successful password reset, invalidate all existing user sessions.
			t = c.prepareStatement("delete from token where person_uuid=?");
			t.setString(1, uuid.toString());
			t.close();
			t = null;
			log(c"INFO", User.userWithUuidAndIp(uuid), "Updated password for person " + firstName + " " + lastNamenew ResourceUid("Person"uuid));
			c.commit();
			throw new IOException(e);
finally {
			if(c != null) {
				try { c.rollback(); } catch (SQLException e) { }
				try { c.close(); } catch (SQLException e) { }
			}
		}
	}
		return "{" +
				"\"token\":\"" + Json.escape()+ "\"," +
				"\"password\":\"" + Json.escape()+ "\"," +
				"\"password2\":\"" + Json.escape()+ "\"" +
				"}";
	}
New to GrepCode? Check out our FAQ X