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
95 apiKey = new ApiKey("IntegrationTestApiKey", new Date(), user);
96 session.save(apiKey);
97 } else {
98 apiKey = user.getApiKeys().get(0);
99 }
100
101
102 apiKey.setJws(generateJws(apiKey, "integraton tests"));
103 session.save(apiKey);
104 this.user = apiKey.getBelongsTo();
105
106 return apiKey;
107 }
108 }