diff --git a/pom.xml b/pom.xml index 3cea4a6..31b6f31 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ru.simplex2 vkid_spring_security - 1.2-SNAPSHOT + 1.5-SNAPSHOT vkid_spring_security A simple vkid_spring_security. diff --git a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.java b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.java index 64cc6b1..88be2c1 100644 --- a/src/main/java/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.java +++ b/src/main/java/ru/simplex2/vkid_spring_security/vk/VkEndAuthFilter.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.function.Consumer; public class VkEndAuthFilter extends AbstractAuthenticationProcessingFilter { private static final Logger LOG = LoggerFactory.getLogger(VkEndAuthFilter.class); @@ -88,19 +89,51 @@ ResponseEntity userDataResponseEntity = restTemplate.postForEntity("https://id.vk.ru/oauth2/user_info", userDataRequestEntity, Map.class); Map userData = (Map) userDataResponseEntity.getBody().get("user"); - VkUser vkUser = new VkUser(); - vkUser.setUserId(Long.valueOf(userData.get("user_id").toString())); - vkUser.setSex(Integer.valueOf(userData.get("sex").toString())); - vkUser.setFirstName(userData.get("first_name") == null ? null : userData.get("first_name").toString()); - vkUser.setLastName(userData.get("last_name") == null ? null : userData.get("last_name").toString()); - vkUser.setAvatar(userData.get("avatar") == null ? null : userData.get("avatar").toString()); - vkUser.setEmail(userData.get("email") == null ? null : userData.get("email").toString()); - vkUser.setPhone(userData.get("phone") == null ? null : userData.get("phone").toString()); - vkUser.setBirthday(userData.get("birthday") == null ? null : LocalDate.parse(userData.get("birthday").toString(), DateTimeFormatter.ofPattern("dd.MM.yyyy"))); + if (userData == null) { + LOG.error("Response body returned from https://id.vk.ru/oauth2/user_info is null"); + return null; + } + VkUser vkUser = createVkUser(userData); List authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority("ROLE_USER")); VkOAuth2AuthenticationToken authRequest = new VkOAuth2AuthenticationToken(authorities, vkUser); return authenticationManager.authenticate(authRequest); } + + private VkUser createVkUser(Map userData) { + VkUser vkUser = new VkUser(); + + if (userData.get("user_id") == null) { + LOG.error("Required parameter 'user_id' from 'https://id.vk.ru/oauth2/user_info' response is null"); + vkUser.setUserId(null); + } else { + vkUser.setUserId(Long.parseLong(userData.get("user_id").toString())); + } + + if (userData.get("sex") == null) { + LOG.error("Required parameter 'sex' from 'https://id.vk.ru/oauth2/user_info' response is null"); + vkUser.setSex(null); + } else { + vkUser.setSex(Integer.parseInt(userData.get("sex").toString())); + } + + setUserField("first_name", vkUser::setFirstName, userData); + setUserField("last_name", vkUser::setLastName, userData); + setUserField("avatar", vkUser::setAvatar, userData); + setUserField("email", vkUser::setEmail, userData); + setUserField("phone", vkUser::setPhone, userData); + + vkUser.setBirthday(userData.get("birthday") == null ? null : LocalDate.parse(userData.get("birthday").toString(), DateTimeFormatter.ofPattern("dd.MM.yyyy"))); + return vkUser; + } + + private void setUserField(String key, Consumer consumer, Map userData){ + if (userData.get(key) == null) { + LOG.error("Required key '{}' value from 'https://id.vk.ru/oauth2/user_info' response is null", key); + consumer.accept(null); + } else { + consumer.accept(userData.get(key).toString()); + } + } }