JSFiddle - React, Tailwind, and code Playground

by Fernando Leal

JavaScript

// SOLUÇÂO -----------------------------

// informe as extenções que serão ignoradas na comparação
var extensions_ignore = ['.ejs'];

// informe os arquivos que são negados/proibidos 
var proibidos = ['contatos/aq', 'contatos/aq1', 'contatos/aq4'];

// método de verificação se path é permitido 
var isPermitido = function(path_p){
    // faz um replace 
    path_p = replaceExtensionsIgnored(path_p);
    for(var s=0; s < proibidos.length; s++) {
        // verfica se o path termina com algum dos caminho proibidos
        if(path_p.endsWith(proibidos[s])) { 
            return false;
        }
    }
    // se passar por todos os caminho proibidos é por que está liberado, então retorna true
    return true;
};

// remove extensão ignora do caminho
var replaceExtensionsIgnored = function(path){
    for (var i = 0; i < extensions_ignore.length; i++){
        path = path.replace(extensions_ignore[i], "");
    }
    return path;
};

var test = function(path){    
    print(path + " : " + isPermitido(path));
};

var initTests = function(){
    // inicializa recursos (fallbacks)
    init();
    
    print("Iniciando Testes...")
    test('__dirname/pasta/subpasta/home/contatos/aq');
    test('__dirname/pasta/subpasta/home/contatos/aq2.ejs');
    test('__dirname/pasta/subpasta/home/contatos/aq3.ejs');
    test('__dirname/pasta/subpasta/home/contatos/aq4.ejs');
}

// -- Recursos extras -----

var init = function(){
      fallbacks();
}

// (Não relevante) metódo para printar resultado
var print = function(message){
    if (typeof window === 'undefined') {
        // se for node.js
        console.log(message);
    }else{
        // se for DOM        
        var p = document.createElement("p");
        p.textContent = "  >  " + message;
        document.body.appendChild(p);
    }
};

var fallbacks = function(){
     /* Fallbsack para manter o support ao metodo em todas as versões do javascript já que este método está em versão experiemntal :...