Skip to content

Commit

Permalink
removed repoze.who.vepauth
Browse files Browse the repository at this point in the history
  • Loading branch information
tarekziade committed Feb 23, 2012
1 parent 49d1dbf commit e0aedd0
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 126 deletions.
31 changes: 1 addition & 30 deletions etc/tokenserver-dev.ini
Expand Up @@ -7,6 +7,7 @@ debug = true
[tokenserver]
backend = tokenserver.assignment.fixednode.DefaultNodeAssignmentBackend
service_entry = http://example.com
applications = sync-2.1

[powerhose]
backend = tokenserver.crypto.master.PowerHoseRunner
Expand Down Expand Up @@ -72,33 +73,3 @@ formatter = generic
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

# End logging configuration

# repoze.who config
# These settings get used when you config.include("pyramid_whoauth")
[who:plugin:vepauth]
use = repoze.who.plugins.vepauth:make_plugin
audiences = *
token_url = /1.0/{application}/{version}
token_manager = tokenserver.tokenmgr:NodeTokenManager
token_manager_secret = TED KOPPEL IS A ROBOT
token_manager_applications = sync-1.0
verifier = tokenserver.bid:PowerHoseVerifier

[who:general]
request_classifier = repoze.who.classifiers:default_request_classifier
challenge_decider = repoze.who.classifiers:default_challenge_decider
remote_user_key = REMOTE_USER

[who:identifiers]
plugins = vepauth

[who:authenticators]
plugins = vepauth

[who:challengers]
plugins = vepauth

[who:mdproviders]
plugins =


3 changes: 1 addition & 2 deletions setup.py
Expand Up @@ -5,8 +5,7 @@
from setuptools import setup, find_packages


requires = ['cornice', 'repoze.who.plugins.vepauth', 'mozsvc',
'pyramid_whoauth', 'powerhose', 'circus']
requires = ['cornice', 'mozsvc', 'powerhose', 'circus']


setup(name='tokenserver',
Expand Down
19 changes: 19 additions & 0 deletions tokenserver/__init__.py
Expand Up @@ -3,6 +3,7 @@
# You can obtain one at http://mozilla.org/MPL/2.0/.
import logging
from ConfigParser import NoSectionError
from collections import defaultdict

from mozsvc.config import get_configurator
from mozsvc.plugin import load_and_register
Expand All @@ -26,6 +27,24 @@ def includeme(config):
except NoSectionError:
pass

# load apps and set them up back in the setting
settings = config.registry.settings
key = 'tokenserver.applications'
applications = defaultdict(list)
for element in settings.get(key, '').split(','):
element = element.strip()
if element == '':
continue
element = element.split('-')
if len(element) != 2:
continue
app, version = element
applications[app].append(version)

settings[key] = applications




def main(global_config, **settings):
config = get_configurator(global_config, **settings)
Expand Down
36 changes: 31 additions & 5 deletions tokenserver/crypto/master.py
Expand Up @@ -4,6 +4,7 @@
import signal
import base64
import sys
import threading

from pyramid.threadlocal import get_current_registry

Expand All @@ -12,9 +13,9 @@

from zope.interface import implements, Interface

from powerhose import JobRunner

from powerhose.jobrunner import JobRunner
from powerhose.client.workers import Workers
from powerhose import logger


class IPowerhoseRunner(Interface):
Expand All @@ -38,26 +39,51 @@ def bye(*args, **kw):


def stop_runners():
logger.debug("stop_runner starts")

for workers in _workers.values():
workers.stop()

logger.debug("workers killed")

for runner in _runners.values():
logger.debug('Stopping powerhose master')
runner.stop()

logger.debug("stop_runner ends")


class CryptoWorkers(threading.Thread):
def __init__(self, workers_cmd, num_workers):
threading.Thread.__init__(self)
self.workers = Workers(workers_cmd, num_workers=num_workers)

def run(self):
logger.debug('Starting powerhose workers')
self.workers.run()

def stop(self):
logger.debug('Stopping powerhose workers')
self.workers.stop()
self.join()


class PowerHoseRunner(object):
implements(IPowerhoseRunner)

def __init__(self, endpoint, workers_cmd, **kw):
def __init__(self, endpoint, workers_cmd, num_workers=5, **kw):
self.endpoint = endpoint
self.workers_cmd = workers_cmd
if self.endpoint not in _runners:
_runners[self.endpoint] = JobRunner(self.endpoint)
_workers[self.endpoint] = Workers(self.workers_cmd)
_workers[self.endpoint] = CryptoWorkers(self.workers_cmd,
num_workers=num_workers)
self.runner = _runners[self.endpoint]
logger.debug('Starting powerhose master')
self.runner.start()
time.sleep(.5)
self.workers = _workers[self.endpoint]
self.workers.run()
self.workers.start()

def execute(self, *args, **kw):
return self.runner.execute(*args, **kw)
39 changes: 8 additions & 31 deletions tokenserver/tests/test_fixednode.ini
Expand Up @@ -7,6 +7,8 @@ debug = true
[tokenserver]
backend = tokenserver.assignment.fixednode.DefaultNodeAssignmentBackend
service_entry = http://example.com
applications = sync-2.1, queuey-1.0


# Paster configuration for Pyramid
[filter:catcherror]
Expand Down Expand Up @@ -39,7 +41,12 @@ port = 5000
# Begin logging configuration

[loggers]
keys = root, tokenserver
keys = root, tokenserver, powewrhose

[logger_powerhose]
level = DEBUG
handlers = console
qalname = powerhose

[handlers]
keys = console
Expand All @@ -66,33 +73,3 @@ formatter = generic
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

# End logging configuration

# repoze.who config
# These settings get used when you config.include("pyramid_whoauth")
[who:plugin:vepauth]
use = repoze.who.plugins.vepauth:make_plugin
audiences = *
verifier = tokenserver.tests.support:VeryDummyVerifier
token_url = /1.0/{application}/{version}
token_manager = tokenserver.tokenmgr:NodeTokenManager
token_manager_secret = TED KOPPEL IS A ROBOT
token_manager_applications = sync-2.1, queuey-1.0

[who:general]
request_classifier = repoze.who.classifiers:default_request_classifier
challenge_decider = repoze.who.classifiers:default_challenge_decider
remote_user_key = REMOTE_USER

[who:identifiers]
plugins = vepauth

[who:authenticators]
plugins = vepauth

[who:challengers]
plugins = vepauth

[who:mdproviders]
plugins =


55 changes: 20 additions & 35 deletions tokenserver/tests/test_powerhose.ini
Expand Up @@ -7,11 +7,13 @@ debug = true
[tokenserver]
backend = tokenserver.assignment.fixednode.DefaultNodeAssignmentBackend
service_entry = http://example.com
applications = sync-2.1, queuey-1.0

[powerhose]
backend = tokenserver.bid.PowerHoseRunner
#endpoint = ipc://tokenserver.ipc
endpoint = ipc:///tmp/master-routing.ipc
backend = tokenserver.crypto.master.PowerHoseRunner
endpoint = ipc:///tmp/tokenserver.ipc
workers_cmd = bin/python tokenserver/crypto/pyworker.py ipc:///tmp/tokenserver.ipc
num_workers = 1

# Paster configuration for Pyramid
[filter:catcherror]
Expand Down Expand Up @@ -44,7 +46,7 @@ port = 5000
# Begin logging configuration

[loggers]
keys = root, tokenserver
keys = root, tokenserver, powerhose, circus

[handlers]
keys = console
Expand All @@ -56,10 +58,23 @@ keys = generic
level = INFO
handlers = console

[logger_circus]
level = DEBUG
handlers = console
qualname = circus
propagate = 0

[logger_powerhose]
level = DEBUG
handlers = console
qualname = powerhose
propagate = 0

[logger_tokenserver]
level = DEBUG
handlers =
handlers = console
qualname = tokenserver
propagate = 0

[handler_console]
class = StreamHandler
Expand All @@ -71,33 +86,3 @@ formatter = generic
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

# End logging configuration

# repoze.who config
# These settings get used when you config.include("pyramid_whoauth")
[who:plugin:vepauth]
use = repoze.who.plugins.vepauth:make_plugin
audiences = *
token_url = /1.0/{application}/{version}
token_manager = tokenserver.tokenmgr:NodeTokenManager
token_manager_secret = TED KOPPEL IS A ROBOT
token_manager_applications = sync-2.1, queuey-1.0
verifier = tokenserver.bid:PowerHoseVerifier

[who:general]
request_classifier = repoze.who.classifiers:default_request_classifier
challenge_decider = repoze.who.classifiers:default_challenge_decider
remote_user_key = REMOTE_USER

[who:identifiers]
plugins = vepauth

[who:authenticators]
plugins = vepauth

[who:challengers]
plugins = vepauth

[who:mdproviders]
plugins =


38 changes: 15 additions & 23 deletions tokenserver/tests/test_powerhose.py
Expand Up @@ -12,6 +12,8 @@
import json
import os
from pyramid import testing
from logging.config import fileConfig
from ConfigParser import NoSectionError

from vep.verifiers.local import LocalVerifier
from vep import DummyVerifier
Expand All @@ -22,26 +24,11 @@
from mozsvc.config import load_into_settings

from tokenserver.assignment import INodeAssignment
from tokenserver import main
from tokenserver.bid import IPowerhoseRunner, get_worker, stop_runners
from tokenserver.tests.test_service import TestService

from tokenserver import main, logger

class Worker(threading.Thread):
def __init__(self, endpoint):
threading.Thread.__init__(self)
self.endpoint = endpoint

def run(self):
self.worker = get_worker(self.endpoint)
try:
self.worker.run()
except Exception:
self.worker.stop()

def join(self):
self.worker.stop()
threading.Thread.join(self)
from tokenserver.crypto.master import IPowerhoseRunner, stop_runners
from tokenserver.crypto.pyworker import get_worker
from tokenserver.tests.test_service import TestService


class TestPowerService(unittest.TestCase):
Expand All @@ -55,8 +42,13 @@ def _getassertion(self):
return self.verifier.make_assertion(email, url)

def setUp(self):
logger.debug("TestPowerService.setUp")
self.config = testing.setUp()
settings = {}
try:
fileConfig(self.get_ini())
except NoSectionError:
pass
load_into_settings(self.get_ini(), settings)
self.config.add_settings(settings)
self.config.include("tokenserver")
Expand All @@ -66,15 +58,15 @@ def setUp(self):
wsgiapp = CatchErrors(wsgiapp)
self.app = TestApp(wsgiapp)
self.verifier = DummyVerifier
self.worker = Worker("ipc:///tmp/master-routing.ipc")
self.worker.start()
time.sleep(.1)
time.sleep(1.)

def tearDown(self):
self.worker.join()
logger.debug("TestPowerService.tearDown")
stop_runners()
logger.debug("TestPowerService.tearDown over")

def test_valid_app(self):
logger.debug("TestPowerService.test_valid_app")
headers = {'Authorization': 'Browser-ID %s' % self._getassertion()}
res = self.app.get('/1.0/sync/2.1', headers=headers)
self.assertEqual(res.json['service_entry'], 'http://example.com')
13 changes: 13 additions & 0 deletions tokenserver/util.py
Expand Up @@ -8,6 +8,9 @@
import binascii
import os

from pyramid.httpexceptions import HTTPError
from webob import Response

from mozsvc.http_helpers import get_url
from mozsvc.exceptions import BackendError

Expand Down Expand Up @@ -102,3 +105,13 @@ def decode_ldap_uri(ldap):
bind_user = results['username']

return ldapuri, bind_user, bind_password


class JsonError(HTTPError):
def __init__(self, status=400, location='body', name='', description=''):
body = {'status': status, 'errors':
[{'location': location, 'name': name, 'description': description}]
}
Response.__init__(self, json.dumps(body))
self.status = status
self.content_type = 'application/json'

0 comments on commit e0aedd0

Please sign in to comment.