Add pre-commit

This commit is contained in:
Christophe Mehay 2017-08-21 00:46:24 +02:00
parent 27dd14ab33
commit f206ea354c
8 changed files with 114 additions and 40 deletions

View file

@ -1,20 +1,17 @@
#!/usr/bin/env python3
import os
from json import dumps
from re import match
from pyentrypoint import DockerLinks
import argparse
import logging
import os
import sys
from json import dumps
from re import match
from jinja2 import Environment
from jinja2 import FileSystemLoader
from pyentrypoint import DockerLinks
from .Service import ServicesGroup, Service
import logging
from .Service import Service
from .Service import ServicesGroup
class Setup(object):
@ -163,13 +160,10 @@ class Setup(object):
def setup_hosts(self):
self.setup = {}
try:
self._get_setup_from_env()
self._get_setup_from_links()
self.check_services()
self.apply_conf()
except BaseException:
raise Exception('Something wrongs with setup')
self._get_setup_from_env()
self._get_setup_from_links()
self.check_services()
self.apply_conf()
def check_services(self):
for group in self.services:
@ -263,15 +257,26 @@ def main():
help='Setup hosts')
args = parser.parse_args()
onions = Onions()
if args.setup:
onions.setup_hosts()
return
onions.torrc_parser()
try:
onions = Onions()
if args.setup:
onions.setup_hosts()
else:
onions.torrc_parser()
except BaseException as e:
error_msg = str(e)
else:
error_msg = None
if args.json:
if error_msg:
print(dumps({'error': error_msg}))
sys.exit(1)
logging.getLogger().setLevel(logging.ERROR)
print(onions.to_json())
else:
if error_msg:
logging.error(error_msg)
sys.exit(1)
print(onions)

View file

@ -1,12 +1,11 @@
'This class define a service link'
import logging
import os
import re
from base64 import b32encode
from hashlib import sha1
from Crypto.PublicKey import RSA
from hashlib import sha1
from base64 import b32encode
import os
import logging
class ServicesGroup(object):
@ -18,6 +17,9 @@ class ServicesGroup(object):
hidden_service_dir = "/var/lib/tor/hidden_service/"
def __init__(self, name=None, service=None, hidden_service_dir=None):
name_regex = r'^[a-zA-Z0-9-_]+$'
self.hidden_service_dir = hidden_service_dir or self.hidden_service_dir
if not name and not service:
raise Exception(
@ -25,6 +27,10 @@ class ServicesGroup(object):
)
self.services = []
self.name = name or service.host
if not re.match(name_regex, self.name):
raise Exception(
'Group {name} has invalid name'.format(name=self.name)
)
if service:
self.add_service(service)

View file

@ -1,2 +1,5 @@
from .Onions import Onions, main
from .Service import ServicesGroup, Service, Ports
from .Onions import main
from .Onions import Onions
from .Service import Ports
from .Service import Service
from .Service import ServicesGroup

View file

@ -33,7 +33,7 @@ setup(
install_requires=['pyentrypoint==0.5.0',
'Jinja2>=2.8',
'pycrypto',],
'pycrypto', ],
entry_points={
'console_scripts': [

View file

@ -1,13 +1,13 @@
from onions import Onions
import json
import os
import pytest
import re
from Crypto.PublicKey import RSA
from hashlib import sha1
from base64 import b32encode
from hashlib import sha1
import pytest
from Crypto.PublicKey import RSA
from onions import Onions
def get_key_and_onion():
key = '''
@ -40,6 +40,7 @@ bhJ3M9WzP/EMkAzyW8mVs1moFp3hRcfQlZHl6g1U9D8=
return key.strip(), onion
def get_torrc_template():
return r'''
{% for service_group in services %}
@ -65,6 +66,7 @@ SocksPort 0
# useless line for Jinja bug
'''.strip()
def test_ports(monkeypatch):
env = {
'SERVICE1_PORTS': '80:80',
@ -104,6 +106,7 @@ def test_ports(monkeypatch):
assert check == 10
def test_docker_links(fs, monkeypatch):
env = {
@ -186,6 +189,7 @@ def test_key(monkeypatch):
assert onion.services[0].onion_url == onion_url
def test_key_in_secret(fs, monkeypatch):
env = {
'SERVICE1_SERVICE_NAME': 'group1',
@ -284,6 +288,7 @@ def test_configuration(fs, monkeypatch):
(port.port_from, port.dest) for port in service.ports
) == set([(80, 'unix://unix.socket')])
def test_groups(monkeypatch):
env = {
'SERVICE1_SERVICE_NAME': 'group1',
@ -323,6 +328,7 @@ def test_groups(monkeypatch):
assert re.match(onion_match, group.onion_url)
def test_json(monkeypatch):
env = {
'SERVICE1_SERVICE_NAME': 'group1',
@ -345,6 +351,7 @@ def test_json(monkeypatch):
assert len(jsn['group1']) == 3
assert len(jsn['group2']) == 1
def test_output(monkeypatch):
env = {
'SERVICE1_SERVICE_NAME': 'group1',
@ -363,6 +370,7 @@ def test_output(monkeypatch):
for item in ['group1', 'group2', '.onion', ',']:
assert item in str(onion)
def test_not_valid_share_port(monkeypatch):
env = {
'SERVICE1_SERVICE_NAME': 'group1',
@ -382,6 +390,7 @@ def test_not_valid_share_port(monkeypatch):
onion.check_services()
assert 'Same port for multiple services' in str(excinfo.value)
def test_not_valid_no_services(monkeypatch):
env = {
'SERVICE1_SERVICE_NAME': 'group1',