Advertisement
XZTablets

Untitled

Nov 1st, 2021 (edited)
1,093
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.28 KB | None | 0 0
  1. local http = game:GetService("HttpService");
  2. local _get = function(url, nocache, headers)
  3.   return syn.request({
  4.     Url = url,
  5.     Method = "GET",
  6.     Headers = headers or {};
  7.   });
  8. end;
  9. local _post = function(url, data, content_type, compress, headers)
  10.   headers = headers or {};
  11.   headers["Content-Type"] = content_type;
  12.   return syn.request({
  13.     Url = url,
  14.     Method = "POST",
  15.     Body = Data,
  16.     Headers = headers;
  17.   });
  18. end;
  19. local _decode = http.JSONDecode
  20.  
  21. local POST_METHODS = {'POST', 'PUT', 'PATCH'}
  22. local GET_METHODS = {'GET', 'DELETE'}
  23.  
  24. local ProxyService = {}
  25.  
  26. local processBody = function (body)
  27.   local pos, _, match = body:find('"""(.+)"""$')
  28.   local data = _decode(http, match)
  29.   local res = {
  30.     headers = data.headers,
  31.     status = data.status,
  32.     body = body:sub(1, pos - 1)
  33.   }
  34.   return res
  35. end
  36.  
  37. local httpGet = function (...)
  38.   local body = _get(...)
  39.   return body
  40. end
  41.  
  42. local httpPost = function (...)
  43.   local body = _post(...)
  44.   return body
  45. end
  46.  
  47. local getHeaders = function (this, method, target, headers, overrideProto)
  48.   local sendHeaders = headers or {}
  49.   sendHeaders['proxy-access-key'] = this.accessKey
  50.   sendHeaders['proxy-target'] = target
  51.   if overrideProto then
  52.     sendHeaders['proxy-target-override-proto'] = overrideProto
  53.   end
  54.   if method ~= 'GET' and method ~= 'POST' then
  55.     sendHeaders['proxy-target-override-method'] = method
  56.   end
  57.   if headers then
  58.     for header, value in next, headers do
  59.       local headerLower = header:lower();
  60.       if headerLower == 'user-agent' then
  61.         sendHeaders['user-agent'] = nil
  62.         sendHeaders['proxy-override-user-agent'] = value
  63.       end
  64.     end
  65.   end
  66.   return sendHeaders
  67. end
  68.  
  69. local generatePostHandler = function (method)
  70.   return function (self, target, path, data, contentType, compress, headers, overrideProto)
  71.     local sendHeaders = getHeaders(self, method, target, headers, overrideProto)
  72.     return httpPost(self.root .. path, data, contentType, compress, sendHeaders)
  73.   end
  74. end
  75.  
  76. local generateGetHandler = function (method)
  77.   return function (self, target, path, nocache, headers, overrideProto)
  78.     local sendHeaders = getHeaders(self, method, target, headers, overrideProto)
  79.     return httpGet(self.root .. path, nocache, sendHeaders)
  80.   end
  81. end
  82.  
  83. local urlProcessor = function (callback)
  84.   return function (self, url, ...)
  85.     local _, endpos = url:find('://')
  86.     local nextpos = url:find('/', endpos + 1) or #url + 1
  87.     local target = url:sub(endpos + 1, nextpos - 1)
  88.     local path = url:sub(nextpos)
  89.     return callback(self, target, path, ...)
  90.   end
  91. end
  92.  
  93. local generateWithHandler = function (handler, method, handlerMethod)
  94.   ProxyService[method:sub(1,1):upper() .. method:sub(2):lower()] = urlProcessor(handler(method))
  95. end
  96.  
  97. for _, method in next, POST_METHODS do
  98.   generateWithHandler(generatePostHandler, method)
  99. end
  100. for _, method in next, GET_METHODS do
  101.   generateWithHandler(generateGetHandler, method)
  102. end
  103.  
  104. function ProxyService:New(root, accessKey)
  105.   if root:sub(#root, #root) == '/' then
  106.     root = root:sub(1, #root - 1)
  107.   end
  108.   if not root:find('^http[s]?://') then
  109.     error('Root must include http:// or https:// at the beginning')
  110.   end
  111.   self.root = root
  112.   self.accessKey = accessKey
  113.   return self
  114. end
  115.  
  116. return ProxyService
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement