View Javadoc
1   package net.sumaris.core.dao.administration.user;
2   
3   /*-
4    * #%L
5    * SUMARiS:: Core
6    * %%
7    * Copyright (C) 2018 SUMARiS Consortium
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU General Public License as
11   * published by the Free Software Foundation, either version 3 of the
12   * License, or (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU General Public
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/gpl-3.0.html>.
22   * #L%
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      /** Logger. */
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         // Save entityName
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; // not exists: continue
142         }
143     }
144 
145     /* -- protected methods -- */
146 
147 }