Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
@@ -0,0 +1,43 @@
package com.synapse.account_service.convert;

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

import com.synapse.account_service.domain.ProviderUser;

@Component
public final class DelegatingProviderUserConverter implements ProviderUserConverter<ProviderUserRequest, ProviderUser> {

private final List<ProviderUserConverter<ProviderUserRequest, ProviderUser>> converters;

public DelegatingProviderUserConverter() {

List<ProviderUserConverter<ProviderUserRequest, ProviderUser>> providerUserConverters = Arrays.asList(
new UserDetailsProviderUserConverter(),
new OAuth2GoogleProviderUserConverter(),
new OAuth2KakaoProviderUserConverter(),
new OAuth2KakaoOidcProviderUserConverter());

this.converters = Collections.unmodifiableList(new LinkedList<>(providerUserConverters));
}

@Nullable
@Override
public ProviderUser convert(ProviderUserRequest providerUserRequest) {
Assert.notNull(providerUserRequest, "providerUserRequest cannot be null");

for (ProviderUserConverter<ProviderUserRequest, ProviderUser> converter : this.converters) {
ProviderUser providerUser = converter.convert(providerUserRequest);
if (providerUser != null) {
return providerUser;
}
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.synapse.account_service.convert;

import com.synapse.account_service.domain.ProviderUser;
import com.synapse.account_service.domain.enums.OAuth2Config;
import com.synapse.account_service.domain.socials.GoogleUser;
import com.synapse.account_service.util.OAuth2Utils;

public final class OAuth2GoogleProviderUserConverter implements ProviderUserConverter<ProviderUserRequest, ProviderUser> {

@Override
public ProviderUser convert(ProviderUserRequest providerUserRequest) {

if (!providerUserRequest.clientRegistration().getRegistrationId().equals(OAuth2Config.SocialType.GOOGLE.getSocialName())) {
return null;
}

return new GoogleUser(OAuth2Utils.getMainAttributes(
providerUserRequest.oAuth2User()),
providerUserRequest.oAuth2User(),
providerUserRequest.clientRegistration());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.synapse.account_service.convert;

import org.springframework.security.oauth2.core.oidc.user.OidcUser;

import com.synapse.account_service.domain.ProviderUser;
import com.synapse.account_service.domain.enums.OAuth2Config;
import com.synapse.account_service.domain.socials.KakaoOidcUser;
import com.synapse.account_service.util.OAuth2Utils;

public final class OAuth2KakaoOidcProviderUserConverter implements ProviderUserConverter<ProviderUserRequest, ProviderUser> {

@Override
public ProviderUser convert(ProviderUserRequest providerUserRequest) {

if (!providerUserRequest.clientRegistration().getRegistrationId().equals(OAuth2Config.SocialType.KAKAO.getSocialName())) {
return null;
}

if (!(providerUserRequest.oAuth2User() instanceof OidcUser)) {
return null;
}

return new KakaoOidcUser(OAuth2Utils.getMainAttributes(
providerUserRequest.oAuth2User()),
providerUserRequest.oAuth2User(),
providerUserRequest.clientRegistration());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.synapse.account_service.convert;

import org.springframework.security.oauth2.core.oidc.user.OidcUser;

import com.synapse.account_service.domain.ProviderUser;
import com.synapse.account_service.domain.enums.OAuth2Config;
import com.synapse.account_service.domain.socials.KakaoUser;
import com.synapse.account_service.util.OAuth2Utils;

public final class OAuth2KakaoProviderUserConverter implements ProviderUserConverter<ProviderUserRequest, ProviderUser> {

@Override
public ProviderUser convert(ProviderUserRequest providerUserRequest) {

if (!providerUserRequest.clientRegistration().getRegistrationId().equals(OAuth2Config.SocialType.KAKAO.getSocialName())) {
return null;
}

if (providerUserRequest.oAuth2User() instanceof OidcUser) {
return null;
}

return new KakaoUser(OAuth2Utils.getOtherAttributes(
providerUserRequest.oAuth2User(), "kakao_account", "profile"),
providerUserRequest.oAuth2User(),
providerUserRequest.clientRegistration());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.synapse.account_service.convert;

public interface ProviderUserConverter<T, R> {
R convert(T t);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.synapse.account_service.convert;

import com.synapse.account_service.domain.Member;
import com.synapse.account_service.domain.ProviderUser;
import com.synapse.account_service.domain.forms.FormUser;

public final class UserDetailsProviderUserConverter implements ProviderUserConverter<ProviderUserRequest, ProviderUser> {

@Override
public ProviderUser convert(ProviderUserRequest providerUserRequest) {

Member member = providerUserRequest.member();

return FormUser.builder()
.id(member.getId())
.username(member.getUsername())
.password(member.getPassword())
.email(member.getEmail())
.provider(member.getProvider())
.authorities(member.getRole().getAuthorities())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.synapse.account_service.domain;

import java.util.Map;

import lombok.Builder;
import lombok.Getter;

@Getter
public class Attributes {

private Map<String, Object> mainAttributes;
private Map<String, Object> subAttributes;
private Map<String, Object> otherAttributes;

public Attributes(Map<String, Object> mainAttributes) {
this.mainAttributes = mainAttributes;
}

@Builder
public Attributes(Map<String, Object> mainAttributes, Map<String, Object> subAttributes, Map<String, Object> otherAttributes) {
this.mainAttributes = mainAttributes;
this.subAttributes = subAttributes;
this.otherAttributes = otherAttributes;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,11 @@ public Map<String, Object> getClaims() {

@Override
public OidcUserInfo getUserInfo() {
return providerUser != null ? providerUser.getUserInfo() : null;
return null;
}

@Override
public OidcIdToken getIdToken() {
return providerUser != null ? providerUser.getIdToken() : null;
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import java.util.Map;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.oauth2.core.oidc.OidcIdToken;
import org.springframework.security.oauth2.core.oidc.OidcUserInfo;
import org.springframework.security.oauth2.core.user.OAuth2User;

public interface ProviderUser {
Expand All @@ -26,8 +24,4 @@ public interface ProviderUser {
Map<String, Object> getAttributes();

OAuth2User getOAuth2User();

OidcIdToken getIdToken();

OidcUserInfo getUserInfo();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.synapse.account_service.domain.enums;

public class OAuth2Config {
public enum SocialType {
GOOGLE("google"),
KAKAO("kakao");

private final String socialName;

private SocialType(String socialName) {
this.socialName = socialName;
}

public String getSocialName() {
return socialName;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import java.util.UUID;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.oauth2.core.oidc.OidcIdToken;
import org.springframework.security.oauth2.core.oidc.OidcUserInfo;
import org.springframework.security.oauth2.core.user.OAuth2User;

import com.synapse.account_service.domain.ProviderUser;
Expand Down Expand Up @@ -70,14 +68,4 @@ public Map<String, Object> getAttributes() {
public OAuth2User getOAuth2User() {
return null;
}

@Override
public OidcIdToken getIdToken() {
return null;
}

@Override
public OidcUserInfo getUserInfo() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,14 @@
package com.synapse.account_service.domain.socials;

import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.core.oidc.OidcIdToken;
import org.springframework.security.oauth2.core.oidc.OidcUserInfo;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.oauth2.core.user.OAuth2User;

import com.synapse.account_service.domain.ProviderUser;

public class GoogleUser implements ProviderUser {
import com.synapse.account_service.domain.Attributes;

private Map<String, Object> attributes;
private OAuth2User oAuth2User;
private ClientRegistration clientRegistration;
public class GoogleUser extends OAuth2ProviderUser {

public GoogleUser(Map<String, Object> attributes, OAuth2User oAuth2User, ClientRegistration clientRegistration) {
this.attributes = attributes;
this.oAuth2User = oAuth2User;
this.clientRegistration = clientRegistration;
public GoogleUser(Attributes attributes, OAuth2User oAuth2User, ClientRegistration clientRegistration) {
super(attributes.getMainAttributes(), oAuth2User, clientRegistration);
}

@Override
Expand All @@ -41,54 +25,4 @@ public String getUsername() {
public String getPicture() {
return null;
}

@Override
public String getPassword() {
return UUID.randomUUID().toString();
}

@Override
public String getEmail() {
return (String) attributes.get("email");
}

@Override
public String getProvider() {
return clientRegistration.getRegistrationId();
}

@Override
public List<? extends GrantedAuthority> getAuthorities() {
return oAuth2User.getAuthorities().stream()
.map(authority -> new SimpleGrantedAuthority(authority.getAuthority())).collect(Collectors.toList());
}

@Override
public Map<String, Object> getAttributes() {
return this.attributes;
}

@Override
public OAuth2User getOAuth2User() {
return this.oAuth2User;
}

@Override
public OidcIdToken getIdToken() {
if(oAuth2User instanceof OidcUser) {
OidcUser oidcUser = (OidcUser) oAuth2User;
return oidcUser.getIdToken();
}
return null;
}

@Override
public OidcUserInfo getUserInfo() {
if(oAuth2User instanceof OidcUser) {
OidcUser oidcUser = (OidcUser) oAuth2User;
return oidcUser.getUserInfo();
}
return null;
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.synapse.account_service.domain.socials;

import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.core.user.OAuth2User;

import com.synapse.account_service.domain.Attributes;

public class KakaoOidcUser extends OAuth2ProviderUser {

public KakaoOidcUser(Attributes attributes, OAuth2User oAuth2User, ClientRegistration clientRegistration) {
super(attributes.getMainAttributes(), oAuth2User, clientRegistration);
}

@Override
public String getId() {
return (String) getAttributes().get("id");
}

@Override
public String getUsername() {
return (String) getAttributes().get("nickname");
}

@Override
public String getPicture() {
return (String) getAttributes().get("profile_image_url");
}
}
Loading
Loading