handleMount method
Future<void>
handleMount(
- ArgResults argResults
)
Implementation
Future<void> handleMount(ArgResults argResults) async {
await _prepareClient();
final port = int.tryParse(argResults['port'] ?? '8080') ?? 8080;
final sslCertPath = argResults['ssl-cert'] as String?;
final sslKeyPath = argResults['ssl-key'] as String?;
final useSSL = sslCertPath != null && sslKeyPath != null;
print('\ud83d\udd10 User: ${client.email}');
print(
'\ud83c\udf10 Starting WebDAV server on port $port${useSSL ? " (HTTPS)" : ""}...\n');
try {
final filenFS = FilenFileSystem(client: client);
final davConfig = DAVConfig(
root: filenFS.directory('/'),
prefix: '/',
authenticationProvider: BasicAuthenticationProvider.plaintext(
realm: 'Filen WebDAV',
users: {'filen': 'filen-webdav'},
),
authorizationProvider: RoleBasedAuthorizationProvider(
readWriteUsers: {'filen'},
allowAnonymousRead: false,
),
enableLocking: true,
);
final dav = ShelfDAV.withConfig(davConfig);
HttpServer server;
if (useSSL) {
final context = SecurityContext()
..useCertificateChain(sslCertPath)
..usePrivateKey(sslKeyPath);
server = await shelf_io.serve(
dav.handler,
'0.0.0.0',
port,
securityContext: context,
);
} else {
server = await shelf_io.serve(dav.handler, '0.0.0.0', port);
}
final protocol = useSSL ? 'https' : 'http';
print('\u2705 WebDAV server started!');
print('\ud83d\udce1 URL: $protocol://localhost:$port/');
print(
'\ud83d\udce1 Network: $protocol://${await _getLocalIpAddress()}:$port/');
print('\ud83d\udd10 Auth: filen / filen-webdav');
if (useSSL) print('\ud83d\udd12 SSL: enabled');
print('\n\ud83d\uded1 Press Ctrl+C to stop\n');
ProcessSignal.sigint.watch().listen((_) async {
print('\n\ud83d\uded1 Shutting down...');
await server.close(force: true);
await config.clearWebdavPid();
print('\u2705 Server stopped.');
exit(0);
});
ProcessSignal.sigterm.watch().listen((_) async {
await server.close(force: true);
await config.clearWebdavPid();
exit(0);
});
} catch (e, stackTrace) {
stderr.writeln('\u274c Failed to start WebDAV server: $e');
if (debugMode) stderr.writeln(stackTrace);
await config.clearWebdavPid();
exit(1);
}
}