Zum Inhalt springen

Modul:URLutil: Unterschied zwischen den Versionen

update
w>PerfektesChaos
(update)
w>PerfektesChaos
(update)
Zeile 1: Zeile 1:
--[=[ URLutil 2013-04-18
--[=[ URLutil 2013-04-24
Utilities for URL etc. on www.
Utilities for URL etc. on www.
* getAuthority()
* getAuthority()
Zeile 15: Zeile 15:
* isProtocolDialog
* isProtocolDialog
* isProtocolWiki
* isProtocolWiki
* isRessourceURL()
* isResourceURL()
* isSuspiciousURL()
* isSuspiciousURL()
* isUnescapedURL()
* isUnescapedURL()
Zeile 23: Zeile 23:
IPv6 URL (bracketed) not yet implemented; might need Wikintax escaping anyway.
IPv6 URL (bracketed) not yet implemented; might need Wikintax escaping anyway.


Functions are not "local",
Other modules can require this module and call functions via an object.
so other modules can require this module and call them directly.
We return an object with small stub functions to call the real ones
We return an object with small stub functions to call the real ones
so that the functions can be called from templates also.
so that the functions can be called from templates also.
Zeile 34: Zeile 33:




-- table for export
local URLutil = {}


function _getAuthority( url )
 
 
URLutil.getAuthority = function ( url )
     if type( url ) == "string" then
     if type( url ) == "string" then
         local host, colon, port = mw.ustring.match( url .. "/", "^%s*%w*:?//([%w.%%-]+)(:?)([%d]*)/" )
         local host, colon, port = mw.ustring.match( url .. "/", "^%s*%w*:?//([%w.%%-]+)(:?)([%d]*)/" )
         if _isHost( host ) then
         if URLutil.isHost( host ) then
             host = mw.ustring.lower( host )
             host = mw.ustring.lower( host )
             if colon == ":" then
             if colon == ":" then
Zeile 50: Zeile 53:
     end
     end
     return false
     return false
end -- _getAuthority()
end -- URLutil.getAuthority()






function _getHost( url )
URLutil.getHost = function ( url )
     local auth = _getAuthority( url )
     local auth = URLutil.getAuthority( url )
     if auth then
     if auth then
         return mw.ustring.match( auth, "^([%w%.%%-]+):?[%d]*$" )
         return mw.ustring.match( auth, "^([%w%.%%-]+):?[%d]*$" )
     end
     end
     return false
     return false
end -- _getHost()
end -- URLutil.getHost()






function _getPort( url )
URLutil.getPort = function ( url )
     url = _getAuthority( url )
     url = URLutil.getAuthority( url )
     if url then
     if url then
         url = url:match( ":([1-9][0-9]*)$" )
         url = url:match( ":([1-9][0-9]*)$" )
Zeile 73: Zeile 76:
     end
     end
     return false
     return false
end -- _getPort()
end -- URLutil.getPort()






function _getScheme( url )
URLutil.getScheme = function ( url )
     if type( url ) == "string" then
     if type( url ) == "string" then
         local prot, colon, slashes = url:match( "^%s*([a-zA-Z]*)(:?)(//)" )
         local prot, colon, slashes = url:match( "^%s*([a-zA-Z]*)(:?)(//)" )
Zeile 91: Zeile 94:
     end
     end
     return false
     return false
end -- _getScheme()
end -- URLutil.getScheme()






function _isAuthority( s )
URLutil.isAuthority = function ( s )
     if type( s ) == "string" then
     if type( s ) == "string" then
         local host, colon, port = mw.ustring.match( s, "^%s*([%w%.%%-]+)(:?)(%d*)%s*$" )
         local host, colon, port = mw.ustring.match( s, "^%s*([%w%.%%-]+)(:?)(%d*)%s*$" )
Zeile 106: Zeile 109:
             return false
             return false
         end
         end
         return _isHost( host )
         return URLutil.isHost( host )
     end
     end
     return false
     return false
end -- _isAuthority()
end -- URLutil.isAuthority()






function _isDomain( s )
URLutil.isDomain = function ( s )
     if type( s ) == "string" then
     if type( s ) == "string" then
         s = mw.ustring.match( s, "^%s*([%w%.%%-]+%w)%.[a-zA-Z][a-zA-Z]+%s*$" )
         s = mw.ustring.match( s, "^%s*([%w%.%%-]+%w)%.[a-zA-Z][a-zA-Z]+%s*$" )
Zeile 127: Zeile 130:
     end
     end
     return false
     return false
end -- _isDomain()
end -- URLutil.isDomain()






function _isHost( s )
URLutil.isHost = function ( s )
     return _isDomain( s ) or _isIP( s )
     return URLutil.isDomain( s ) or URLutil.isIP( s )
end -- _isHost()
end -- URLutil.isHost()






function _isIP( s )
URLutil.isIP = function ( s )
     return _isIPv4( s ) and 4 or _isIPv6( s ) and 6
     return URLutil.isIPv4( s ) and 4 or URLutil.isIPv6( s ) and 6
end -- _isIP()
end -- URLutil.isIP()






function _isIPv4( s )
URLutil.isIPv4 = function ( s )
     local function legal( n )
     local function legal( n )
               return ( tonumber( n ) < 256 )
               return ( tonumber( n ) < 256 )
Zeile 154: Zeile 157:
     end
     end
     return false
     return false
end -- _isIPv4()
end -- URLutil.isIPv4()






function _isIPv6( s )
URLutil.isIPv6 = function ( s )
     local dcolon, groups
     local dcolon, groups
     if type( s ) ~= "string"
     if type( s ) ~= "string"
Zeile 179: Zeile 182:
             ( dcolon == 0 and groups == 8 ) )
             ( dcolon == 0 and groups == 8 ) )
         and ( s:len() == 0 or ( dcolon == 1 and s == ":" ) ) -- might be one dangling : if original ended with ::
         and ( s:len() == 0 or ( dcolon == 1 and s == ":" ) ) -- might be one dangling : if original ended with ::
end -- _isIPv6()
end -- URLutil.isIPv6()






function _isMailAddress( s )
URLutil.isMailAddress = function ( s )
     if type( s ) == "string" then
     if type( s ) == "string" then
         s = mw.ustring.match( s, "^%s*[%w%.%%_-]+@([%w%.%%-]+)%s*$" )
         s = mw.ustring.match( s, "^%s*[%w%.%%_-]+@([%w%.%%-]+)%s*$" )
         return _isDomain( s )
         return URLutil.isDomain( s )
     end
     end
     return false
     return false
end -- _isMailAddress()
end -- URLutil.isMailAddress()






function _isMailLink( s )
URLutil.isMailLink = function ( s )
     if type( s ) == "string" then
     if type( s ) == "string" then
         local addr
         local addr
Zeile 199: Zeile 202:
         if type( s ) == "string" then
         if type( s ) == "string" then
             if s:lower() == "mailto" then
             if s:lower() == "mailto" then
                 return _isMailAddress( addr )
                 return URLutil.isMailAddress( addr )
             end
             end
         end
         end
     end
     end
     return false
     return false
end -- _isMailLink()
end -- URLutil.isMailLink()




Zeile 229: Zeile 232:




function _isProtocolDialog( prot )
URLutil.isProtocolDialog = function ( prot )
     return isProtocolAccepted( prot, " mailto irc ircs telnet " )
     return isProtocolAccepted( prot, " mailto irc ircs telnet " )
end -- _isProtocolDialog()
end -- URLutil.isProtocolDialog()






function _isProtocolWiki( prot )
URLutil.isProtocolWiki = function ( prot )
     return isProtocolAccepted( prot,
     return isProtocolAccepted( prot,
                               " ftp git http https nntp svn worldwind " )
                               " ftp git http https nntp svn worldwind " )
end -- _isProtocolWiki()
end -- URLutil.isProtocolWiki()






function _isRessourceURL( url )
URLutil.isResourceURL = function ( url )
     local scheme = _getScheme( url )
     local scheme = URLutil.getScheme( url )
     if scheme then
     if scheme then
         local s = " // http:// https:// ftp:// "
         local s = " // http:// https:// ftp:// "
         s = s:find( " " .. scheme .. " " )
         s = s:find( " " .. scheme .. " " )
         if s then
         if s then
             if _getAuthority( url ) then
             if URLutil.getAuthority( url ) then
                 if not url:match( "%S%s+%S" ) then
                 if not url:match( "%S%s+%S" ) then
                     return true
                     return true
Zeile 256: Zeile 259:
     end
     end
     return false
     return false
end -- _isRessourceURL()
end -- URLutil.isResourceURL()






function _isSuspiciousURL( url )
URLutil.isSuspiciousURL = function ( url )
     if _isRessourceURL( url ) then
     if URLutil.isResourceURL( url ) then
         local s = _getAuthority( url )
         local s = URLutil.getAuthority( url )
         local pat = "[%[|%]" ..
         local pat = "[%[|%]" ..
                     mw.ustring.char( 8201, 45, 8207, 8234, 45, 8239, 8288 )
                     mw.ustring.char( 8201, 45, 8207, 8234, 45, 8239, 8288 )
Zeile 276: Zeile 279:
     end
     end
     return true
     return true
end -- _isSuspiciousURL()
end -- URLutil.isSuspiciousURL()






function _isUnescapedURL( url, trailing )
URLutil.isUnescapedURL = function ( url, trailing )
     if type( trailing ) ~= "string" then
     if type( trailing ) ~= "string" then
         if _isWebURL( url ) then
         if URLutil.isWebURL( url ) then
             if url:match( "[%[|%]]" ) then
             if url:match( "[%[|%]]" ) then
                 return true
                 return true
Zeile 289: Zeile 292:
     end
     end
     return false
     return false
end -- _isUnescapedURL()
end -- URLutil.isUnescapedURL()






function _isWebURL( url )
URLutil.isWebURL = function ( url )
     if _getScheme( url ) and _getAuthority( url ) then
     if URLutil.getScheme( url ) and URLutil.getAuthority( url ) then
         if not url:match( "%S%s+%S" ) then
         if not url:match( "%S%s+%S" ) then
             return true
             return true
Zeile 300: Zeile 303:
     end
     end
     return false
     return false
end -- _isWebURL()
end -- URLutil.isWebURL()






-- Provide template access
-- Provide template access and expose URLutil table to require


local p = {}
local p = {}


function p.getAuthority( frame )
function p.getAuthority( frame )
     return _getAuthority( frame.args[ 1 ] ) or ""
     return URLutil.getAuthority( frame.args[ 1 ] ) or ""
end
end
function p.getHost( frame )
function p.getHost( frame )
     return _getHost( frame.args[ 1 ] ) or ""
     return URLutil.getHost( frame.args[ 1 ] ) or ""
end
end
function p.getPort( frame )
function p.getPort( frame )
     return _getPort( frame.args[ 1 ] ) or ""
     return URLutil.getPort( frame.args[ 1 ] ) or ""
end
end
function p.getScheme( frame )
function p.getScheme( frame )
     return _getScheme( frame.args[ 1 ] ) or ""
     return URLutil.getScheme( frame.args[ 1 ] ) or ""
end
end
function p.isAuthority( frame )
function p.isAuthority( frame )
     return _isAuthority( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isAuthority( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isDomain( frame )
function p.isDomain( frame )
     return _isDomain( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isDomain( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isHost( frame )
function p.isHost( frame )
     return _isHost( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isHost( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isIP( frame )
function p.isIP( frame )
     return _isIP( frame.args[ 1 ] ) or ""
     return URLutil.isIP( frame.args[ 1 ] ) or ""
end
end
function p.isIPv4( frame )
function p.isIPv4( frame )
     return _isIPv4( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isIPv4( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isIPv6( frame )
function p.isIPv6( frame )
     return _isIPv6( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isIPv6( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isMailAddress( frame )
function p.isMailAddress( frame )
     return _isMailAddress( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isMailAddress( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isMailLink( frame )
function p.isMailLink( frame )
     return _isMailLink( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isMailLink( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isProtocolDialog( frame )
function p.isProtocolDialog( frame )
     return _isProtocolDialog( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isProtocolDialog( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isProtocolWiki( frame )
function p.isProtocolWiki( frame )
     return _isProtocolWiki( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isProtocolWiki( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isRessourceURL( frame )
function p.isResourceURL( frame )
     return _isRessourceURL( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isResourceURL( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isSuspiciousURL( frame )
function p.isSuspiciousURL( frame )
     return _isSuspiciousURL( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isSuspiciousURL( frame.args[ 1 ] ) and "1" or ""
end
end
function p.isUnescapedURL( frame )
function p.isUnescapedURL( frame )
     return _isUnescapedURL( frame.args[ 1 ], frame.args[ 2 ] ) and "1" or ""
     return URLutil.isUnescapedURL( frame.args[ 1 ], frame.args[ 2 ] ) and "1" or ""
end
end
function p.isWebURL( frame )
function p.isWebURL( frame )
     return _isWebURL( frame.args[ 1 ] ) and "1" or ""
     return URLutil.isWebURL( frame.args[ 1 ] ) and "1" or ""
end
function p.URLutil()
    return URLutil
end
end


return p
return p
Anonymer Benutzer