package nlib.cmm.crypto;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import egovframework.rte.fdl.cryptography.EgovPasswordEncoder;

/**
 * <pre>
 * @Class Name : NlibPasswordEncoder.java
 * 
 * @Description : 스프링 시큐리티 비밀번호 암호화 처리를 위하여 전자정부 프레임워크의 SHA256 알고리즘 구현체를 사용한 비밀번호 인코더 클래스 
 * 
 * 
 * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
 *
 * </pre>
 *
 * @ ------------    --------    ---------------------------
 * @ 수정일                     수정자             수정내용
 * @ ------------    --------    ---------------------------
 * @ 2021. 7. 9.     KNKIM       최초 생성
 *
 * 
 * @author 이씨플라자 * DIGITALSHIP KNKIM
 * @since 2021. 7. 9.
 * @version 1.0
 *
 */
@Component("nlibPasswordEncoder")
public class NlibPasswordEncoder implements PasswordEncoder {  /* extends EgovPasswordEncoder  */

	private static final Logger log = LoggerFactory.getLogger(NlibPasswordEncoder.class);

    @Resource(name = "egovEnvPasswordEncoderService")
    EgovPasswordEncoder egovPasswordEncoder;
    
    
	/* 비밀번호를 SHA-256 알고리즘을 사용하여 암호화한다.
	 * 
	 * (non-Javadoc)
	 * @see org.springframework.security.crypto.password.PasswordEncoder#encode(java.lang.CharSequence)
	 */
	@Override
	public String encode(CharSequence rawPassword) {
		log.debug("encode > rawPassword = " + rawPassword);
		return egovPasswordEncoder.encryptPassword(rawPassword.toString());
	}

	/* 두 입력된 비밀번호가 일치하는 지 확인한다.
	 * - rawPassword : 입력된 비밀번호로 암호화되지 않은 비밀번호 
	 * - encodedPassword : 암호화된 비밀번호 (사용자DB에서 읽어온 값) 
	 *   
	 * (non-Javadoc)
	 * @see org.springframework.security.crypto.password.PasswordEncoder#matches(java.lang.CharSequence, java.lang.String)
	 */
	@Override
	public boolean matches(CharSequence rawPassword, String encodedPassword) {
		log.debug("matches > rawPassword = " + rawPassword);
		log.debug("matches > encodedPassword = " + encodedPassword);
		return egovPasswordEncoder.checkPassword(rawPassword.toString(), encodedPassword);
	}

}
