View Javadoc
1   package de.dlr.shepard.integrationtests;
2   
3   import de.dlr.shepard.auth.apikey.entities.ApiKey;
4   import de.dlr.shepard.auth.users.entities.User;
5   import de.dlr.shepard.common.util.PKIHelper;
6   import io.jsonwebtoken.Jwts;
7   import java.security.PrivateKey;
8   import java.util.Date;
9   import org.eclipse.microprofile.config.ConfigProvider;
10  import org.neo4j.ogm.config.Configuration;
11  import org.neo4j.ogm.session.Session;
12  import org.neo4j.ogm.session.SessionFactory;
13  
14  public class UserWithApiKeyBuilder {
15  
16    private SessionFactory sessionFactory;
17  
18    private Session session;
19  
20    private User user;
21    private ApiKey apiKey;
22  
23    String neo4jConnectionString;
24  
25    public UserWithApiKeyBuilder() {
26      String username = ConfigProvider.getConfig().getValue("neo4j.username", String.class);
27      String password = ConfigProvider.getConfig().getValue("neo4j.password", String.class);
28      String host = ConfigProvider.getConfig().getValue("neo4j.host", String.class);
29      neo4jConnectionString = "bolt://" + username + ":" + password + "@" + host;
30      session = openSession(neo4jConnectionString);
31    }
32  
33    public UserWithApiKeyBuilder withUser() {
34      user = generateUser("test_it");
35      return this;
36    }
37  
38    public UserWithApiKeyBuilder withUser(String username) {
39      user = generateUser(username);
40      return this;
41    }
42  
43    public UserWithApiKeyBuilder withApiKey() {
44      if (user == null) user = generateUser("test_it");
45      apiKey = generateApiKey(user);
46      return this;
47    }
48  
49    public UserWithApiKey build() {
50      sessionFactory.close();
51      return new UserWithApiKey(user, apiKey);
52    }
53  
54    private Session openSession(String connectionString) {
55      Configuration configuration = new Configuration.Builder().uri(connectionString).build();
56      sessionFactory = new SessionFactory(configuration, User.class.getPackageName(), ApiKey.class.getPackageName());
57      return sessionFactory.openSession();
58    }
59  
60    private static String generateJws(ApiKey apiKey, String issuer) {
61      PKIHelper pkiHelper = new PKIHelper();
62      pkiHelper.init();
63      PrivateKey key = pkiHelper.getPrivateKey();
64  
65      Date currentDate = new Date();
66      String jws = Jwts.builder()
67        .setSubject(apiKey.getBelongsTo().getUsername())
68        .setIssuer(issuer)
69        .setNotBefore(currentDate)
70        .setIssuedAt(currentDate)
71        .setId(apiKey.getUid().toString())
72        .signWith(key)
73        .compact();
74      return jws;
75    }
76  
77    private User generateUser(String userName) {
78      User user = session.load(User.class, userName, 2);
79  
80      if (user == null) {
81        user = new User(userName);
82      }
83      user.setFirstName("Integration");
84      user.setLastName("Test");
85      user.setEmail("integration@test.org");
86      session.save(user);
87      return user;
88    }
89  
90    private ApiKey generateApiKey(User user) {
91      ApiKey apiKey;
92  
93      if (user.getApiKeys().isEmpty()) {
94        // ApiKey does not exist yet
95        apiKey = new ApiKey("IntegrationTestApiKey", new Date(), user);
96        session.save(apiKey);
97      } else {
98        apiKey = user.getApiKeys().get(0);
99      }
100 
101     // Update Api Key
102     apiKey.setJws(generateJws(apiKey, "integraton tests"));
103     session.save(apiKey);
104     this.user = apiKey.getBelongsTo();
105 
106     return apiKey;
107   }
108 }