import 'dart:io'; import 'package:serverpod_auth_idp_server/core.dart'; import 'package:serverpod_auth_idp_server/providers/email.dart'; import 'package:serverpod_cloud_storage/serverpod_cloud_storage.dart'; import 'src/cache_busting.dart'; import 'src/generated/serverpod.dart'; import 'src/web/routes/app_config_route.dart'; /// The starting point of the Serverpod server. void run(List args) async { // Initialize Serverpod. The generated Serverpod class is already connected // with your project's generated code. final pod = Serverpod(args); // Initialize authentication services for the server. // Token managers will be used to validate and issue authentication keys, // and the identity providers will be the authentication options available for users. pod.initializeAuthServices( tokenManagerBuilders: [ // Server-side sessions: every request looks its session up in the // database, so signing out or deleting an account takes effect at once. // A session unused for 90 days expires; one in use never does. ServerSideSessionsConfigFromPasswords( defaultSessionInactivityTimeout: const Duration(days: 90), ), ], identityProviderBuilders: [ // Configure the email identity provider for email/password authentication. // The default setup works with Serverpod Cloud without configuration. In // development the verification codes are logged to the console, and in // staging and production they are sent through the Serverpod Cloud email // service. If you want to use a custom provider for sending emails, use // `EmailIdpConfigFromPasswords`. ServerpodCloudEmailIdpConfig( appDisplayName: 'halkyon_todo', ), ], ); // Serve all files in the web/static relative directory under /web. // These are used by the default web page. pod.webServer.addRoute( StaticRoute.withCacheBusting(cacheBustingConfig), cacheBustingConfig.mountPrefix, ); // Setup the app config route. // We build this configuration based on the servers api url and serve it to // the flutter app. pod.webServer.addRoute( AppConfigRoute(apiConfig: pod.config.apiServer), '/assets/assets/config.json', ); // Checks if the flutter web app has been built and serves it if it has. final appDir = Directory(Uri(path: 'web/app').toFilePath()); if (appDir.existsSync()) { // Serve the flutter web app under /. pod.webServer.addRoute( FlutterRoute( appDir, // If building the Flutter app with WASM, set the below parameter to // true and add the --wasm flag to the flutter build command. enableWasmHeaders: false, ), '/', ); } else { // If the flutter web app has not been built, serve the build app page. final defaultRoute = StaticRoute.file( File( Uri(path: 'web/pages/build_flutter_app.html').toFilePath(), ), ); pod.webServer.addMiddleware( FallbackMiddleware( fallback: defaultRoute, on: (response) => response.statusCode == 404, ).call, '/', ); pod.webServer.addRoute( defaultRoute, '/**', ); } // Configure cloud storage. // This setup works with Serverpod Cloud without extra configuration. // If you want to use a custom provider for cloud storage, replace these // with your preferred provider. pod.addCloudStorage( await ServerpodCloudProvider.private( fallback: () => DatabaseCloudStorage('private'), ), ); pod.addCloudStorage( await ServerpodCloudProvider.public( fallback: () => DatabaseCloudStorage('public'), ), ); // Start the server. await pod.start(); }