aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-01-25 16:23:06 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-01-27 14:49:51 +0100
commit3219b99f2e675e9d14dd06ae68f4e005426f15b5 (patch)
treef031f3614080e680436beae02c3bf279209fce53 /sonar-db
parent6c1bb2ac26ac3d13c607507c66a0769ba6155d46 (diff)
downloadsonarqube-3219b99f2e675e9d14dd06ae68f4e005426f15b5.tar.gz
sonarqube-3219b99f2e675e9d14dd06ae68f4e005426f15b5.zip
SONAR-7217 Fail to authenticate user with existing email
Diffstat (limited to 'sonar-db')
-rw-r--r--sonar-db/src/main/java/org/sonar/db/user/UserDao.java7
-rw-r--r--sonar-db/src/main/java/org/sonar/db/user/UserMapper.java2
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml6
-rw-r--r--sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java9
-rw-r--r--sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/exists_by_email.xml8
5 files changed, 32 insertions, 0 deletions
diff --git a/sonar-db/src/main/java/org/sonar/db/user/UserDao.java b/sonar-db/src/main/java/org/sonar/db/user/UserDao.java
index 8799754185a..8c01178d425 100644
--- a/sonar-db/src/main/java/org/sonar/db/user/UserDao.java
+++ b/sonar-db/src/main/java/org/sonar/db/user/UserDao.java
@@ -187,6 +187,13 @@ public class UserDao implements Dao {
throw new RowNotFoundException(String.format("User with identity provider '%s' and id '%s' has not been found", extIdentityProvider, extIdentity));
}
+ /**
+ * Please note that email is case insensitive, result for searching 'mail@email.com' or 'Mail@Email.com' will be the same
+ */
+ public boolean doesEmailExist(DbSession dbSession, String email){
+ return mapper(dbSession).countByEmail(email.toLowerCase()) > 0;
+ }
+
protected UserMapper mapper(DbSession session) {
return session.getMapper(UserMapper.class);
}
diff --git a/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java b/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java
index 605998588db..8f461e4f673 100644
--- a/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java
+++ b/sonar-db/src/main/java/org/sonar/db/user/UserMapper.java
@@ -57,6 +57,8 @@ public interface UserMapper {
@CheckForNull
GroupDto selectGroupByName(String name);
+ long countByEmail(String email);
+
void insert(UserDto userDto);
void update(UserDto userDto);
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
index a4d3b636448..066036e250c 100644
--- a/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
+++ b/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
@@ -98,6 +98,12 @@
</where>
</select>
+ <select id="countByEmail" parameterType="String" resultType="long">
+ SELECT count(u.id)
+ FROM users u
+ where lower(u.email)=#{email}
+ </select>
+
<select id="selectGroupByName" parameterType="string" resultType="Group">
SELECT id, name, description, created_at AS "createdAt", updated_at AS "updatedAt"
FROM groups WHERE name=#{id}
diff --git a/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java b/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java
index 42b14013f4c..57294908f9b 100644
--- a/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/user/UserDaoTest.java
@@ -342,4 +342,13 @@ public class UserDaoTest {
thrown.expectMessage("User with identity provider 'unknown' and id 'unknown' has not been found");
underTest.selectOrFailByExternalIdentity(session, "unknown", "unknown");
}
+
+ @Test
+ public void exists_by_email() throws Exception {
+ db.prepareDbUnit(getClass(), "exists_by_email.xml");
+
+ assertThat(underTest.doesEmailExist(session, "marius@lesbronzes.fr")).isTrue();
+ assertThat(underTest.doesEmailExist(session, "Marius@LesBronzes.fr")).isTrue();
+ assertThat(underTest.doesEmailExist(session, "unknown")).isFalse();
+ }
}
diff --git a/sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/exists_by_email.xml b/sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/exists_by_email.xml
new file mode 100644
index 00000000000..5a54ec22958
--- /dev/null
+++ b/sonar-db/src/test/resources/org/sonar/db/user/UserDaoTest/exists_by_email.xml
@@ -0,0 +1,8 @@
+<dataset>
+
+ <users id="101" login="marius" name="Marius" email="marius@lesbronzes.fr" active="[true]" scm_accounts="&#10;ma&#10;marius33&#10;" created_at="1418215735482" updated_at="1418215735485"
+ salt="79bd6a8e79fb8c76ac8b121cc7e8e11ad1af8365" crypted_password="650d2261c98361e2f67f90ce5c65a95e7d8ea2fg"/>
+ <users id="102" login="sbrandhof" name="Simon Brandhof" email="marius@lesbronzes.fr" active="[true]" scm_accounts="[null]" created_at="1418215735482" updated_at="1418215735485"
+ salt="79bd6a8e79fb8c76ac8b121cc7e8e11ad1af8366" crypted_password="650d2261c98361e2f67f90ce5c65a95e7d8ea2fh"/>
+
+</dataset>