import Vapor import Fluent import FluentPostgresDriver import SwiftSMTPVapor public struct ManageableUsers { public static func configure (_ app: Application, mainMenu: [MenuItem] = [], homePageName: String = "Home", userAdminPageName: String = "User Administration", maxConnectionsPerEventLoop: Int = 1, connectionPoolTimeout: TimeAmount = .seconds(10), sqlLogLevel: Logger.Level = .debug) async throws { app.databases.use(DatabaseConfigurationFactory.postgres(configuration: .init (hostname: Environment.get("DATABASE_HOST") ?? "localhost", port: Environment.get("DATABASE_PORT").flatMap(Int.init(_:)) ?? SQLPostgresConfiguration.ianaPortNumber, username: Environment.get("DATABASE_USERNAME") ?? "sampleapp", password: Environment.get("DATABASE_PASSWORD") ?? "sampleapp_password", database: Environment.get("DATABASE_NAME") ?? "sampleapp", tls: .prefer(try .init(configuration: .clientDefault))), maxConnectionsPerEventLoop: maxConnectionsPerEventLoop, connectionPoolTimeout: connectionPoolTimeout, sqlLogLevel: sqlLogLevel ), as: .psql) _ = try Environment.baseURL _ = try Environment.emailSender app.lifecycle.use(SMTPInitializer(configuration: .fromEnvironment())) app.views.use(.leaf) app.leaf.tags["baseURL"] = BaseURLTag() app.leaf.tags["hasRole"] = HasRoleTag() app.leaf.tags["mainmenuItems"] = MenuItemsTag (mainMenu + [MenuItem (section: "useradmin", path: "admin", name: userAdminPageName, role: "admin")], homePageName: homePageName) } }