1 package net.sumaris.core.dao.administration.user;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.base.Preconditions;
26 import net.sumaris.core.dao.technical.hibernate.HibernateDaoSupport;
27 import net.sumaris.core.model.administration.user.UserToken;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30 import org.springframework.dao.EmptyResultDataAccessException;
31 import org.springframework.stereotype.Repository;
32
33 import javax.persistence.EntityManager;
34 import javax.persistence.NoResultException;
35 import javax.persistence.criteria.CriteriaBuilder;
36 import javax.persistence.criteria.CriteriaQuery;
37 import javax.persistence.criteria.ParameterExpression;
38 import javax.persistence.criteria.Root;
39 import java.util.Date;
40 import java.util.List;
41 import java.util.stream.Collectors;
42
43 @Repository("userTokenDao")
44 public class UserTokenDaoImpl extends HibernateDaoSupport implements UserTokenDao {
45
46
47 private static final Logger log =
48 LoggerFactory.getLogger(UserTokenDaoImpl.class);
49
50 @Override
51 public boolean existsByPubkey(String token, String pubkey) {
52
53 EntityManager session = getEntityManager();
54 CriteriaBuilder builder = session.getCriteriaBuilder();
55 CriteriaQuery<Long> query = builder.createQuery(Long.class);
56 Root<UserToken> root = query.from(UserToken.class);
57
58 ParameterExpression<String> pubkeyParam = builder.parameter(String.class);
59 ParameterExpression<String> tokenParam = builder.parameter(String.class);
60
61 query.select(builder.count(root.get(UserToken.Fields.ID)))
62 .where(builder.and(
63 builder.equal(root.get(UserToken.Fields.PUBKEY), pubkeyParam),
64 builder.equal(root.get(UserToken.Fields.TOKEN), tokenParam)
65 )
66 );
67
68 try {
69 return session.createQuery(query)
70 .setParameter(pubkeyParam, pubkey)
71 .setParameter(tokenParam, token)
72 .getSingleResult() > 0;
73 } catch (EmptyResultDataAccessException | NoResultException e) {
74 return false;
75 }
76 }
77
78 @Override
79 public List<String> getAllByPubkey(String pubkey) {
80
81 EntityManager session = getEntityManager();
82 CriteriaBuilder builder = session.getCriteriaBuilder();
83 CriteriaQuery<UserToken> query = builder.createQuery(UserToken.class);
84 Root<UserToken> root = query.from(UserToken.class);
85
86 ParameterExpression<String> pubkeyParam = builder.parameter(String.class);
87
88 query.select(root)
89 .where(builder.equal(root.get(UserToken.Fields.PUBKEY), pubkeyParam));
90
91 try {
92 return session.createQuery(query)
93 .setParameter(pubkeyParam, pubkey)
94 .getResultList().stream().map(ut -> ut.getToken())
95 .collect(Collectors.toList());
96 } catch (EmptyResultDataAccessException | NoResultException e) {
97 return null;
98 }
99 }
100
101 @Override
102 public void add(String token, String pubkey) {
103 Preconditions.checkNotNull(token);
104 Preconditions.checkNotNull(pubkey);
105
106 EntityManager entityManager = getEntityManager();
107 UserTokenministration/user/UserToken.html#UserToken">UserToken entity = new UserToken();
108
109 entity.setCreationDate(new Date());
110 entity.setToken(token);
111 entity.setPubkey(pubkey);
112
113
114 entityManager.persist(entity);
115
116 getEntityManager().flush();
117 getEntityManager().clear();
118 }
119
120 @Override
121 public void delete(String token) {
122
123 log.debug(String.format("Deleting user token {%s}...", token));
124
125 EntityManager session = getEntityManager();
126 CriteriaBuilder builder = session.getCriteriaBuilder();
127 CriteriaQuery<UserToken> query = builder.createQuery(UserToken.class);
128 Root<UserToken> root = query.from(UserToken.class);
129
130 ParameterExpression<String> tokenParam = builder.parameter(String.class);
131
132 query.select(root)
133 .where(builder.equal(root.get(UserToken.Fields.TOKEN), tokenParam));
134
135 try {
136 UserToken existingToken = session.createQuery(query)
137 .setParameter(tokenParam, token)
138 .getSingleResult();
139 getEntityManager().remove(existingToken);
140 } catch (EmptyResultDataAccessException | NoResultException e) {
141 return;
142 }
143 }
144
145
146
147 }