Skip to content

Commit d60092f

Browse files
gaetanbrlGaetanbrl
authored andcommitted
use email to find valid and pending users
expose pending georchestraUser attribute
1 parent cfa70a6 commit d60092f

5 files changed

Lines changed: 30 additions & 3 deletions

File tree

commons/src/main/java/org/georchestra/security/api/UsersApi.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ public interface UsersApi {
4040
*/
4141
Optional<GeorchestraUser> findByEmail(String email);
4242

43+
/**
44+
* Find pending and validated user by {@link GeorchestraUser#getEmail() email}
45+
*/
46+
Optional<GeorchestraUser> findByEmail(String email, boolean filterPending);
47+
4348
default Optional<GeorchestraUser> findByOAuth2Uid(String oauth2Provider, String oauth2Uid) {
4449
return Optional.empty();
4550
};

commons/src/main/java/org/georchestra/security/model/GeorchestraUser.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ public class GeorchestraUser implements Serializable {
8989
/** Maps to Account.getOAuth2Provider */
9090
private String oAuth2Provider;
9191

92+
/** Maps to Account.isPending */
93+
private Boolean pending;
94+
9295
/** Maps to Account.getOAuth2Uid */
9396
private String oAuth2Uid;
9497

@@ -101,4 +104,8 @@ public class GeorchestraUser implements Serializable {
101104
public void setRoles(List<String> roles) {
102105
this.roles = roles == null ? new ArrayList<>() : roles;
103106
}
107+
108+
public Boolean isPending() {
109+
return this.pending;
110+
}
104111
}

ldap-account-management/src/main/java/org/georchestra/ds/security/UsersApiImpl.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,17 @@ public Optional<GeorchestraUser> findByOAuth2Uid(String oauth2Provider, String o
9898

9999
@Override
100100
public Optional<GeorchestraUser> findByEmail(String email) {
101+
return findByEmail(email, true);
102+
}
103+
104+
public Optional<GeorchestraUser> findByEmail(String email, boolean filterPending) {
101105
try {
102-
return Optional.of(this.accountsDao.findByEmail(email))//
103-
.filter(notPending().and(notProtected()))//
104-
.map(mapper::map);
106+
Predicate<Account> predicate = notProtected();
107+
if (filterPending) {
108+
predicate = predicate.and(notPending());
109+
}
110+
111+
return Optional.ofNullable(accountsDao.findByEmail(email)).filter(predicate).map(mapper::map);
105112
} catch (NameNotFoundException e) {
106113
return Optional.empty();
107114
} catch (DataServiceException e) {

ldap-account-management/src/main/java/org/georchestra/ds/users/AccountImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ public class AccountImpl implements Serializable, Account {
169169
// Json export is defined on the getter getOrg()
170170
private String org;
171171
private String orgDisplayName;
172+
173+
@JsonProperty(UserSchema.PENDING)
172174
private boolean pending;
173175
private boolean isExternalAuth;
174176

security-proxy-spring-integration/src/main/java/org/georchestra/security/client/console/GeorchestraConsoleUsersApiImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,10 @@ public Optional<GeorchestraUser> findByEmail(String email) {
6767
Objects.requireNonNull(email);
6868
return client.get("/console/internal/users/email/{email}", GeorchestraUser.class, email);
6969
}
70+
71+
@Override
72+
public Optional<GeorchestraUser> findByEmail(String email, boolean filterPending) {
73+
Objects.requireNonNull(email);
74+
return client.get("/console/internal/users/all/email/{email}", GeorchestraUser.class, email);
75+
}
7076
}

0 commit comments

Comments
 (0)