from masonite.foundation import response_handler from masonite.storage import StorageCapsule from masonite.auth import Sign from masonite.environment import LoadEnvironment from masonite.utils.structures import load from masonite.utils.location import base_path from masonite.middleware import ( SessionMiddleware, EncryptCookies, LoadUserMiddleware, MaintenanceModeMiddleware, ) from masonite.routes import Route from masonite.configuration.Configuration import Configuration from masonite.configuration import config from app.middlewares import VerifyCsrfToken, AuthenticationMiddleware from masonite.api.middleware import JWTAuthenticationMiddleware class Kernel: http_middleware = [MaintenanceModeMiddleware, EncryptCookies] route_middleware = { "web": [SessionMiddleware, LoadUserMiddleware, VerifyCsrfToken], "auth": [AuthenticationMiddleware], # .. "api": [ JWTAuthenticationMiddleware ], } def __init__(self, app): self.application = app def register(self): # Register routes self.load_environment() self.register_configurations() self.register_middleware() self.register_routes() self.register_database() self.register_templates() self.register_storage() def load_environment(self): LoadEnvironment() def register_configurations(self): # load configuration self.application.bind("config.location", "config") configuration = Configuration(self.application) configuration.load() self.application.bind("config", configuration) key = config("application.key") self.application.bind("key", key) self.application.bind("sign", Sign(key)) # set locations self.application.bind("resources.location", "resources/") self.application.bind("controllers.location", "app/controllers") self.application.bind("jobs.location", "app/jobs") self.application.bind("providers.location", "app/providers") self.application.bind("mailables.location", "app/mailables") self.application.bind("listeners.location", "app/listeners") self.application.bind("validation.location", "app/validation") self.application.bind("notifications.location", "app/notifications") self.application.bind("events.location", "app/events") self.application.bind("tasks.location", "app/tasks") self.application.bind("models.location", "app/models") self.application.bind("observers.location", "app/models/observers") self.application.bind("policies.location", "app/policies") self.application.bind("commands.location", "app/commands") self.application.bind("middlewares.location", "app/middlewares") self.application.bind("server.runner", "masonite.commands.ServeCommand.main") def register_middleware(self): self.application.make("middleware").add(self.route_middleware).add(self.http_middleware) def register_routes(self): Route.set_controller_locations(self.application.make("controllers.location")) self.application.bind("routes.location", "routes/web") self.application.make("router").add( Route.group( load(self.application.make("routes.location"), "ROUTES"), middleware=["web"] ) ) #API Development self.application.bind("routes.api.location", "routes/api") def register_database(self): from masoniteorm.query import QueryBuilder self.application.bind( "builder", QueryBuilder(connection_details=config("database.databases")), ) self.application.bind("migrations.location", "databases/migrations") self.application.bind("seeds.location", "databases/seeds") self.application.bind("resolver", config("database.db")) def register_templates(self): self.application.bind("views.location", "templates/") def register_storage(self): storage = StorageCapsule() storage.add_storage_assets(config("filesystem.staticfiles")) self.application.bind("storage_capsule", storage) self.application.set_response_handler(response_handler) self.application.use_storage_path(base_path("storage"))