/* Firewall.java Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.server.nanohttpd.security; import org.deviceconnect.server.nanohttpd.BuildConfig; import org.deviceconnect.server.nanohttpd.logger.AndroidHandler; import java.util.ArrayList; import java.util.List; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; /** * ファイアウォール. * * @author NTT DOCOMO, INC. */ public final class Firewall { /** ログ用タグ. */ private static final String TAG = "Firewall"; /** IPのホワイトリスト. */ private List<String> mIPWhiteList; /** ロガー. */ private final Logger mLogger = Logger.getLogger("dconnect.server"); /** * ファイアウォールを生成する. */ public Firewall() { this(null); } /** * 接続元のIP制限リストを指定してファイアウォールを生成する. * * @param ipList IPのホワイトリスト。 */ public Firewall(final List<String> ipList) { mIPWhiteList = ipList; if (BuildConfig.DEBUG) { Handler handler = new AndroidHandler(TAG); handler.setFormatter(new SimpleFormatter()); handler.setLevel(Level.ALL); mLogger.addHandler(handler); mLogger.setLevel(Level.WARNING); } } /** * 指定されたIPがホワイトリストに含まれるかを調査する. * * @param ip 調査対象となるIPアドレス。("127.0.0.1"などの文字列。) * @return ホワイトリストに含まれる場合true、その他はfalseを返す。 */ public boolean isWhiteIP(final String ip) { if (mIPWhiteList == null || mIPWhiteList.size() == 0) { // IPのリストがない場合は制限なしと判断し、すべてtrueにする。 return true; } // TODO 必要ならば後々ワイルドカードや正規表現を利用できるようにする。 // 192.168.0.*など for (String white : mIPWhiteList) { if (white.equals(ip)) { return true; } } mLogger.warning("Firewall#isWhiteIP(). Not allowed IP : " + ip); return false; } /** * IPのホワイトリストを設定する. * * @param ipList IPのホワイトリスト。 */ public void setIPWhiteList(final ArrayList<String> ipList) { mIPWhiteList = ipList; } }