package com.ifish.jpush.common; import java.text.SimpleDateFormat; import java.util.Random; import java.util.Set; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.JsonArray; import com.google.gson.JsonPrimitive; import com.ifish.jpush.utils.Base64; import com.ifish.jpush.utils.StringUtils; 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 String DATE_FORMAT = "yyyy-MM-dd"; 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 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; } SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); format.setLenient(false); format.parse(birthday); } catch (Exception e) { LOG.error("incorrect date format. " + birthday, e); return false; } return true; } }