| | |
| | | package com.pollex.pam.service; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; |
| | | import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.GrantedAuthority; |
| | | import org.springframework.security.core.authority.SimpleGrantedAuthority; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import com.pollex.pam.domain.Customer; |
| | | import com.pollex.pam.enums.CustomerDetailEnum; |
| | | import com.pollex.pam.repository.CustomerRepository; |
| | | import com.pollex.pam.security.jwt.TokenProvider; |
| | | import com.pollex.pam.security.token.OtpAuthenticationToken; |
| | | import com.pollex.pam.web.rest.vm.OtpAccount; |
| | | |
| | | @Service |
| | | @Transactional |
| | | public class CustomerAuthService { |
| | | |
| | | @Autowired |
| | | AuthenticationManagerBuilder authenticationManagerBuilder; |
| | | |
| | | @Autowired |
| | | CustomerRepository customerRepository; |
| | | |
| | | @Autowired |
| | | TokenProvider tokenProvider; |
| | | |
| | | public String authorize(String account, String indexKey, String otpCode) { |
| | | OtpAccount otpAccount = new OtpAccount(account, indexKey); |
| | | |
| | | public String authorize(Customer account, String indexKey, String otpCode) { |
| | | OtpAccount otpAccount = OtpAccount.createOtpAccount(account, indexKey); |
| | | OtpAuthenticationToken authenticationToken = new OtpAuthenticationToken( |
| | | otpAccount, |
| | | otpCode |
| | | ); |
| | | |
| | | Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); |
| | | SecurityContextHolder.getContext().setAuthentication(authenticationToken); |
| | | |
| | | Authentication authentication = buildCustomerAuthToken(account, otpCode, indexKey); |
| | | String jwt = tokenProvider.createToken(authentication, false); |
| | | return jwt; |
| | | } |
| | | |
| | | public UsernamePasswordAuthenticationToken buildCustomerAuthToken(Customer customer |
| | | , String otpCode, String indexKey) { |
| | | |
| | | List<GrantedAuthority> grantedAuths = Arrays.asList(new SimpleGrantedAuthority("ROLE_USER")); |
| | | |
| | | final String account = customer.toAccountString(); |
| | | UsernamePasswordAuthenticationToken authenticationToken = |
| | | new UsernamePasswordAuthenticationToken(account, otpCode, grantedAuths); |
| | | |
| | | Map<String, String> details = new HashMap<>(); |
| | | details.put(CustomerDetailEnum.ID.getValue(), customer.getId().toString()); |
| | | details.put(CustomerDetailEnum.NAME.getValue(), customer.getName()); |
| | | details.put(CustomerDetailEnum.ACCOUNT.getValue(), account); |
| | | // details.put(CustomerDetailEnum.CONTACT_TYPE.getValue(), customer.getContactType()); |
| | | authenticationToken.setDetails(details); |
| | | |
| | | return authenticationToken; |
| | | } |
| | | } |