Skip to content
This repository has been archived by the owner on Oct 11, 2022. It is now read-only.

Commit

Permalink
Merge branch 'develop' into feature/issue-15-update-docs
Browse files Browse the repository at this point in the history
  • Loading branch information
CarlaLlama committed Feb 5, 2016
2 parents 825b0c6 + 9b924e0 commit 76c2d6e
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 41 deletions.
4 changes: 4 additions & 0 deletions docs/proxy_blacklist.yml → docs/proxy_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ proxy-blacklist:

# IPv6 ADDRESSES
- '2606:2800:220:1:248:1893:25c8:1946'

dns-servers:
- ['8.8.8.8', 53]
- ['8.8.4.4', 53]
13 changes: 0 additions & 13 deletions vumi_http_proxy/blacklist_reader.py

This file was deleted.

20 changes: 20 additions & 0 deletions vumi_http_proxy/config_reader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import yaml
from twisted.python import log


def read_config(configfile):
blacklist = []
dns_servers = []
if not configfile:
log.err("No PyYAML config file provided.")
else:
with open(str(configfile), 'r') as blstream:
bufferlist = yaml.load(blstream)
blacklist = bufferlist.get('proxy-blacklist')
dns_servers = parse_servers(bufferlist.get('dns-servers'))
return blacklist, dns_servers


def parse_servers(dns_servers):
dns_servers = [tuple(server) for server in dns_servers]
return dns_servers
6 changes: 3 additions & 3 deletions vumi_http_proxy/http_proxy.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from twisted.web.client import Agent, readBody
from urlparse import urlparse, urlunparse
from twisted.internet.defer import inlineCallbacks, succeed
# blacklist of disallowed domains (move to proxy_blacklist.py)


class ProxyFactory(http.HTTPFactory):
Expand Down Expand Up @@ -100,13 +99,14 @@ def __init__(self, blacklist, resolver, http_client):


class Initialize(object):
def __init__(self, blacklist, ip, port):
def __init__(self, blacklist, dnsservers, ip, port):
self.blacklist = blacklist
self.dnsservers = dnsservers
self.ip = ip
self.port = port

def main(self):
resolver = client.createResolver()
resolver = client.createResolver(self.dnsservers)
http_client = Agent(reactor)
factory = ProxyFactory(self.blacklist, resolver, http_client)
endpoint = serverFromString(
Expand Down
13 changes: 6 additions & 7 deletions vumi_http_proxy/queen_of_ni.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,21 @@

import click
from vumi_http_proxy import http_proxy
from vumi_http_proxy import blacklist_reader
from vumi_http_proxy import config_reader


@click.command()
@click.option('--interface', default='0.0.0.0', help='eg 0.0.0.0')
@click.option('--port', default=8080, help='eg 80')
@click.option(
'--blacklist', default=None,
help='example file: ./docs/proxy_blacklist.yml')
def cli(interface, port, blacklist):
@click.option('--configfile', default=None,
help='example file: ./docs/proxy_config.yml')
def cli(interface, port, configfile):
"""This script runs vumi-http-proxy on <interface>:<port>
with the specified blacklist"""
blacklist = blacklist_reader.read_blacklist(blacklist)
blacklist, dns_servers = config_reader.read_config(configfile)
interface = str(interface)
click.echo("Starting connection to %s:%d" % (interface, port))
i = http_proxy.Initialize(blacklist, interface, port)
i = http_proxy.Initialize(blacklist, dns_servers, interface, port)
i.main()


Expand Down
8 changes: 4 additions & 4 deletions vumi_http_proxy/servicemaker.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
from twisted.web.client import Agent
from twisted.internet import reactor
from vumi_http_proxy.http_proxy import ProxyFactory
from vumi_http_proxy import blacklist_reader
from vumi_http_proxy import config_reader


class Options(usage.Options):
optParameters = [["port", None, "8080",
"The port number to start the proxy"],
["interface", None, "0.0.0.0", "IP to start proxy on"],
["blacklist", None, None,
"Name of the YAML config file for blacklist"]]
["configfile", None, None,
"Name of the YAML config file for blacklist and servers"]]

def postOptions(self):
try:
Expand All @@ -34,7 +34,7 @@ class ProxyWorkerServiceMaker(object):
options = Options

def makeService(self, options):
blacklist = blacklist_reader.read_blacklist(options["blacklist"])
blacklist = config_reader.read_config(options["configfile"])
factory = ProxyFactory(
blacklist, client.createResolver(), Agent(reactor))
return strports.service("tcp:%d:interface=%s" % (
Expand Down
16 changes: 10 additions & 6 deletions vumi_http_proxy/test/test_queen_of_ni.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from click.testing import CliRunner
from vumi_http_proxy import queen_of_ni, http_proxy
from twisted.trial import unittest
import yaml


class TestQueenOfNi(unittest.TestCase):
Expand All @@ -11,8 +12,9 @@ def test_queen_of_ni(self):
self.patch(http_proxy.Initialize, 'main',
lambda x: self.initializers.append(x))
fake_blacklist = ["foo", "bar"]
filename = self.make_blacklist(fake_blacklist)
result = runner.invoke(queen_of_ni.cli, ['--blacklist', filename])
fake_dnsservers = [['8.8.8.8', 53], ['8.8.4.4', 53]]
filename = self.make_config(fake_blacklist, fake_dnsservers)
result = runner.invoke(queen_of_ni.cli, ['--configfile', filename])
self.assertEqual(result.exception, None)
self.assertEqual(result.output.splitlines(), [
'Starting connection to 0.0.0.0:8080',
Expand All @@ -24,11 +26,13 @@ def test_queen_of_ni(self):
self.assertEquals(initializer.port, 8080)
self.assertEquals(initializer.ip, "0.0.0.0")
self.assertEquals(initializer.blacklist, ["foo", "bar"])
self.assertEquals(
initializer.dnsservers, [('8.8.8.8', 53), ('8.8.4.4', 53)])

def make_blacklist(self, blacklist):
def make_config(self, blacklist, dnsservers):
filename = self.mktemp()
filecont = yaml.safe_dump(
{"proxy-blacklist": blacklist, "dns-servers": dnsservers})
with open(filename, 'w') as stream:
stream.write("proxy-blacklist:\n")
for ip_addr in blacklist:
stream.write(" - " + ip_addr + "\n")
stream.write(filecont)
return filename
18 changes: 10 additions & 8 deletions vumi_http_proxy/test/test_servicemaker.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from vumi_http_proxy import http_proxy
from twisted.trial import unittest
from vumi_http_proxy.test import helpers
import yaml


class TestOptions(unittest.TestCase):
Expand All @@ -11,25 +12,26 @@ def test_defaults(self):
options.parseOptions([])
self.assertEqual(options["port"], 8080)
self.assertEqual(options["interface"], "0.0.0.0")
self.assertEqual(options["blacklist"], None)
self.assertEqual(options["configfile"], None)

def test_override(self):
options = Options()
fake_blacklist = ["foo", "bar"]
filename = self.make_blacklist(fake_blacklist)
fake_dnsservers = [['8.8.8.8', 53], ['8.8.4.4', 53]]
filename = self.make_config(fake_blacklist, fake_dnsservers)
options.parseOptions(["--port", 8000])
options.parseOptions(["--interface", '127.0.0.1'])
options.parseOptions(["--blacklist", filename])
options.parseOptions(["--configfile", filename])
self.assertEqual(options["port"], 8000)
self.assertEqual(str(options["interface"]), "127.0.0.1")
self.assertEqual(str(options["blacklist"]), filename)
self.assertEqual(str(options["configfile"]), filename)

def make_blacklist(self, blacklist):
def make_config(self, blacklist, dnsservers):
filename = self.mktemp()
filecont = yaml.safe_dump(
{"proxy-blacklist": blacklist, "dns-servers": dnsservers})
with open(filename, 'w') as stream:
stream.write("proxy-blacklist:\n")
for ip_addr in blacklist:
stream.write(" - " + ip_addr + "\n")
stream.write(filecont)
return filename


Expand Down

0 comments on commit 76c2d6e

Please sign in to comment.