mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-08 14:35:45 +01:00
Add fallback email to me dto
This commit is contained in:
@@ -27,7 +27,8 @@ import { Links } from "./hal";
|
|||||||
export type Me = {
|
export type Me = {
|
||||||
name: string;
|
name: string;
|
||||||
displayName: string;
|
displayName: string;
|
||||||
mail: string;
|
mail?: string;
|
||||||
|
fallbackMail?: string;
|
||||||
groups: string[];
|
groups: string[];
|
||||||
_links: Links;
|
_links: Links;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
package sonia.scm.api.v2.resources;
|
package sonia.scm.api.v2.resources;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import de.otto.edison.hal.Embedded;
|
import de.otto.edison.hal.Embedded;
|
||||||
import de.otto.edison.hal.HalRepresentation;
|
import de.otto.edison.hal.HalRepresentation;
|
||||||
import de.otto.edison.hal.Links;
|
import de.otto.edison.hal.Links;
|
||||||
@@ -40,7 +41,10 @@ public class MeDto extends HalRepresentation {
|
|||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private String displayName;
|
private String displayName;
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
private String mail;
|
private String mail;
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
private String fallbackMail;
|
||||||
private Set<String> groups;
|
private Set<String> groups;
|
||||||
|
|
||||||
MeDto(Links links, Embedded embedded) {
|
MeDto(Links links, Embedded embedded) {
|
||||||
|
|||||||
@@ -24,12 +24,14 @@
|
|||||||
|
|
||||||
package sonia.scm.api.v2.resources;
|
package sonia.scm.api.v2.resources;
|
||||||
|
|
||||||
|
import com.google.common.base.Strings;
|
||||||
import de.otto.edison.hal.Embedded;
|
import de.otto.edison.hal.Embedded;
|
||||||
import de.otto.edison.hal.Links;
|
import de.otto.edison.hal.Links;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
import org.apache.shiro.subject.PrincipalCollection;
|
import org.apache.shiro.subject.PrincipalCollection;
|
||||||
import org.apache.shiro.subject.Subject;
|
import org.apache.shiro.subject.Subject;
|
||||||
import sonia.scm.group.GroupCollector;
|
import sonia.scm.group.GroupCollector;
|
||||||
|
import sonia.scm.user.EMail;
|
||||||
import sonia.scm.user.User;
|
import sonia.scm.user.User;
|
||||||
import sonia.scm.user.UserManager;
|
import sonia.scm.user.UserManager;
|
||||||
import sonia.scm.user.UserPermissions;
|
import sonia.scm.user.UserPermissions;
|
||||||
@@ -46,12 +48,14 @@ public class MeDtoFactory extends HalAppenderMapper {
|
|||||||
private final ResourceLinks resourceLinks;
|
private final ResourceLinks resourceLinks;
|
||||||
private final UserManager userManager;
|
private final UserManager userManager;
|
||||||
private final GroupCollector groupCollector;
|
private final GroupCollector groupCollector;
|
||||||
|
private final EMail eMail;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public MeDtoFactory(ResourceLinks resourceLinks, UserManager userManager, GroupCollector groupCollector) {
|
public MeDtoFactory(ResourceLinks resourceLinks, UserManager userManager, GroupCollector groupCollector, EMail eMail) {
|
||||||
this.resourceLinks = resourceLinks;
|
this.resourceLinks = resourceLinks;
|
||||||
this.userManager = userManager;
|
this.userManager = userManager;
|
||||||
this.groupCollector = groupCollector;
|
this.groupCollector = groupCollector;
|
||||||
|
this.eMail = eMail;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MeDto create() {
|
public MeDto create() {
|
||||||
@@ -61,6 +65,7 @@ public class MeDtoFactory extends HalAppenderMapper {
|
|||||||
MeDto dto = createDto(user);
|
MeDto dto = createDto(user);
|
||||||
mapUserProperties(user, dto);
|
mapUserProperties(user, dto);
|
||||||
mapGroups(user, dto);
|
mapGroups(user, dto);
|
||||||
|
setGeneratedMail(user, dto);
|
||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +84,12 @@ public class MeDtoFactory extends HalAppenderMapper {
|
|||||||
return subject.getPrincipals();
|
return subject.getPrincipals();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setGeneratedMail(User user, MeDto dto) {
|
||||||
|
if (Strings.isNullOrEmpty(user.getMail())) {
|
||||||
|
dto.setFallbackMail(eMail.createFallbackMailAddress(user));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private MeDto createDto(User user) {
|
private MeDto createDto(User user) {
|
||||||
Links.Builder linksBuilder = linkingTo().self(resourceLinks.me().self());
|
Links.Builder linksBuilder = linkingTo().self(resourceLinks.me().self());
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ import org.mockito.junit.jupiter.MockitoSettings;
|
|||||||
import org.mockito.quality.Strictness;
|
import org.mockito.quality.Strictness;
|
||||||
import sonia.scm.SCMContext;
|
import sonia.scm.SCMContext;
|
||||||
import sonia.scm.group.GroupCollector;
|
import sonia.scm.group.GroupCollector;
|
||||||
|
import sonia.scm.user.EMail;
|
||||||
import sonia.scm.user.User;
|
import sonia.scm.user.User;
|
||||||
import sonia.scm.user.UserManager;
|
import sonia.scm.user.UserManager;
|
||||||
import sonia.scm.user.UserPermissions;
|
|
||||||
import sonia.scm.user.UserTestData;
|
import sonia.scm.user.UserTestData;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
@@ -65,13 +65,16 @@ class MeDtoFactoryTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private Subject subject;
|
private Subject subject;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private EMail eMail;
|
||||||
|
|
||||||
private MeDtoFactory meDtoFactory;
|
private MeDtoFactory meDtoFactory;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUpContext() {
|
void setUpContext() {
|
||||||
ThreadContext.bind(subject);
|
ThreadContext.bind(subject);
|
||||||
ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri);
|
ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri);
|
||||||
meDtoFactory = new MeDtoFactory(resourceLinks, userManager, groupCollector);
|
meDtoFactory = new MeDtoFactory(resourceLinks, userManager, groupCollector, eMail);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterEach
|
@AfterEach
|
||||||
@@ -235,4 +238,17 @@ class MeDtoFactoryTest {
|
|||||||
MeDto dto = meDtoFactory.create();
|
MeDto dto = meDtoFactory.create();
|
||||||
assertThat(dto.getLinks().getLinkBy("profile").get().getHref()).isEqualTo("http://hitchhiker.com/users/trillian");
|
assertThat(dto.getLinks().getLinkBy("profile").get().getHref()).isEqualTo("http://hitchhiker.com/users/trillian");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldUserGeneratedMailOnlyWhenUserHasNone() {
|
||||||
|
User user = UserTestData.createTrillian();
|
||||||
|
user.setMail(null);
|
||||||
|
prepareSubject(user);
|
||||||
|
when(eMail.createFallbackMailAddress(user)).thenReturn("trillian@hitchhiker.local");
|
||||||
|
|
||||||
|
MeDto dto = meDtoFactory.create();
|
||||||
|
|
||||||
|
assertThat(dto.getMail()).isNull();
|
||||||
|
assertThat(dto.getFallbackMail()).isEqualTo("trillian@hitchhiker.local");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user