Skip to content

Commit d00c287

Browse files
refactor
1 parent b9b43be commit d00c287

File tree

5 files changed

+41
-62
lines changed

5 files changed

+41
-62
lines changed

src/main/java/de/rwth/idsg/steve/repository/WebUserRepository.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@
1818
*/
1919
package de.rwth.idsg.steve.repository;
2020

21-
import jooq.steve.db.tables.records.WebUserRecord;
22-
import de.rwth.idsg.steve.service.dto.WebUserOverview;
2321
import de.rwth.idsg.steve.web.dto.WebUserQueryForm;
24-
import java.util.List;
22+
import jooq.steve.db.tables.records.WebUserRecord;
2523
import org.jooq.JSON;
2624
import org.jooq.Record4;
2725
import org.jooq.Result;
@@ -45,9 +43,8 @@ public interface WebUserRepository {
4543
boolean userExists(String username);
4644

4745
WebUserRecord loadUserByUsePk(Integer webUserPk);
46+
4847
WebUserRecord loadUserByUsername(String username);
4948

50-
//List<WebUserOverview> getOverview(WebUserQueryForm form);
5149
Result<Record4<Integer, String, Boolean, JSON>> getOverview(WebUserQueryForm form);
52-
53-
}
50+
}

src/main/java/de/rwth/idsg/steve/repository/impl/WebUserRepositoryImpl.java

+20-10
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import jooq.steve.db.tables.records.WebUserRecord;
2424
import lombok.RequiredArgsConstructor;
2525
import lombok.extern.slf4j.Slf4j;
26+
import org.jooq.Condition;
2627
import org.jooq.DSLContext;
2728
import org.jooq.JSON;
2829
import org.springframework.stereotype.Repository;
@@ -31,6 +32,11 @@
3132
import org.jooq.Record4;
3233
import org.jooq.Result;
3334
import org.jooq.SelectQuery;
35+
36+
import java.util.Arrays;
37+
import java.util.Collections;
38+
import java.util.List;
39+
3440
import static org.jooq.impl.DSL.condition;
3541
import static org.jooq.impl.DSL.count;
3642

@@ -99,10 +105,9 @@ public void changeStatusOfUser(String username, boolean enabled) {
99105

100106
@Override
101107
public Integer getUserCountWithAuthority(String authority) {
102-
JSON authValue = JSON.json("\"" + authority + "\"");
103108
return ctx.selectCount()
104109
.from(WEB_USER)
105-
.where(condition("json_contains({0}, {1})", WEB_USER.AUTHORITIES, authValue))
110+
.where(conditionsForAuthorities(Collections.singletonList(authority)))
106111
.fetchOne(count());
107112
}
108113

@@ -136,7 +141,7 @@ public WebUserRecord loadUserByUsePk(Integer webUserPk) {
136141
.where(WEB_USER.WEB_USER_PK.eq(webUserPk))
137142
.fetchOne();
138143
}
139-
144+
140145
@Override
141146
public Result<Record4<Integer, String, Boolean, JSON>> getOverview(WebUserQueryForm form) {
142147
SelectQuery selectQuery = ctx.selectQuery();
@@ -148,7 +153,7 @@ public Result<Record4<Integer, String, Boolean, JSON>> getOverview(WebUserQueryF
148153
WEB_USER.AUTHORITIES
149154
);
150155

151-
if (form.isSetWebusername()) {
156+
if (form.isSetWebUsername()) {
152157
selectQuery.addConditions(WEB_USER.USERNAME.eq(form.getWebUsername()));
153158
}
154159

@@ -157,13 +162,18 @@ public Result<Record4<Integer, String, Boolean, JSON>> getOverview(WebUserQueryF
157162
}
158163

159164
if (form.isSetRoles()) {
160-
String[] roles = form.getRoles().split(","); //Semicolon seperated String to StringArray
161-
for (String role : roles) {
162-
JSON authValue = JSON.json("\"" + role.strip() + "\""); // strip --> No Withspace
163-
selectQuery.addConditions(condition("json_contains({0}, {1})", WEB_USER.AUTHORITIES, authValue));
164-
}
165+
String[] split = form.getRoles().split(","); //Semicolon seperated String to StringArray
166+
List<String> roles = Arrays.stream(split).map(String::strip).toList();
167+
selectQuery.addConditions(conditionsForAuthorities(roles));
165168
}
166169

167170
return selectQuery.fetch();
168171
}
169-
}
172+
173+
private static List<Condition> conditionsForAuthorities(List<String> authorities) {
174+
return authorities.stream()
175+
.map(it -> JSON.json("\"" + it + "\""))
176+
.map(it -> condition("json_contains({0}, {1})", WEB_USER.AUTHORITIES, it))
177+
.toList();
178+
}
179+
}

src/main/java/de/rwth/idsg/steve/service/WebUserService.java

+13-41
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import de.rwth.idsg.steve.service.dto.WebUserOverview;
2727
import de.rwth.idsg.steve.web.dto.WebUserForm;
2828
import de.rwth.idsg.steve.web.dto.WebUserQueryForm;
29-
import java.util.ArrayList;
3029
import jooq.steve.db.tables.records.WebUserRecord;
3130
import lombok.RequiredArgsConstructor;
3231
import org.jooq.JSON;
@@ -40,6 +39,7 @@
4039
import org.springframework.security.core.userdetails.User;
4140
import org.springframework.security.core.userdetails.UserDetails;
4241
import org.springframework.security.core.userdetails.UsernameNotFoundException;
42+
import org.springframework.security.crypto.password.PasswordEncoder;
4343
import org.springframework.security.provisioning.JdbcUserDetailsManager;
4444
import org.springframework.security.provisioning.UserDetailsManager;
4545
import org.springframework.stereotype.Service;
@@ -51,9 +51,7 @@
5151
import java.util.stream.Collectors;
5252

5353
import static org.springframework.security.authentication.UsernamePasswordAuthenticationToken.authenticated;
54-
import org.springframework.security.core.authority.SimpleGrantedAuthority;
5554
import static org.springframework.security.core.context.SecurityContextHolder.getContextHolderStrategy;
56-
import org.springframework.security.crypto.password.PasswordEncoder;
5755

5856
/**
5957
* Inspired by {@link org.springframework.security.provisioning.JdbcUserDetailsManager}
@@ -167,11 +165,10 @@ public void add(WebUserForm form) {
167165
createUser(toUserDetails(form));
168166
}
169167

170-
171168
public void update(WebUserForm form) {
172169
updateUser(toUserDetails(form));
173170
}
174-
171+
175172
public List<WebUserOverview> getOverview(WebUserQueryForm form) {
176173
return webUserRepository.getOverview(form)
177174
.map(r -> WebUserOverview.builder()
@@ -191,31 +188,16 @@ public WebUserForm getDetails(Integer webUserPk) {
191188
throw new SteveException("There is no user with id '%d'", webUserPk);
192189
}
193190

194-
WebUserForm form = new WebUserForm();
191+
String[] authValues = fromJson(ur.getAuthorities());
192+
String joinedAuthValues = String.join(", ", authValues);
195193

194+
WebUserForm form = new WebUserForm();
196195
form.setEnabled(ur.getEnabled());
197196
form.setWebUsername(ur.getUsername());
198-
form.setPassword(""); // don't expose the pw
199-
form.setApiToken(""); // ur.getApiToken()
200-
form.setAuthorities(rolesStr(fromJson(ur.getAuthorities())));
201-
197+
form.setAuthorities(joinedAuthValues);
202198
return form;
203199
}
204200

205-
private static String rolesStr(String[] authorities) {
206-
String roles = "";
207-
208-
for (String ar : authorities) {
209-
roles = roles + ar + ", ";
210-
}
211-
roles = roles.strip();
212-
if (!roles.isBlank()) { //(roles.endsWith(","))
213-
roles = roles.substring(0, roles.length() - 1);
214-
}
215-
216-
return roles;
217-
}
218-
219201
// Helpers
220202
private WebUserRecord toWebUserRecord(UserDetails user) {
221203
return new WebUserRecord()
@@ -227,17 +209,16 @@ private WebUserRecord toWebUserRecord(UserDetails user) {
227209

228210
private UserDetails toUserDetails(WebUserForm form) {
229211
String encPw = "";
230-
if (form.getPassword()!= null) {
212+
if (form.getPassword() != null) {
231213
//encPw = form.getPassword();
232214
encPw = encoder.encode(form.getPassword());
233215
}
234-
var user = User
235-
.withUsername(form.getWebUsername())
236-
.password(encPw)
237-
.disabled(!form.getEnabled())
238-
.authorities(toAuthorities(form.getAuthorities()))
239-
.build();
240-
return user;
216+
return User
217+
.withUsername(form.getWebUsername())
218+
.password(encPw)
219+
.disabled(!form.getEnabled())
220+
.authorities(form.getAuthorities().split(","))
221+
.build();
241222
}
242223

243224
private String[] fromJson(JSON jsonArray) {
@@ -248,15 +229,6 @@ private String[] fromJson(JSON jsonArray) {
248229
}
249230
}
250231

251-
private Collection<? extends GrantedAuthority> toAuthorities(String authoritiesStr) {
252-
String[] authoritiesList = authoritiesStr.split(",");
253-
List<GrantedAuthority> authorities = new ArrayList<>();
254-
for (String authStr: authoritiesList) {
255-
authorities.add(new SimpleGrantedAuthority(authStr.strip()));
256-
}
257-
return authorities;
258-
}
259-
260232
private JSON toJson(Collection<? extends GrantedAuthority> authorities) {
261233
Collection<String> auths = authorities.stream()
262234
.map(GrantedAuthority::getAuthority)

src/main/java/de/rwth/idsg/steve/web/dto/WebUserForm.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import lombok.Setter;
2323

2424

25-
/**
25+
/**
2626
* @author fnkbsi
2727
* @since 01.04.2022
2828
*/
@@ -37,13 +37,13 @@ public class WebUserForm {
3737

3838
private String webUsername;
3939

40-
private String password;
40+
private String password = ""; // don't expose the pw
4141

4242
private String passwordComparison;
4343

4444
private String authorities;
4545

4646
private Boolean pwError;
4747

48-
private String apiToken;
48+
private String apiToken = "";
4949
}

src/main/java/de/rwth/idsg/steve/web/dto/WebUserQueryForm.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import lombok.Getter;
2525
import lombok.Setter;
2626

27-
/**
27+
/**
2828
* @author fnkbsi
2929
* @since 01.04.2022
3030
*/
@@ -39,7 +39,7 @@ public class WebUserQueryForm {
3939
private String roles;
4040
private String apiToken;
4141

42-
public boolean isSetWebusername() {
42+
public boolean isSetWebUsername() {
4343
return webUsername != null;
4444
}
4545

0 commit comments

Comments
 (0)