Skip to content

Commit

Permalink
Merge f4a49f7 into 698ac69
Browse files Browse the repository at this point in the history
  • Loading branch information
josephmancuso committed Aug 16, 2018
2 parents 698ac69 + f4a49f7 commit 5aa9363
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 7 deletions.
18 changes: 18 additions & 0 deletions app/http/middleware/AddAttributeMiddleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
''' Load User Middleware'''


class AddAttributeMiddleware:
''' Middleware class which loads the current user into the request '''

def __init__(self, Request):
''' Inject Any Dependencies From The Service Container '''
self.request = Request

def before(self):
''' Run This Middleware Before The Route Executes '''
self.request.attribute = True

def after(self):
''' Run This Middleware After The Route Executes '''
pass

21 changes: 21 additions & 0 deletions app/http/middleware/MiddlewareTest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
''' Load User Middleware'''


class MiddlewareTest:
''' Middleware class which loads the current user into the request '''

def __init__(self, Request):
''' Inject Any Dependencies From The Service Container '''
self.request = Request

def before(self):
''' Run This Middleware Before The Route Executes '''
self.request.path = 'test/middleware/before/ran'

def after(self):
''' Run This Middleware After The Route Executes '''
pass

def load_user(self, request):
''' Load user into the request '''
request.set_user(Auth(request).user())
8 changes: 7 additions & 1 deletion config/middleware.py
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
ROUTE_MIDDLEWARE = {}
ROUTE_MIDDLEWARE = {
'test': 'app.http.middleware.MiddlewareTest.MiddlewareTest',
'middleware.test': [
'app.http.middleware.MiddlewareTest.MiddlewareTest',
'app.http.middleware.AddAttributeMiddleware.AddAttributeMiddleware'
]
}
19 changes: 13 additions & 6 deletions masonite/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -321,19 +321,26 @@ def run_middleware(self, type_of_middleware):

# Get the list of middleware to run for a route.
for arg in self.list_middleware:
middleware_to_run = self.request.app().make('RouteMiddleware')[arg]
if isinstance(middleware_to_run, str):
middleware_to_run = [middleware_to_run]

# Locate the middleware based on the string specified
try:
located_middleware = self.request.app().resolve(
locate(self.request.app().make('RouteMiddleware')[arg]))
for middleware in middleware_to_run:
located_middleware = self.request.app().resolve(locate(middleware))

# If the middleware has the specific type of middleware
# (before or after) then execute that
if hasattr(located_middleware, type_of_middleware):
getattr(located_middleware, type_of_middleware)()

except KeyError:
raise RouteMiddlewareNotFound(
"Could not find the '{0}' route middleware".format(arg))

# If the middleware has the specific type of middleware
# (before or after) then execute that
if hasattr(located_middleware, type_of_middleware):
getattr(located_middleware, type_of_middleware)()




class Get(BaseHttpRoute):
Expand Down
38 changes: 38 additions & 0 deletions tests/providers/test_route_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from masonite.helpers.routes import get
from masonite.testsuite.TestSuite import generate_wsgi
from app.http.controllers.ControllerTest import ControllerTest
from config import middleware


class TestRouteProvider:
Expand Down Expand Up @@ -143,6 +144,43 @@ def test_controller_returns_json_response_for_dict(self):
assert self.app.make('Response') == '{"id": 1}'
assert self.app.make('Request').header('Content-Type') == 'application/json; charset=utf-8'

def test_route_runs_str_middleware(self):
self.app.make('Route').url = '/view'
self.app.bind('RouteMiddleware', middleware.ROUTE_MIDDLEWARE)
self.app.bind('WebRoutes', [
get('/view', ControllerTest.returns_a_dict).middleware('test')
]
)

self.provider.boot(
self.app.make('WebRoutes'),
self.app.make('Route'),
self.app.make('Request'),
self.app.make('Environ'),
self.app.make('Headers'),
)

assert self.app.make('Request').path == 'test/middleware/before/ran'

def test_route_runs_middleware_with_list(self):
self.app.make('Route').url = '/view'
self.app.bind('RouteMiddleware', middleware.ROUTE_MIDDLEWARE)
self.app.bind('WebRoutes', [
get('/view', ControllerTest.returns_a_dict).middleware('middleware.test')
]
)

self.provider.boot(
self.app.make('WebRoutes'),
self.app.make('Route'),
self.app.make('Request'),
self.app.make('Environ'),
self.app.make('Headers'),
)

assert self.app.make('Request').path == 'test/middleware/before/ran'
assert self.app.make('Request').attribute == True

class Middleware:

def before(): pass
Expand Down

0 comments on commit 5aa9363

Please sign in to comment.