package cn.dreampie.oauth; import cn.dreampie.cache.SimpleCache; import cn.dreampie.common.Constant; import cn.dreampie.oauth.entity.Code; import cn.dreampie.oauth.entity.Token; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Created by Dreampie on 16/7/7. */ public class Authorizes { public static final String OAUTH2_CODE_DEF_KEY = "oauth2" + Constant.CONNECTOR + "codes"; public static final String OAUTH2_TOKEN_DEF_KEY = "oauth2" + Constant.CONNECTOR + "tokens"; public static final String OAUTH2_REFRESH_TOKEN_DEF_KEY = "oauth2" + Constant.CONNECTOR + "refreshTokens"; public static final Map<String, String> refreshTokens = new HashMap<String, String>(); public static final Map<String, Code> codes = new HashMap<String, Code>(); public static final Map<String, Token> tokens = new HashMap<String, Token>(); public static void addCode(Code code) { if (Constant.cacheEnabled) { SimpleCache.instance().add(OAUTH2_CODE_DEF_KEY, code.getCode(), code, code.getExpires()); } else { codes.put(code.getCode(), code); for (Map.Entry<String, Code> codeEntry : codes.entrySet()) { if (codeEntry.getValue().getExpiredAt().compareTo(new Date()) < 0) { codes.remove(codeEntry.getKey()); } } } } public static void removeCode(String key) { if (Constant.cacheEnabled) { SimpleCache.instance().remove(OAUTH2_CODE_DEF_KEY, key); } else { codes.remove(key); for (Map.Entry<String, Code> codeEntry : codes.entrySet()) { if (codeEntry.getValue().getExpiredAt().compareTo(new Date()) < 0) { codes.remove(codeEntry.getKey()); } } } } public static Code getCode(String key) { Code code; if (Constant.cacheEnabled) { code = SimpleCache.instance().get(OAUTH2_CODE_DEF_KEY, key); } else { code = codes.get(key); if (code.getExpiredAt().compareTo(new Date()) < 0) { codes.remove(key); code = null; } } return code; } public static void addToken(Token token) { if (Constant.cacheEnabled) { SimpleCache.instance().add(OAUTH2_TOKEN_DEF_KEY, token.getToken(), token, token.getExpires()); } else { tokens.put(token.getToken(), token); for (Map.Entry<String, Token> tokenEntry : tokens.entrySet()) { if (tokenEntry.getValue().getExpiredAt().compareTo(new Date()) < 0) { tokens.remove(tokenEntry.getKey()); refreshTokens.values().remove(tokenEntry.getKey()); } } } } public static void removeToken(String key) { if (Constant.cacheEnabled) { SimpleCache.instance().remove(OAUTH2_TOKEN_DEF_KEY, key); } else { tokens.remove(key); for (Map.Entry<String, Token> tokenEntry : tokens.entrySet()) { if (tokenEntry.getValue().getExpiredAt().compareTo(new Date()) < 0) { tokens.remove(tokenEntry.getKey()); refreshTokens.values().remove(tokenEntry.getKey()); } } } } public static void refreshToken(String refreshToken, String key, Token token) { if (Constant.cacheEnabled) { SimpleCache.instance().remove(OAUTH2_REFRESH_TOKEN_DEF_KEY, refreshToken); SimpleCache.instance().remove(OAUTH2_TOKEN_DEF_KEY, key); } else { refreshTokens.remove(refreshToken); tokens.remove(key); for (Map.Entry<String, Token> tokenEntry : tokens.entrySet()) { if (tokenEntry.getValue().getExpiredAt().compareTo(new Date()) < 0) { tokens.remove(tokenEntry.getKey()); refreshTokens.values().remove(tokenEntry.getKey()); } } } addToken(token); } public static Token getToken(String key) { Token token; if (Constant.cacheEnabled) { token = SimpleCache.instance().get(OAUTH2_TOKEN_DEF_KEY, key); } else { token = tokens.get(key); if (token.getExpiredAt().compareTo(new Date()) < 0) { tokens.remove(key); refreshTokens.values().remove(key); token = null; } } return token; } public static void addRefreshToken(String refreshToken, Token token) { if (Constant.cacheEnabled) { SimpleCache.instance().add(OAUTH2_REFRESH_TOKEN_DEF_KEY, refreshToken, token.getToken(), token.getExpires()); } else { refreshTokens.put(refreshToken, token.getToken()); } } public static void removeRefreshToken(String refreshToken) { if (Constant.cacheEnabled) { SimpleCache.instance().remove(OAUTH2_REFRESH_TOKEN_DEF_KEY, refreshToken); } else { refreshTokens.remove(refreshToken); } } public static Token getTokenByRefreshToken(String refreshToken) { String token; if (Constant.cacheEnabled) { token = SimpleCache.instance().get(OAUTH2_REFRESH_TOKEN_DEF_KEY, refreshToken); } else { token = refreshTokens.get(refreshToken); } if (token != null) { return getToken(token); } else { return null; } } }