Guest User

Untitled

a guest
Aug 24th, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.48 KB | None | 0 0
  1. -----------------------------------------------------------------------------
  2. -- Parses a url and returns a table with all its parts according to RFC 2396
  3. -- The following grammar describes the names given to the URL parts
  4. -- <url> ::= <scheme>://<authority>/<path>;<params>?<query>#<fragment>
  5. -- <authority> ::= <userinfo>@<host>:<port>
  6. -- <userinfo> ::= <user>[:<password>]
  7. -- <path> :: = {<segment>/}<segment>
  8. -- Input
  9. --   url: uniform resource locator of request
  10. --   default: table with default values for each field
  11. -- Returns
  12. --   table with the following fields, where RFC naming conventions have
  13. --   been preserved:
  14. --     scheme, authority, userinfo, user, password, host, port,
  15. --     path, params, query, fragment
  16. -- Obs:
  17. --   the leading '/' in {/<path>} is considered part of <path>
  18. -----------------------------------------------------------------------------
  19. function parse(url, default)
  20.     -- initialize default parameters
  21.     local parsed = {}
  22.     for i,v in base.pairs(default or parsed) do parsed[i] = v end
  23.     -- empty url is parsed to nil
  24.     if not url or url == "" then return nil, "invalid url" end
  25.     -- remove whitespace
  26.     -- url = string.gsub(url, "%s", "")
  27.     -- get fragment
  28.     url = string.gsub(url, "#(.*)$", function(f)
  29.         parsed.fragment = f
  30.         return ""
  31.     end)
  32.     -- get scheme
  33.     url = string.gsub(url, "^([%w][%w%+%-%.]*)%:",
  34.         function(s) parsed.scheme = s; return "" end)
  35.     -- get authority
  36.     url = string.gsub(url, "^//([^/]*)", function(n)
  37.         parsed.authority = n
  38.         return ""
  39.     end)
  40.     -- get query stringing
  41.     url = string.gsub(url, "%?(.*)", function(q)
  42.         parsed.query = q
  43.         return ""
  44.     end)
  45.     -- get params
  46.     url = string.gsub(url, "%;(.*)", function(p)
  47.         parsed.params = p
  48.         return ""
  49.     end)
  50.     -- path is whatever was left
  51.     if url ~= "" then parsed.path = url end
  52.     local authority = parsed.authority
  53.     if not authority then return parsed end
  54.     authority = string.gsub(authority,"^([^@]*)@",
  55.         function(u) parsed.userinfo = u; return "" end)
  56.     authority = string.gsub(authority, ":([^:]*)$",
  57.         function(p) parsed.port = p; return "" end)
  58.     if authority ~= "" then parsed.host = authority end
  59.     local userinfo = parsed.userinfo
  60.     if not userinfo then return parsed end
  61.     userinfo = string.gsub(userinfo, ":([^:]*)$",
  62.         function(p) parsed.password = p; return "" end)
  63.     parsed.user = userinfo
  64.     return parsed
  65. end
Add Comment
Please, Sign In to add comment