Skip to content

Commit 13976fb

Browse files
Also enable the storage of the oidc information of the myself contact during the edit case
1 parent ac91f1e commit 13976fb

File tree

8 files changed

+55
-19
lines changed

8 files changed

+55
-19
lines changed

Diff for: project-management/src/main/java/life/qbic/projectmanagement/application/authorization/QbicOidcUser.java

+15-10
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ public class QbicOidcUser extends DefaultOidcUser {
2020
private final transient QbicUserInfo qbicUserInfo;
2121
private final String originalAuthName;
2222

23-
public record QbicUserInfo(String userId, String fullName, String email, boolean active) {
24-
23+
public QbicOidcUser(Collection<? extends GrantedAuthority> authorities, OidcIdToken idToken,
24+
OidcUserInfo userInfo, QbicUserInfo qbicUserInfo) {
25+
super(authorities, idToken, userInfo);
26+
this.qbicUserInfo = requireNonNull(qbicUserInfo, "qbicUserInfo must not be null");
27+
this.originalAuthName = super.getName();
2528
}
2629

2730
@Override
@@ -46,13 +49,6 @@ public int hashCode() {
4649
return result;
4750
}
4851

49-
public QbicOidcUser(Collection<? extends GrantedAuthority> authorities, OidcIdToken idToken,
50-
OidcUserInfo userInfo, QbicUserInfo qbicUserInfo) {
51-
super(authorities, idToken, userInfo);
52-
this.qbicUserInfo = requireNonNull(qbicUserInfo, "qbicUserInfo must not be null");
53-
this.originalAuthName = super.getName();
54-
}
55-
5652
public String getQbicUserId() {
5753
return qbicUserInfo.userId();
5854
}
@@ -73,10 +69,19 @@ public String getName() {
7369
}
7470

7571
public String getOidcId() {
76-
return originalAuthName;
72+
return Optional.ofNullable(originalAuthName).orElse(qbicUserInfo.oidc());
73+
}
74+
75+
public String getOidcIssuer() {
76+
return Optional.ofNullable(super.getIssuer().toString()).orElse(qbicUserInfo.oidcIssuer());
7777
}
7878

7979
public boolean isActive() {
8080
return qbicUserInfo.active();
8181
}
82+
83+
public record QbicUserInfo(String userId, String fullName, String email, boolean active,
84+
String oidc, String oidcIssuer) {
85+
86+
}
8287
}

Diff for: project-management/src/main/java/life/qbic/projectmanagement/application/authorization/QbicUserDetails.java

+8
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,14 @@ public String fullName() {
7272
return user.fullName();
7373
}
7474

75+
public String oidc() {
76+
return user.oidc();
77+
}
78+
79+
public String oidcIssuer() {
80+
return user.oidcIssuer();
81+
}
82+
7583
@Override
7684
public boolean isAccountNonExpired() {
7785
return true;

Diff for: project-management/src/main/java/life/qbic/projectmanagement/application/authorization/User.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
*/
88
public record User(String id, String fullName, String platformUserName, String emailAddress,
99
String encryptedPassword,
10-
boolean isActive) {
10+
boolean isActive, String oidc, String oidcIssuer) {
1111

1212
}

Diff for: user-interface/src/main/java/life/qbic/datamanager/security/OidcUserDetailsService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2Authenticatio
4545
var authorities = userAuthorityProvider.getAuthoritiesByUserId(
4646
user.id());
4747
QbicUserInfo qbicUserInfo = new QbicUserInfo(user.id(), user.fullName(), user.emailAddress(),
48-
user.isActive());
48+
user.isActive(), user.oidcId(), user.oidcIssuer());
4949
return new QbicOidcUser(authorities, userRequest.getIdToken(),
5050
defaultOidcUser.getUserInfo(), qbicUserInfo);
5151
}

Diff for: user-interface/src/main/java/life/qbic/datamanager/security/UserDetailsServiceImpl.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public UserDetails loadUserByUsername(String mailAddress) throws UsernameNotFoun
4848
userInfo.id());
4949
var user = new User(userInfo.id(), userInfo.fullName(), userInfo.platformUserName(),
5050
userInfo.emailAddress(),
51-
encryptedPassword.orElseGet(null), userInfo.isActive());
51+
encryptedPassword.orElseGet(null), userInfo.isActive(), userInfo.oidcId(),
52+
userInfo.oidcIssuer());
5253
return new QbicUserDetails(user, authorities);
5354
}
5455
}

Diff for: user-interface/src/main/java/life/qbic/datamanager/views/general/contact/BoundContactField.java

+12
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ private static Binder<ContactContainer> createBinder(SerializablePredicate<Conta
107107
.bind(ContactContainer::getEmail, ContactContainer::setEmail);
108108
binder.forField(contactField.getFullNameTextField())
109109
.bind(ContactContainer::getFullName, ContactContainer::setFullName);
110+
binder.forField(contactField.getOidcSelection())
111+
.bind(ContactContainer::getOidcSelection, ContactContainer::setOidcSelection);
110112
return binder;
111113
}
112114

@@ -182,5 +184,15 @@ public void setFullName(String fullName) {
182184
}
183185
}
184186

187+
public Contact getOidcSelection() {
188+
return contact;
189+
}
190+
191+
public void setOidcSelection(Contact oidcSelection) {
192+
if (oidcSelection != null && contact != null) {
193+
contact.setOidc(oidcSelection.oidc());
194+
contact.setOidcIssuer(oidcSelection.oidcIssuer());
195+
}
196+
}
185197
}
186198
}

Diff for: user-interface/src/main/java/life/qbic/datamanager/views/general/contact/ContactField.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ private ContactField(String label, PersonLookupService personLookupService) {
4545
add(layoutFields(setMyselfCheckBox, layoutFields(fullName, email)), orcidSelection);
4646
hideCheckbox(); // default is to hide the set myself checkbox
4747
setMyselfCheckBox.addValueChangeListener(listener -> {
48-
orcidSelection.setValue(null);
4948
if (isChecked(listener.getSource())) {
5049
loadContact(this, myself);
5150
}
@@ -131,7 +130,8 @@ private ComboBox<Contact> createSelection(PersonLookupService personLookupServic
131130
.map(contact -> new Contact(contact.fullName(), contact.emailAddress(), contact.oidc(),
132131
contact.oidcIssuer()
133132
)));
134-
personSelection.addValueChangeListener(listener -> loadContact(this, listener.getValue()));
133+
personSelection.addValueChangeListener(listener ->
134+
loadContact(this, listener.getValue()));
135135
return personSelection;
136136
}
137137

@@ -170,7 +170,10 @@ protected void setPresentationValue(Contact contact) {
170170
if (contact != null) {
171171
fullName.setValue(contact.fullName());
172172
email.setValue(contact.email());
173-
orcidSelection.setValue(contact);
173+
//If oidc information is within the contact we can set the field to the correct value
174+
if (contact.isComplete()) {
175+
orcidSelection.setValue(contact);
176+
}
174177
}
175178
}
176179

@@ -196,6 +199,10 @@ public TextField getFullNameTextField() {
196199
return fullName;
197200
}
198201

202+
public ComboBox<Contact> getOidcSelection() {
203+
return orcidSelection;
204+
}
205+
199206
private void removeErrors() {
200207
email.setInvalid(false);
201208
fullName.setInvalid(false);

Diff for: user-interface/src/main/java/life/qbic/datamanager/views/general/utils/Utility.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.vaadin.flow.component.textfield.TextField;
55
import java.util.Optional;
66
import life.qbic.datamanager.views.general.contact.Contact;
7-
import life.qbic.datamanager.views.general.oidc.OidcType;
87
import life.qbic.projectmanagement.application.authorization.QbicOidcUser;
98
import life.qbic.projectmanagement.application.authorization.QbicUserDetails;
109
import org.springframework.security.core.context.SecurityContextHolder;
@@ -34,17 +33,21 @@ public static Optional<Contact> tryToLoadFromPrincipal() {
3433
var principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
3534
String fullName;
3635
String emailAddress;
37-
String oidc = "";
36+
String oidc;
37+
String oidcIssuer;
3838
if (principal instanceof QbicUserDetails qbicUserDetails) {
3939
fullName = qbicUserDetails.fullName();
4040
emailAddress = qbicUserDetails.getEmailAddress();
41+
oidc = qbicUserDetails.oidc();
42+
oidcIssuer = qbicUserDetails.oidcIssuer();
4143
} else if (principal instanceof QbicOidcUser qbicOidcUser) {
4244
fullName = qbicOidcUser.getFullName();
4345
emailAddress = qbicOidcUser.getEmail();
4446
oidc = qbicOidcUser.getOidcId();
47+
oidcIssuer = qbicOidcUser.getOidcIssuer();
4548
} else {
4649
return Optional.empty();
4750
}
48-
return Optional.of(new Contact(fullName, emailAddress, oidc, OidcType.ORCID.getIssuer()));
51+
return Optional.of(new Contact(fullName, emailAddress, oidc, oidcIssuer));
4952
}
5053
}

0 commit comments

Comments
 (0)