package cn.jiguang.common; import java.text.SimpleDateFormat; import java.util.Random; import java.util.Set; import java.util.regex.Pattern; import com.google.gson.JsonArray; import com.google.gson.JsonPrimitive; import cn.jiguang.common.utils.Base64; import cn.jiguang.common.utils.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ServiceHelper { private static final Logger LOG = LoggerFactory.getLogger(ServiceHelper.class); private final static Pattern PUSH_PATTERNS = Pattern.compile("[^a-zA-Z0-9]"); private final static String BASIC_PREFIX = "Basic"; private static final Random RANDOM = new Random(System.currentTimeMillis()); private static final int MIN = 100000; private static final int MAX = Integer.MAX_VALUE; private static final int MAX_BADGE_NUMBER = 99999; private static final Pattern USERNAME_PATTERN = Pattern.compile("^[a-zA-Z0-9][a-zA-Z_0-9.、。@,-]*"); private static final Pattern DATE_PATTERN = Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}"); private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); static { DATE_FORMAT.setLenient(false); } public static boolean isValidIntBadge(int intBadge) { if (intBadge >= 0 && intBadge <= MAX_BADGE_NUMBER) { return true; } return false; } public static int generateSendno() { return RANDOM.nextInt((MAX - MIN) + 1) + MIN; } public static String getBasicAuthorization(String username, String password) { String encodeKey = username + ":" + password; return BASIC_PREFIX + " " + String.valueOf(Base64.encode(encodeKey.getBytes())); } public static void checkBasic(String appKey, String masterSecret) { if (StringUtils.isEmpty(appKey) || StringUtils.isEmpty(masterSecret)) { throw new IllegalArgumentException("appKey and masterSecret are both required."); } if (appKey.length() != 24 || masterSecret.length() != 24 || PUSH_PATTERNS.matcher(appKey).find() || PUSH_PATTERNS.matcher(masterSecret).find()) { throw new IllegalArgumentException("appKey and masterSecret format is incorrect. " + "They should be 24 size, and be composed with alphabet and numbers. " + "Please confirm that they are coming from JPush Web Portal."); } } public static JsonArray fromSet(Set<String> sets) { JsonArray array = new JsonArray(); if (null != sets && sets.size() > 0) { for (String item : sets) { array.add(new JsonPrimitive(item)); } } return array; } public static boolean checkUsername(String username) { return USERNAME_PATTERN.matcher(username).matches(); } public static boolean isValidBirthday( String birthday) { try { if( ! DATE_PATTERN.matcher(birthday).matches() ) { return false; } DATE_FORMAT.parse(birthday); } catch (Exception e) { LOG.error("incorrect date format. " + birthday, e); return false; } return true; } }