mirror of
https://github.com/CFC-Servers/cfc_cl_http_whitelist.git
synced 2025-03-04 03:03:18 -05:00
Replace html urls (#33)
* replace urls in html and javascript with safe urls * remove file * remove temporary wrap functions * remove most starfall domains * apply CFCHTTP.RedirectURL to OpenURL wrap * use concat and not string.format
This commit is contained in:
parent
05c24b719f
commit
609f7ea083
2
gluatest.yaml
Normal file
2
gluatest.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
config:
|
||||||
|
gamemode: sandbox
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"diagnostics.globals": [
|
|
||||||
"expect"
|
|
||||||
]
|
|
||||||
}
|
|
@ -168,44 +168,40 @@ local function wrapHTMLPanel( panelName )
|
|||||||
_G[runJavascript] = _G[runJavascript] or controlTable.RunJavascript
|
_G[runJavascript] = _G[runJavascript] or controlTable.RunJavascript
|
||||||
|
|
||||||
controlTable.SetHTML = function( self, html, ... )
|
controlTable.SetHTML = function( self, html, ... )
|
||||||
local urls, err = CFCHTTP.FileTypes.HTML.GetURLSFromData( html )
|
|
||||||
local options = CFCHTTP.GetOptionsForURLs( urls )
|
|
||||||
|
|
||||||
local isAllowed
|
|
||||||
if #urls == 0 then
|
|
||||||
isAllowed = true
|
|
||||||
else
|
|
||||||
isAllowed = err == nil and options.combined and options.combined.allowed
|
|
||||||
end
|
|
||||||
|
|
||||||
local stack = string.Split( debug.traceback(), "\n" )
|
local stack = string.Split( debug.traceback(), "\n" )
|
||||||
logRequest( "GET", options.combinedUri, stack[3], isAllowed )
|
|
||||||
|
|
||||||
if not isAllowed then
|
html = CFCHTTP.ReplaceURLs( html, function( url )
|
||||||
html = [[<h1>BLOCKED By CFC HTTP Whitelist</h1>]]
|
local options = CFCHTTP.GetOptionsForURL( url )
|
||||||
end
|
local isAllowed = options and options.allowed
|
||||||
|
local noisy = true -- this will be really spammy so set it to noisy by default
|
||||||
|
|
||||||
|
logRequest( "GET", url, stack[3], isAllowed, noisy )
|
||||||
|
|
||||||
|
if not isAllowed then
|
||||||
|
return CFCHTTP.GetRedirectURL( url )
|
||||||
|
end
|
||||||
|
|
||||||
|
return url
|
||||||
|
end )
|
||||||
|
|
||||||
return _G[setHTML]( self, html, ... )
|
return _G[setHTML]( self, html, ... )
|
||||||
end
|
end
|
||||||
|
|
||||||
controlTable.RunJavascript = function( self, js )
|
controlTable.RunJavascript = function( self, js )
|
||||||
local urls, err = CFCHTTP.FileTypes.HTML.GetURLSFromData( js )
|
|
||||||
local options = CFCHTTP.GetOptionsForURLs( urls )
|
|
||||||
|
|
||||||
local isAllowed
|
|
||||||
if #urls == 0 then
|
|
||||||
return _G[runJavascript]( self, js )
|
|
||||||
else
|
|
||||||
isAllowed = err == nil and options.combined and options.combined.allowed
|
|
||||||
end
|
|
||||||
|
|
||||||
local stack = string.Split( debug.traceback(), "\n" )
|
local stack = string.Split( debug.traceback(), "\n" )
|
||||||
logRequest( "GET", options.combinedUri, stack[3], isAllowed )
|
js = CFCHTTP.ReplaceURLs( js, function( url )
|
||||||
|
local options = CFCHTTP.GetOptionsForURL( url )
|
||||||
|
local isAllowed = options and options.allowed
|
||||||
|
local noisy = true -- this will be really spammy so set it to noisy by default
|
||||||
|
|
||||||
if not isAllowed then
|
logRequest( "GET", url, stack[3], isAllowed, noisy )
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
|
if not isAllowed then
|
||||||
|
return CFCHTTP.GetRedirectURL( url )
|
||||||
|
end
|
||||||
|
|
||||||
|
return url
|
||||||
|
end )
|
||||||
return _G[runJavascript]( self, js )
|
return _G[runJavascript]( self, js )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -217,7 +213,9 @@ local function wrapHTMLPanel( panelName )
|
|||||||
local stack = string.Split( debug.traceback(), "\n" )
|
local stack = string.Split( debug.traceback(), "\n" )
|
||||||
logRequest( "GET", url, stack[3], isAllowed, noisy )
|
logRequest( "GET", url, stack[3], isAllowed, noisy )
|
||||||
|
|
||||||
if not isAllowed then return end
|
if not isAllowed then
|
||||||
|
url = CFCHTTP.GetRedirectURL( url )
|
||||||
|
end
|
||||||
|
|
||||||
return _G[openURL]( self, url, ... )
|
return _G[openURL]( self, url, ... )
|
||||||
end
|
end
|
||||||
|
@ -20,6 +20,9 @@ local config = {
|
|||||||
allowed = false,
|
allowed = false,
|
||||||
},
|
},
|
||||||
addresses = {
|
addresses = {
|
||||||
|
-- this is used internally by this addon, removing it could cause issues
|
||||||
|
["gmhttp.pages.dev"] = { allowed = true, noisy = true, permanent = true },
|
||||||
|
|
||||||
["google.com"] = { allowed = true, noisy = true },
|
["google.com"] = { allowed = true, noisy = true },
|
||||||
["www.google.com"] = { allowed = true, noisy = true },
|
["www.google.com"] = { allowed = true, noisy = true },
|
||||||
|
|
||||||
@ -92,18 +95,9 @@ local config = {
|
|||||||
-- media player
|
-- media player
|
||||||
["samuelmaddock.github.io"] = { allowed = true },
|
["samuelmaddock.github.io"] = { allowed = true },
|
||||||
|
|
||||||
-- domains starfall docs have that get caught by the html whitelist
|
|
||||||
["npms.io"] = { allowed = true },
|
|
||||||
["fb.me"] = { allowed = true },
|
|
||||||
["reactjs.org"] = { allowed = true },
|
|
||||||
["www.w3.org"] = { allowed = true },
|
|
||||||
["www.cplusplus.com"] = { allowed = true },
|
|
||||||
["wiki.garrysmod.com"] = { allowed = true },
|
["wiki.garrysmod.com"] = { allowed = true },
|
||||||
["en.wikipedia.org"] = { allowed = true },
|
["en.wikipedia.org"] = { allowed = true },
|
||||||
["mydomain.com"] = { allowed = true },
|
|
||||||
["developer.mozilla.org"] = { allowed = true },
|
["developer.mozilla.org"] = { allowed = true },
|
||||||
["w3.impa.br"] = { allowed = true },
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
CFCHTTP.URLPattern = "(%a+)://([^:/ \t]+):?(%d*)/?.*"
|
CFCHTTP.URLPattern = "(%a+)://([^:/ \t]+):?(%d*)/?.*"
|
||||||
CFCHTTP.URLPatternNoGroups = "%a+://[^:/ \t\"]+:?%d*/?[^\n\" ]*"
|
CFCHTTP.URLPatternNoGroups = "%a+://[^:/ \t\"]+:?%d*/?[^\n\" \\]*"
|
||||||
|
|
||||||
---@param url string
|
---@param url string
|
||||||
---@return URLData
|
---@return URLData
|
||||||
@ -34,8 +34,23 @@ function CFCHTTP.FindURLs( text )
|
|||||||
return urls
|
return urls
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function CFCHTTP.GetRedirectURL( url )
|
||||||
|
url = string.Replace( url, "\n", "" )
|
||||||
|
url = string.Trim( url )
|
||||||
|
local b64 = util.Base64Encode( url, true )
|
||||||
|
return "https://gmhttp.pages.dev/redirect?url=" .. b64
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param text string
|
||||||
|
---@param f fun( url:string ):string
|
||||||
|
---@return string
|
||||||
|
function CFCHTTP.ReplaceURLs( text, f )
|
||||||
|
local html = string.gsub( text, CFCHTTP.URLPatternNoGroups, f )
|
||||||
|
return html
|
||||||
|
end
|
||||||
|
|
||||||
local parsedAddressCache = {}
|
local parsedAddressCache = {}
|
||||||
---@parm url string
|
---@param url string
|
||||||
---@return string|nil
|
---@return string|nil
|
||||||
function CFCHTTP.GetAddress( url )
|
function CFCHTTP.GetAddress( url )
|
||||||
if not url then return end
|
if not url then return end
|
||||||
|
@ -19,12 +19,11 @@ local htmlBlobs = [[
|
|||||||
</html>
|
</html>
|
||||||
]]
|
]]
|
||||||
|
|
||||||
return {
|
---@type GLuaTestTestGroup
|
||||||
|
local group = {
|
||||||
groupName = "CFC HTTP Whitelist Domains",
|
groupName = "CFC HTTP Whitelist Domains",
|
||||||
cases = {
|
cases = {
|
||||||
{
|
{
|
||||||
timeout = 3,
|
|
||||||
async = false,
|
|
||||||
name = "Should get addresses from urls",
|
name = "Should get addresses from urls",
|
||||||
func = function()
|
func = function()
|
||||||
for _, urlData in pairs( testUrls ) do
|
for _, urlData in pairs( testUrls ) do
|
||||||
@ -40,8 +39,6 @@ return {
|
|||||||
end
|
end
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
timeout = 3,
|
|
||||||
async = false,
|
|
||||||
name = "Get address should return expected data",
|
name = "Get address should return expected data",
|
||||||
func = function()
|
func = function()
|
||||||
for _, urlData in pairs( testUrls ) do
|
for _, urlData in pairs( testUrls ) do
|
||||||
@ -52,3 +49,5 @@ return {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return group
|
||||||
|
Loading…
Reference in New Issue
Block a user