package com.sundot.airport.exam.singleton;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 不需要权限验证的白名单URL
 *
 * @author 2020-05-27 xdyi
 */
public class NoAuthUrlManager {

    /**
     * 不需要登录验证的URL列表
     */
    private final Set<String> noAuthUrls = new HashSet<>(16);

    /**
     * 不需要验证登录的URL前缀列表
     */
    private final List<String> noAuthUrlPrefixes = new ArrayList<>(16);

    private NoAuthUrlManager() {
        init();
    }

    public static NoAuthUrlManager getInstance() {
        return SingletonHolder.INSTANCE;
    }

    /**
     * 初始化不需要验证的URL 后期可以从配置文件或数据库加载
     */
    private void init() {
        // 测试
        noAuthUrlPrefixes.add("/v1/login/test");
    }

    /**
     * 是否在请求白名单中，如果是放行。
     *
     * @param uri 请求的uri
     * @return boolean
     */
    public boolean isBlackUrl(String uri) {
        if (noAuthUrls.contains(uri)) {
            return true;
        }

        for (String prefix : noAuthUrlPrefixes) {
            if (uri.startsWith(prefix)) {
                return true;
            }
        }

        return false;
    }

    private static class SingletonHolder {
        private static final NoAuthUrlManager INSTANCE = new NoAuthUrlManager();
    }
}
