Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add Oidc preferred username #3629

Merged
merged 42 commits into from
May 25, 2021
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
55e471e
table Users add column PreferredUsername
vdiskg Apr 3, 2021
e97c949
Users add PreferredUsername sql
vdiskg Apr 3, 2021
48ef240
Users add PreferredUsername page
vdiskg Apr 3, 2021
a9d4510
Users add PreferredUsername app page
vdiskg Apr 3, 2021
1561c5e
update user's info after login
vdiskg Apr 4, 2021
6487608
sql
vdiskg Apr 4, 2021
0f7f5e9
fix unit test
vdiskg Apr 4, 2021
20f8f39
change the page
vdiskg Apr 5, 2021
723e068
fix the unit test timeout
vdiskg Apr 5, 2021
db6afc9
commit page add preferred username
vdiskg Apr 5, 2021
1d4f575
namespace page add preferred username
vdiskg Apr 5, 2021
7850814
release history page add preferred username
vdiskg Apr 5, 2021
4f477e7
preferred username sql
vdiskg Apr 5, 2021
106d1f8
move logic to service
vdiskg Apr 10, 2021
abe329b
fix unit test time out
vdiskg Apr 10, 2021
4d074e8
namespaceService unit test
vdiskg Apr 10, 2021
21d928a
Merge branch 'master' into oidc-preferred-username
vdiskg Apr 10, 2021
5fd63e2
enricher
vdiskg Apr 17, 2021
148289e
name space enrich change
vdiskg Apr 17, 2021
a61e796
CommitService enrich change
vdiskg Apr 17, 2021
78da8f1
revert NamespaceBOUtils
vdiskg Apr 17, 2021
5358d34
namespace branch page
vdiskg Apr 17, 2021
e4de699
enricher adjust
vdiskg Apr 22, 2021
98a3e4f
unit test
vdiskg Apr 22, 2021
c96dca4
user manage page
vdiskg Apr 22, 2021
f88773b
nav page user info fix
vdiskg Apr 23, 2021
1e63a3b
temp
vdiskg May 8, 2021
21580b3
preferred username enrich adjust
vdiskg May 9, 2021
f7ae63a
UserDisplayName
vdiskg May 9, 2021
8e7b163
fix unit test
vdiskg May 9, 2021
030ac20
Merge branch 'fix-unit-test' into oidc-pre-username-temp
vdiskg May 9, 2021
1b39773
Merge remote-tracking branch 'apollo/master' into oidc-preferred-user…
vdiskg May 9, 2021
9e67af2
Merge branch 'master' into oidc-preferred-username
nobodyiam May 15, 2021
223ef17
Update apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/…
vdiskg May 22, 2021
87b0833
cleanup code
vdiskg May 22, 2021
44b6a75
Merge branch 'master' into oidc-preferred-username
nobodyiam May 22, 2021
e04ee8e
License
vdiskg May 22, 2021
cf72a14
add License
vdiskg May 25, 2021
2c58545
License
vdiskg May 22, 2021
021da89
Merge branch 'oidc-pre-temp-2' into oidc-preferred-username
vdiskg May 25, 2021
31c4f79
Merge remote-tracking branch 'apollo/master' into oidc-preferred-user…
vdiskg May 25, 2021
191cdd4
add License
vdiskg May 25, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public class AppDTO extends BaseDTO{

private String ownerName;

private String ownerDisplayName;

private String ownerEmail;

public long getId() {
Expand All @@ -47,52 +49,59 @@ public void setId(long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAppId() {
return appId;
}

public String getName() {
return name;
public void setAppId(String appId) {
this.appId = appId;
}

public String getOrgId() {
return orgId;
}

public void setOrgId(String orgId) {
this.orgId = orgId;
}

public String getOrgName() {
return orgName;
}

public String getOwnerEmail() {
return ownerEmail;
public void setOrgName(String orgName) {
this.orgName = orgName;
}

public String getOwnerName() {
return ownerName;
}

public void setAppId(String appId) {
this.appId = appId;
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}

public void setName(String name) {
this.name = name;
public String getOwnerDisplayName() {
return ownerDisplayName;
}

public void setOrgId(String orgId) {
this.orgId = orgId;
public void setOwnerDisplayName(String ownerDisplayName) {
this.ownerDisplayName = ownerDisplayName;
}

public void setOrgName(String orgName) {
this.orgName = orgName;
public String getOwnerEmail() {
return ownerEmail;
}

public void setOwnerEmail(String ownerEmail) {
this.ownerEmail = ownerEmail;
}

public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ public class BaseDTO {

protected String dataChangeLastModifiedBy;

protected String dataChangeCreatedByDisplayName;

protected String dataChangeLastModifiedByDisplayName;

protected Date dataChangeCreatedTime;

protected Date dataChangeLastModifiedTime;
Expand All @@ -45,6 +49,22 @@ public void setDataChangeLastModifiedBy(String dataChangeLastModifiedBy) {
this.dataChangeLastModifiedBy = dataChangeLastModifiedBy;
}

public String getDataChangeCreatedByDisplayName() {
return dataChangeCreatedByDisplayName;
}

public void setDataChangeCreatedByDisplayName(String dataChangeCreatedByDisplayName) {
this.dataChangeCreatedByDisplayName = dataChangeCreatedByDisplayName;
}

public String getDataChangeLastModifiedByDisplayName() {
return dataChangeLastModifiedByDisplayName;
}

public void setDataChangeLastModifiedByDisplayName(String dataChangeLastModifiedByDisplayName) {
this.dataChangeLastModifiedByDisplayName = dataChangeLastModifiedByDisplayName;
}

public Date getDataChangeCreatedTime() {
return dataChangeCreatedTime;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;

import java.time.Duration;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ExecutorService;
Expand All @@ -62,7 +64,8 @@ public abstract class AbstractBaseIntegrationTest {

private static final Gson GSON = new Gson();

protected RestTemplate restTemplate = (new TestRestTemplate()).getRestTemplate();
protected RestTemplate restTemplate = (new TestRestTemplate(new RestTemplateBuilder()
.setConnectTimeout(Duration.ofSeconds(5)))).getRestTemplate();
vdiskg marked this conversation as resolved.
Show resolved Hide resolved

@PostConstruct
private void postConstruct() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ public void testPollNotificationWthPublicNamespaceAndDataCenter() throws Excepti
assertNotEquals(ConfigConsts.NOTIFICATION_ID_PLACEHOLDER, messages.get(key).longValue());
}

@Test(timeout = 5000L)
@Test(timeout = 10000L)
@Sql(scripts = "/integration-test/test-release.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = "/integration-test/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void testPollNotificationWthMultipleNamespacesAndMultipleNamespacesChanged()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,24 @@
package com.ctrip.framework.apollo.portal.controller;


import com.ctrip.framework.apollo.common.dto.AppDTO;
import com.ctrip.framework.apollo.common.dto.PageDTO;
import com.ctrip.framework.apollo.common.entity.App;
import com.ctrip.framework.apollo.common.exception.BadRequestException;
import com.ctrip.framework.apollo.common.http.MultiResponseEntity;
import com.ctrip.framework.apollo.common.http.RichResponseEntity;
import com.ctrip.framework.apollo.common.utils.BeanUtils;
import com.ctrip.framework.apollo.core.ConfigConsts;
import com.ctrip.framework.apollo.portal.environment.Env;
import com.ctrip.framework.apollo.portal.component.PortalSettings;
import com.ctrip.framework.apollo.portal.enricher.adapter.AppDtoUserInfoEnrichedAdapter;
import com.ctrip.framework.apollo.portal.entity.model.AppModel;
import com.ctrip.framework.apollo.portal.entity.po.Role;
import com.ctrip.framework.apollo.portal.entity.vo.EnvClusterInfo;
import com.ctrip.framework.apollo.portal.environment.Env;
import com.ctrip.framework.apollo.portal.listener.AppCreationEvent;
import com.ctrip.framework.apollo.portal.listener.AppDeletionEvent;
import com.ctrip.framework.apollo.portal.listener.AppInfoChangedEvent;
import com.ctrip.framework.apollo.portal.service.AdditionalUserInfoEnrichService;
import com.ctrip.framework.apollo.portal.service.AppService;
import com.ctrip.framework.apollo.portal.service.RoleInitializationService;
import com.ctrip.framework.apollo.portal.service.RolePermissionService;
Expand All @@ -56,6 +60,7 @@
import org.springframework.web.client.HttpClientErrorException;

import javax.validation.Valid;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
Expand All @@ -71,20 +76,23 @@ public class AppController {
private final ApplicationEventPublisher publisher;
private final RolePermissionService rolePermissionService;
private final RoleInitializationService roleInitializationService;
private final AdditionalUserInfoEnrichService additionalUserInfoEnrichService;

public AppController(
final UserInfoHolder userInfoHolder,
final AppService appService,
final PortalSettings portalSettings,
final ApplicationEventPublisher publisher,
final RolePermissionService rolePermissionService,
final RoleInitializationService roleInitializationService) {
final RoleInitializationService roleInitializationService,
final AdditionalUserInfoEnrichService additionalUserInfoEnrichService) {
this.userInfoHolder = userInfoHolder;
this.appService = appService;
this.portalSettings = portalSettings;
this.publisher = publisher;
this.rolePermissionService = rolePermissionService;
this.roleInitializationService = roleInitializationService;
this.additionalUserInfoEnrichService = additionalUserInfoEnrichService;
}

@GetMapping
Expand Down Expand Up @@ -182,9 +190,12 @@ public ResponseEntity<Void> create(@PathVariable String env, @Valid @RequestBody
}

@GetMapping("/{appId:.+}")
public App load(@PathVariable String appId) {

return appService.load(appId);
public AppDTO load(@PathVariable String appId) {
App app = appService.load(appId);
AppDTO appDto = BeanUtils.transform(AppDTO.class, app);
additionalUserInfoEnrichService.enrichAdditionalUserInfo(Collections.singletonList(appDto),
AppDtoUserInfoEnrichedAdapter::new);
return appDto;
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.ctrip.framework.apollo.portal.enricher;
nobodyiam marked this conversation as resolved.
Show resolved Hide resolved

import com.ctrip.framework.apollo.portal.enricher.adapter.UserInfoEnrichedAdapter;
import com.ctrip.framework.apollo.portal.entity.bo.UserInfo;
import java.util.Map;

/**
* @author vdisk <vdisk@foxmail.com>
*/
public interface AdditionalUserInfoEnricher {

/**
* enrich an additional user info for the dto list
*
* @param adapter enrich adapter
* @param userInfoMap userInfo map
*/
void enrichAdditionalUserInfo(UserInfoEnrichedAdapter adapter, Map<String, UserInfo> userInfoMap);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.ctrip.framework.apollo.portal.enricher.adapter;

import com.ctrip.framework.apollo.common.dto.AppDTO;

/**
* @author vdisk <vdisk@foxmail.com>
*/
public class AppDtoUserInfoEnrichedAdapter implements UserInfoEnrichedAdapter {

private final AppDTO dto;

public AppDtoUserInfoEnrichedAdapter(AppDTO dto) {
this.dto = dto;
}

@Override
public final String getFirstUserId() {
return this.dto.getDataChangeCreatedBy();
}

@Override
public final void setFirstUserDisplayName(String userDisplayName) {
this.dto.setDataChangeCreatedByDisplayName(userDisplayName);
}

@Override
public final String getSecondUserId() {
return this.dto.getDataChangeLastModifiedBy();
}

@Override
public final void setSecondUserDisplayName(String userDisplayName) {
this.dto.setDataChangeLastModifiedByDisplayName(userDisplayName);
}

@Override
public final String getThirdUserId() {
return this.dto.getOwnerName();
}

@Override
public final void setThirdUserDisplayName(String userDisplayName) {
this.dto.setOwnerDisplayName(userDisplayName);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.ctrip.framework.apollo.portal.enricher.adapter;

import com.ctrip.framework.apollo.common.dto.BaseDTO;

/**
* @author vdisk <vdisk@foxmail.com>
*/
public class BaseDtoUserInfoEnrichedAdapter implements UserInfoEnrichedAdapter {

private final BaseDTO dto;

public BaseDtoUserInfoEnrichedAdapter(BaseDTO dto) {
this.dto = dto;
}

@Override
public final String getFirstUserId() {
return this.dto.getDataChangeCreatedBy();
}

@Override
public final void setFirstUserDisplayName(String userDisplayName) {
this.dto.setDataChangeCreatedByDisplayName(userDisplayName);
}

@Override
public final String getSecondUserId() {
return this.dto.getDataChangeLastModifiedBy();
}

@Override
public final void setSecondUserDisplayName(String userDisplayName) {
this.dto.setDataChangeLastModifiedByDisplayName(userDisplayName);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.ctrip.framework.apollo.portal.enricher.adapter;

/**
* @author vdisk <vdisk@foxmail.com>
*/
public interface UserInfoEnrichedAdapter {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This abstraction looks good to me.


/**
* get user id from the object
*
* @return user id
*/
String getFirstUserId();

/**
* set the user display name for the object
*
* @param userDisplayName user display name
*/
void setFirstUserDisplayName(String userDisplayName);

/**
* get operator id from the object
*
* @return operator id
*/
default String getSecondUserId() {
return null;
}

/**
* set the user display name for the object
*
* @param userDisplayName user display name
*/
default void setSecondUserDisplayName(String userDisplayName) {
}

/**
* get operator id from the object
*
* @return operator id
*/
default String getThirdUserId() {
return null;
}

/**
* set the user display name for the object
*
* @param userDisplayName user display name
*/
default void setThirdUserDisplayName(String userDisplayName) {
}
}
Loading