diff --git a/src/main/java/es/uvigo/esei/daa/LoginFilter.java b/src/main/java/es/uvigo/esei/daa/LoginFilter.java
index f6fa8c601ca5130c1f4e9f0a792d69e3239bec81..1ca1ad27982e60ea36ecb3b783c32a63f3b11b93 100644
--- a/src/main/java/es/uvigo/esei/daa/LoginFilter.java
+++ b/src/main/java/es/uvigo/esei/daa/LoginFilter.java
@@ -38,6 +38,8 @@ public class LoginFilter implements Filter {
} else {
redirectToIndex(httpRequest, httpResponse);
}
+ } catch (IllegalArgumentException iae) {
+ httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
} catch (DAOException e) {
httpResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
@@ -101,7 +103,8 @@ public class LoginFilter implements Filter {
}
}
- private boolean checkToken(HttpServletRequest request) throws DAOException {
+ private boolean checkToken(HttpServletRequest request)
+ throws DAOException, IllegalArgumentException {
final Cookie[] cookies = request.getCookies();
if (cookies != null) {
diff --git a/src/main/java/es/uvigo/esei/daa/dao/UsersDAO.java b/src/main/java/es/uvigo/esei/daa/dao/UsersDAO.java
index 66ef5c2495b9ac8b75a8b588b5cfcd61a0a9f177..6d4cfe211e96b2fb81e1ee75f8f1ffcecc547c3b 100644
--- a/src/main/java/es/uvigo/esei/daa/dao/UsersDAO.java
+++ b/src/main/java/es/uvigo/esei/daa/dao/UsersDAO.java
@@ -5,12 +5,11 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
public class UsersDAO extends DAO {
public String checkLogin(String login, String password) throws DAOException {
- final String shaPassword = DigestUtils.sha256Hex(password);
-
try (final Connection conn = this.getConnection()) {
final String query = "SELECT password FROM users WHERE login=?";
@@ -20,9 +19,10 @@ public class UsersDAO extends DAO {
try (ResultSet result = statement.executeQuery()) {
if (result.next()) {
final String dbPassword = result.getString("password");
+ final String shaPassword = DigestUtils.sha256Hex(password);
if (shaPassword.equals(dbPassword)) {
- return DigestUtils.sha256Hex(login + dbPassword);
+ return new String(Base64.encodeBase64((login + ":" + password).getBytes()));
} else {
return null;
}
@@ -36,16 +36,31 @@ public class UsersDAO extends DAO {
}
}
- public String checkToken(String token) throws DAOException {
+ public String checkToken(String token)
+ throws DAOException, IllegalArgumentException {
+ final String decodedToken = new String(Base64.decodeBase64(token.getBytes()));
+ final int colonIndex = decodedToken.indexOf(':');
+
+ if (colonIndex < 0 || colonIndex == decodedToken.length()-1) {
+ throw new IllegalArgumentException("Invalid token");
+ }
+
+ final String login = decodedToken.substring(0, decodedToken.indexOf(':'));
+ final String password = DigestUtils.sha256Hex(
+ decodedToken.substring(decodedToken.indexOf(':') + 1)
+ );
+
try (final Connection conn = this.getConnection()) {
- final String query = "SELECT login FROM users WHERE sha2(concat(login, password), 256)=?";
+ final String query = "SELECT password FROM users WHERE login=?";
try (PreparedStatement statement = conn.prepareStatement(query)) {
- statement.setString(1, token);
+ statement.setString(1, login);
try (ResultSet result = statement.executeQuery()) {
if (result.next()) {
- return result.getString("login");
+ final String dbPassword = result.getString("password");
+
+ return password.equals(dbPassword) ? login : null;
} else {
return null;
}
diff --git a/src/test/java/es/uvigo/esei/daa/web/PeopleWebTest.java b/src/test/java/es/uvigo/esei/daa/web/PeopleWebTest.java
index b89924f2aa7306cdea565a9124877795b764faea..bac7492fe909e8c85c004f96736f3f66fefc0cfe 100644
--- a/src/test/java/es/uvigo/esei/daa/web/PeopleWebTest.java
+++ b/src/test/java/es/uvigo/esei/daa/web/PeopleWebTest.java
@@ -38,10 +38,7 @@ public class PeopleWebTest {
driver.get(baseUrl);
driver.manage().addCookie(
- new Cookie(
- "token",
- "25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666"
- )
+ new Cookie("token", "bXJqYXRvOm1yamF0bw==")
);
// Driver will wait DEFAULT_WAIT_TIME if it doesn't find and element.
driver.manage().timeouts().implicitlyWait(DEFAULT_WAIT_TIME, TimeUnit.SECONDS);
diff --git a/src/test/webapp/rest/people/add.html b/src/test/webapp/rest/people/add.html
index 184475edd6166e70b27cfb6b0fea90240aa627db..c0f7b7df36c086b33d5cd3d060db6152f17887ba 100644
--- a/src/test/webapp/rest/people/add.html
+++ b/src/test/webapp/rest/people/add.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/addNoName.html b/src/test/webapp/rest/people/addNoName.html
index e20f6f6874156a3bee2b065e8fdc6096c336c4b3..04db2e9b02a105d248647e90b47ee2941f1e00ed 100644
--- a/src/test/webapp/rest/people/addNoName.html
+++ b/src/test/webapp/rest/people/addNoName.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/addNoSurname.html b/src/test/webapp/rest/people/addNoSurname.html
index 909988cbd194397305c6997397e7423874a4c250..6b7ebbf457f46d0d2729fde6e24854bd71b0fbcc 100644
--- a/src/test/webapp/rest/people/addNoSurname.html
+++ b/src/test/webapp/rest/people/addNoSurname.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/delete.html b/src/test/webapp/rest/people/delete.html
index 4e3fe0a94f928edfe31515bfb3ea2a96a48d83cf..7c1a242b86336b296ec9932772a4709c89b561ea 100644
--- a/src/test/webapp/rest/people/delete.html
+++ b/src/test/webapp/rest/people/delete.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/deleteInvalidId.html b/src/test/webapp/rest/people/deleteInvalidId.html
index 0c9fa0d8033d1d83a7bb5fa294ec204d8a673003..8d84af44137d53cb60eede774fbc650abf35c1f6 100644
--- a/src/test/webapp/rest/people/deleteInvalidId.html
+++ b/src/test/webapp/rest/people/deleteInvalidId.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/get.html b/src/test/webapp/rest/people/get.html
index 0e5980f47f2bc2963bb0bbd6309c7c469e5cf0af..30f59e5d9748fa97f4c955125f54d0fda99a2d68 100644
--- a/src/test/webapp/rest/people/get.html
+++ b/src/test/webapp/rest/people/get.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/list.html b/src/test/webapp/rest/people/list.html
index 0e5980f47f2bc2963bb0bbd6309c7c469e5cf0af..30f59e5d9748fa97f4c955125f54d0fda99a2d68 100644
--- a/src/test/webapp/rest/people/list.html
+++ b/src/test/webapp/rest/people/list.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/modify.html b/src/test/webapp/rest/people/modify.html
index bd1990cefa87d146d11eaebd4cb5d813f0337098..0adc9f2a68a806af53478c1e425f7814d7812497 100644
--- a/src/test/webapp/rest/people/modify.html
+++ b/src/test/webapp/rest/people/modify.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/modifyInvalidId.html b/src/test/webapp/rest/people/modifyInvalidId.html
index 41632c4f3600e2054b96348ce43b4e2f9c91d1cc..3f9d78c28d04964bce35fde1623916c4c1f3655a 100644
--- a/src/test/webapp/rest/people/modifyInvalidId.html
+++ b/src/test/webapp/rest/people/modifyInvalidId.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/modifyNoId.html b/src/test/webapp/rest/people/modifyNoId.html
index 843ae7211563e8e02c9c637a672160d3b472a965..ed0f3bbb0db98543dd3aae94f5d4100f4ac612ec 100644
--- a/src/test/webapp/rest/people/modifyNoId.html
+++ b/src/test/webapp/rest/people/modifyNoId.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/modifyNoName.html b/src/test/webapp/rest/people/modifyNoName.html
index ca43e00ca89920cac048138b31d3f3616d329eae..c29cf81617684baf34bd828194075ec07260d55e 100644
--- a/src/test/webapp/rest/people/modifyNoName.html
+++ b/src/test/webapp/rest/people/modifyNoName.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/rest/people/modifyNoSurname.html b/src/test/webapp/rest/people/modifyNoSurname.html
index 25caa0f6e96d68173754310f9ad1bb7548fb790c..fa2f859971853cf66f6827191ca94bf03ace29b7 100644
--- a/src/test/webapp/rest/people/modifyNoSurname.html
+++ b/src/test/webapp/rest/people/modifyNoSurname.html
@@ -34,7 +34,7 @@
type |
name=value |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
click |
diff --git a/src/test/webapp/web/people/add.html b/src/test/webapp/web/people/add.html
index 7ea2c1e592eb41aa4bab87a8c5db11fc79ce646f..13d4ad63479307e6b37542ee2678fa1c2bdb7bde 100644
--- a/src/test/webapp/web/people/add.html
+++ b/src/test/webapp/web/people/add.html
@@ -13,7 +13,7 @@
createCookie |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
|
diff --git a/src/test/webapp/web/people/delete.html b/src/test/webapp/web/people/delete.html
index 7155a2f4c9b34ffb718a60c9a8c5d8b4bb605c06..d73f24795fac92ee915f93ccebc5e7a240d04a60 100644
--- a/src/test/webapp/web/people/delete.html
+++ b/src/test/webapp/web/people/delete.html
@@ -13,7 +13,7 @@
createCookie |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
|
diff --git a/src/test/webapp/web/people/edit.html b/src/test/webapp/web/people/edit.html
index b513e2664dec52e8fbcd1e04c979af6bccdb5ebb..30688fbe039ee31600c88882d8d086abbfcd0e9c 100644
--- a/src/test/webapp/web/people/edit.html
+++ b/src/test/webapp/web/people/edit.html
@@ -13,7 +13,7 @@
createCookie |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
|
diff --git a/src/test/webapp/web/people/list.html b/src/test/webapp/web/people/list.html
index 8845d962345fecc27a503863205829cc2516b38c..a6b2ac41a9d402ec5e8a93d8b40242ce5c6b073b 100644
--- a/src/test/webapp/web/people/list.html
+++ b/src/test/webapp/web/people/list.html
@@ -13,7 +13,7 @@
createCookie |
- token=25d35467c91f0f8bbcc9a4f22bb359170643ccfdf38851599a03a8ffc0756666 |
+ token=bXJqYXRvOm1yamF0bw== |
|