function fbwifi.revoke_client_rule()

in fbwifi/files/fbwifi/usr/lib/lua/fbwifi.lua [99:133]


function fbwifi.revoke_client_rule( token )
        
        if (token == nil) then
                log.syslog(log.LOG_INFO, "[fbwifi] Invalidating token, but token is Nil")
                return
        end

    log.syslog(log.LOG_INFO, string.format( "[fbwifi] Invalidating token (%s)", token) )

    state = uci.cursor("/var/state", "/tmp/fbwifi")
    state_name = "token_" .. token
    
    client_mac = state:get("fbwifi", state_name, "mac")

    if client_mac then
        RULE_COND="iptables -w -L FBWIFI_CLIENT_TO_INTERNET -t mangle | grep -i -q \"%s\""
        RULE_FMT="iptables -w -t mangle -%s FBWIFI_CLIENT_TO_INTERNET -m mac --mac-source \"%s\" -j MARK --set-mark 0xfb"

        
        
        RULE=string.format(RULE_COND.." && "..RULE_FMT, client_mac, "D", client_mac)

        res = os.execute(RULE)
        if res ~= 0 then 
            log.syslog(log.LOG_WARNING, string.format( "[fbwifi] Failed to update iptables (%s)", res ) )
        end
        log.syslog(log.LOG_INFO, "[fbwifi] "..RULE)

        state:delete("fbwifi", state_name)
        state:save('fbwifi')
        state:commit('fbwifi')
    else
        log.syslog(log.LOG_WARNING, string.format( "[fbwifi] Client MAC not found in DB (%s)", state_name ) )
    end
end