package com.monkeyk.sos.web.oauth;
import com.monkeyk.sos.domain.dto.OauthClientDetailsDto;
import com.monkeyk.sos.service.OauthService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
/**
* @author Shengzhao Li
*/
@Component
public class OauthClientDetailsDtoValidator implements Validator {
@Autowired
private OauthService oauthService;
@Override
public boolean supports(Class<?> clazz) {
return OauthClientDetailsDto.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
OauthClientDetailsDto clientDetailsDto = (OauthClientDetailsDto) target;
validateClientId(clientDetailsDto, errors);
validateClientSecret(clientDetailsDto, errors);
validateGrantTypes(clientDetailsDto, errors);
}
private void validateGrantTypes(OauthClientDetailsDto clientDetailsDto, Errors errors) {
final String grantTypes = clientDetailsDto.getAuthorizedGrantTypes();
if (StringUtils.isEmpty(grantTypes)) {
errors.rejectValue("authorizedGrantTypes", null, "grant_type(s) is required");
return;
}
if ("refresh_token".equalsIgnoreCase(grantTypes)) {
errors.rejectValue("authorizedGrantTypes", null, "grant_type(s) 不能只是[refresh_token]");
}
}
private void validateClientSecret(OauthClientDetailsDto clientDetailsDto, Errors errors) {
final String clientSecret = clientDetailsDto.getClientSecret();
if (StringUtils.isEmpty(clientSecret)) {
errors.rejectValue("clientSecret", null, "client_secret is required");
return;
}
if (clientSecret.length() < 8) {
errors.rejectValue("clientSecret", null, "client_secret 长度至少8位");
}
}
private void validateClientId(OauthClientDetailsDto clientDetailsDto, Errors errors) {
final String clientId = clientDetailsDto.getClientId();
if (StringUtils.isEmpty(clientId)) {
errors.rejectValue("clientId", null, "client_id is required");
return;
}
if (clientId.length() < 5) {
errors.rejectValue("clientId", null, "client_id 长度至少5位");
return;
}
OauthClientDetailsDto clientDetailsDto1 = oauthService.loadOauthClientDetailsDto(clientId);
if (clientDetailsDto1 != null) {
errors.rejectValue("clientId", null, "client_id [" + clientId + "] 已存在");
}
}
}