Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Passwords #30

Merged
merged 2 commits into from
Sep 8, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/java/control/actions/AddStationAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import model.models.UserDetail;
import model.models.UserPrivilege;

import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.SessionAware;

Expand All @@ -20,6 +21,7 @@

import control.message.Email;

@InterceptorRef(value = "secureStack")
public class AddStationAction extends ActionSupport implements SessionAware {

private Map<String, Object> session;
Expand Down
98 changes: 98 additions & 0 deletions src/main/java/control/actions/ForgotPasswordAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package control.actions;

import java.util.Map;
import java.util.Random;

import javax.servlet.http.HttpServletResponse;

import model.db.SHACheckSum;
import model.managers.UserManager;
import model.models.User;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.EmailValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;

import control.message.Email;

public class ForgotPasswordAction extends ActionSupport implements SessionAware, ServletResponseAware{

private Map<String, Object> session;
private HttpServletResponse response;
private String email;

@org.apache.struts2.convention.annotation.Action(value = "forgot-password", results = { @Result(name = "done", location = "reset-pass", type = "redirect") })
public String execute() throws Exception {

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0);
UserManager um=new UserManager();
User user=um.getUserByEmail(email);
if(user==null){
addFieldError("email", "Email does not exist in Pack Track");
return SUCCESS;
}else{
char[] chars = "abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM!@#$%^&*()1234567890"
.toCharArray();
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 8; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
SHACheckSum shaCheckSum = new SHACheckSum(sb.toString());
String password = null;
try {
password = shaCheckSum.getEncrValue();
} catch (Exception e) {
e.printStackTrace();
}
user.setPassword(password);

if (um.updateUser(user)) {
Email.send("PackTrack Account",
"Hi,\n Your password has reset.\nYour user name at PackTrack is : " + user.getUserName()
+ "\n Your new password is : " + sb.toString(),
email);
}
}
return "done";

}

@org.apache.struts2.convention.annotation.Action(value = "forgot-password-input", results = { @Result(name = "error", location = "login", type = "redirect") })
public String input() throws Exception {

return "forgot-password";

}

@Override
public void setSession(Map<String, Object> session) {
this.session = session;

}

public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public HttpServletResponse getServletResponse() {
return this.response;
}

public String getEmail() {
return email;
}

@RequiredStringValidator(type = ValidatorType.FIELD, message = "Enter email")
@EmailValidator(type = ValidatorType.FIELD, message = "Not a valid email")
public void setEmail(String email) {
this.email = email;
}
}
109 changes: 109 additions & 0 deletions src/main/java/control/actions/SettingsAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package control.actions;

import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import model.db.SHACheckSum;
import model.managers.UserManager;
import model.models.User;

import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;

@InterceptorRef(value="secureStack")
public class SettingsAction extends ActionSupport implements SessionAware{

private Map<String, Object> session;
private String current;
private String newP;
private String repeat;

@org.apache.struts2.convention.annotation.Action(value = "settings", results = {
@Result(name = "error", location = "login", type = "redirect"),
@Result(name = "done", location = "home", type = "redirect") })
public String execute() throws Exception {
UserManager uManager = new UserManager();
User user = (User) session.get("user");
SHACheckSum shaCheckSum = new SHACheckSum(current);
String password = null;
try {
password = shaCheckSum.getEncrValue();
} catch (Exception e) {
e.printStackTrace();
}
if(!user.getPassword().equals(password)){
addFieldError("current", "Invalid password");
return SUCCESS;
}
if(!newP.equals(repeat)){
addFieldError("newP", "Passwords do not match");
return SUCCESS;
}
SHACheckSum newShaCheckSum = new SHACheckSum(newP);
try {
password = newShaCheckSum.getEncrValue();
user.setPassword(password);
} catch (Exception e) {
e.printStackTrace();
}
if (uManager.updateUser(user)) {
session.put("message", "Your password updated successfully!");
session.put("user", user);
session.put("password", user.getPassword());
return "done";
}
return SUCCESS;
}

@org.apache.struts2.convention.annotation.Action(value = "settings-input", results = { @Result(name = "error", location = "login", type = "redirect") })
public String input() throws Exception {

return "settings";

}

@Override
public void setSession(Map<String, Object> session) {
this.session = session;

}


public String getCurrent() {
return current;
}


@RequiredStringValidator(type = ValidatorType.FIELD, message = "Invalid password")
public void setCurrent(String current) {
this.current = current;
}


public String getNewP() {
return newP;
}


@RequiredStringValidator(type = ValidatorType.FIELD, message = "Invalid password")
public void setNewP(String newP) {
this.newP = newP;
}


public String getRepeat() {
return repeat;
}

@RequiredStringValidator(type = ValidatorType.FIELD, message = "Invalid password")
public void setRepeat(String repeat) {
this.repeat = repeat;
}

}
16 changes: 16 additions & 0 deletions src/main/java/model/managers/UserManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -166,5 +166,21 @@ public boolean deleteUser(String userName, String by) {
return false;
}
}

public User getUserByEmail(String email) {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Query query = session.createQuery("from User u where u.userDetail.email=:email and u.userDetail.deleted='false'");
query.setString("email", email);
List<User> list = query.list();
session.getTransaction().commit();
session.close();

if (list.size() == 0) {
return null;
}

return list.get(0);
}

}
50 changes: 50 additions & 0 deletions src/main/webapp/WEB-INF/content/forgot-password.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Pack Track login</title>
<meta name="generator" content="Bootply">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href="css/bootstrap.min.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href="css/login.css" rel="stylesheet">
</head>
<body>
<!--login modal-->
<div id="loginModal" class="modal show" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">

<h1 class="text-center">Reset password</h1>
</div>
<div class="modal-body">
<form class="form col-md-12 center-block" action="forgot-password" method="post">
<div class="form-group">
<s:textfield cssClass="form-control input-lg" placeholder="Email Address" name="email"/>
</div>
<div class="form-group">
<br/>
<button class="btn btn-primary btn-lg btn-block">Reset password</button>

</div>
</form>
</div>
<div class="modal-footer">
<div class="col-md-12">

</div>
</div>
</div>
</div>
</div>
<script src="js/jquery-1.11.0.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript"></script>

</body></html>
2 changes: 1 addition & 1 deletion src/main/webapp/WEB-INF/content/home.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#">SLR Home</a></li>
<li><a href="#">Settings</a></li>
<li><a href="<s:url action="settings-input"/>">Settings</a></li>
<li><a href="<s:url action="logout"/>">Logout</a></li>
</ul>
</div>
Expand Down
8 changes: 4 additions & 4 deletions src/main/webapp/WEB-INF/content/login.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Bootstrap Login Form</title>
<title>Pack Track login</title>
<meta name="generator" content="Bootply">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href="css/bootstrap.min.css" rel="stylesheet">
Expand All @@ -32,13 +32,13 @@
<s:password cssClass="form-control input-lg" placeholder="Password" name="password"/>
</div>
<div class="form-group">
<span class="pull-left"><a href=#>Forgot password</></span>
<span class="pull-left"><a href="<s:url action="forgot-password-input"/>">Forgot password</></span>
<br/>
<br/>
<button class="btn btn-primary btn-lg btn-block">Sign In</button>

</div>
<form>
</form>
</div>
<div class="modal-footer">
<div class="col-md-12">
Expand All @@ -49,7 +49,7 @@
</div>
</div>
<!-- script references -->
<script src="js/jquery.min.js"></script>
<script src="js/jquery-1.11.0.js"></script>
<script src="js/bootstrap.min.js"></script>

</body></html>
43 changes: 43 additions & 0 deletions src/main/webapp/WEB-INF/content/reset-pass.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>reset done</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/login.css" rel="stylesheet">
</head>
<body>
<div id="loginModal" class="modal show" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">

<h1 class="text-center">Reset done</h1>
</div>
<div class="modal-body">
<form class="form col-md-12 center-block" action="index">
<div class="form-group">
<p>Your password has been reset!</p>
</div>
<div class="form-group">
<br/>
<button class="btn btn-primary btn-lg btn-block">ok</button>

</div>
</form>
</div>
<div class="modal-footer">
<div class="col-md-12">

</div>
</div>
</div>
</div>
</div>
<script src="js/jquery-1.11.0.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript"></script>
</body>
</html>
Loading