silly
This commit is contained in:
commit
fcf5e9ac65
|
@ -0,0 +1,39 @@
|
||||||
|
# ruby-rewrite-proxy
|
||||||
|
|
||||||
|
This project sets up a simple HTTP proxy using Ruby and Nginx. It's designed to forward requests to a specified host, with the option to replace certain strings in the response.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To install the necessary dependencies and set up the proxy, run the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash installer.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This will:
|
||||||
|
|
||||||
|
Install Ruby and the 'webrick' gem.
|
||||||
|
Install Nginx and enable it to start on boot.
|
||||||
|
Create a directory in the current user's home directory called 'ruby-proxy'.
|
||||||
|
Clone this repository into the 'ruby-proxy' directory.
|
||||||
|
Prompt you to enter values for 'server_name' and 'proxy_set_header'.
|
||||||
|
Create an Nginx configuration file using the provided template and your input.
|
||||||
|
Enable the new Nginx site.
|
||||||
|
Reload Nginx to apply the changes.
|
||||||
|
|
||||||
|
After running the script, don't forget to adjust config.yml to your likings.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
The proxy.rb script reads its configuration from config.yml. This file specifies the host to proxy requests to, the port to listen on, and a set of string replacements to apply to the response.
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
The proxy.rb script logs its output to ruby-proxy.log in the same directory.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
To start the proxy, run the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ruby proxy.rb
|
||||||
|
```
|
||||||
|
|
||||||
|
This will start the proxy, listening on the port specified in config.yml.
|
|
@ -0,0 +1,7 @@
|
||||||
|
replacements:
|
||||||
|
example.com: example.mydomain.com
|
||||||
|
">example<": "example @ mydomain<"
|
||||||
|
https:: http:
|
||||||
|
host: example.com
|
||||||
|
port: 8000
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Install Ruby and the Ruby dependency 'webrick'
|
||||||
|
if ! command -v ruby &> /dev/null; then
|
||||||
|
echo "Installing Ruby..."
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y ruby-full
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! gem list webrick -i > /dev/null; then
|
||||||
|
echo "Installing webrick..."
|
||||||
|
gem install webrick
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Nginx and enable the service
|
||||||
|
if ! command -v nginx &> /dev/null; then
|
||||||
|
echo "Installing Nginx..."
|
||||||
|
sudo apt-get install -y nginx
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Enabling Nginx service..."
|
||||||
|
sudo systemctl enable nginx
|
||||||
|
sudo systemctl start nginx
|
||||||
|
|
||||||
|
# Make a directory in the current user's home folder called 'ruby-proxy'
|
||||||
|
if [ ! -d ~/ruby-proxy ]; then
|
||||||
|
echo "Creating directory 'ruby-proxy'..."
|
||||||
|
mkdir ~/ruby-proxy
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone the contents of the specified git repository into that folder
|
||||||
|
if [ ! -d ~/ruby-proxy/ruby-rewrite-proxy ]; then
|
||||||
|
echo "Cloning repository..."
|
||||||
|
git clone https://adastra7.net/git/crt/ruby-rewrite-proxy.git ~/ruby-proxy
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ask the user to set server_name and proxy_set_header
|
||||||
|
read -p "Enter server_name (the URL from which you will access the Website): " server_name
|
||||||
|
read -p "Enter proxy_set_header (the host header for the website you wanna modify/proxy): " proxy_set_header
|
||||||
|
|
||||||
|
# Create the Nginx config file
|
||||||
|
if [ ! -f /etc/nginx/sites-available/ruby-proxy ]; then
|
||||||
|
echo "Creating Nginx configuration file..."
|
||||||
|
cat << EOF > /etc/nginx/sites-available/ruby-proxy
|
||||||
|
resolver 8.8.8.8;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name $server_name;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:8000/;
|
||||||
|
proxy_set_header Host $proxy_set_header;
|
||||||
|
proxy_set_header X-Real-IP \$remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||||
|
proxy_ssl_server_name on;
|
||||||
|
proxy_ssl_verify off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /favicon.ico {
|
||||||
|
return 204;
|
||||||
|
access_log off;
|
||||||
|
log_not_found off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /robots.txt {
|
||||||
|
return 200 "User-agent: *\nDisallow: /";
|
||||||
|
access_log off;
|
||||||
|
log_not_found off;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enable the site
|
||||||
|
if [ ! -f /etc/nginx/sites-enabled/ruby-proxy ]; then
|
||||||
|
echo "Enabling the site..."
|
||||||
|
sudo ln -s /etc/nginx/sites-available/ruby-proxy /etc/nginx/sites-enabled/
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Reload Nginx to apply the changes
|
||||||
|
echo "Reloading Nginx..."
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
|
||||||
|
echo "The script has completed. Please edit the config.yml in ~/ruby-proxy/config.yml to your liking now before running proxy.rb to start the proxy"
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "webrick"
|
||||||
|
require "net/http"
|
||||||
|
require "uri"
|
||||||
|
require "yaml"
|
||||||
|
|
||||||
|
# Load configuration from file
|
||||||
|
config = YAML.load_file(File.join(__dir__, 'config.yml'))
|
||||||
|
|
||||||
|
$replacements = config['replacements']
|
||||||
|
|
||||||
|
class MyProxy < WEBrick::HTTPServlet::AbstractServlet
|
||||||
|
HOST = config['host'] # set host to proxy duh
|
||||||
|
|
||||||
|
def do_GET(request, response)
|
||||||
|
uri = request.unparsed_uri
|
||||||
|
proxy_request(request, response, Net::HTTP::Get.new(uri, {"User-Agent" => "amongus happy meal guys this is crazy i ordered an amogus happy meal at 3am hugy wugy came and sucked my dick this is so scary"}))
|
||||||
|
end
|
||||||
|
|
||||||
|
def do_POST(request, response)
|
||||||
|
uri = request.unparsed_uri
|
||||||
|
proxy_request(request, response, Net::HTTP::Post.new(uri, {"User-Agent" => "amongus happy meal guys this is crazy i ordered an amogus happy meal at 3am hugy wugy came and sucked my dick this is so scary"}), request.body)
|
||||||
|
end
|
||||||
|
|
||||||
|
def proxy_request(request, response, http_request, body = nil)
|
||||||
|
http = Net::HTTP.new(HOST, 443)
|
||||||
|
http.use_ssl = true
|
||||||
|
http_request.body = body if body
|
||||||
|
|
||||||
|
resp = http.request(http_request)
|
||||||
|
body = resp.body
|
||||||
|
|
||||||
|
response.content_type = resp["content-type"]
|
||||||
|
$replacements.each { |k,v|
|
||||||
|
body = body.gsub(k,v)
|
||||||
|
}
|
||||||
|
response.body = body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Redirect stdout and stderr to a log file
|
||||||
|
$stdout.reopen(File.join(__dir__, 'ruby-proxy.log'), 'a')
|
||||||
|
$stderr.reopen($stdout)
|
||||||
|
|
||||||
|
server = WEBrick::HTTPServer.new(:Port => config['port'] || 8000) # define port on which the proxy runs ... so this would be localhost:8000
|
||||||
|
server.mount "/", MyProxy
|
||||||
|
|
||||||
|
trap("INT"){ server.shutdown }
|
||||||
|
server.start
|
||||||
|
|
Loading…
Reference in New Issue