Files
cloud_archiver/server/bin/server.dart
T
2026-07-12 03:39:51 +08:00

48 lines
1.5 KiB
Dart

import 'dart:io';
import 'package:args/args.dart';
import 'package:file/local.dart';
import 'package:shelf/shelf_io.dart';
import 'package:shelf_dav/shelf_dav.dart';
void main(List<String> args) async {
var parser = ArgParser();
parser.addOption('port', abbr: 'p', defaultsTo: '8800', help: '服务运行端口号');
parser.addOption('dir', abbr: 'd', defaultsTo: './repo/', help: '文件存储路径');
parser.addOption('user', abbr: 'u', help: 'DAV服务用户名', mandatory: true);
parser.addOption('auth', abbr: 'a', help: 'DAV服务密码', mandatory: true);
var argResults = parser.parse(args);
if (args.isEmpty) {
stdout.writeln(parser.usage);
return;
}
final fs = const LocalFileSystem();
final rootDir = fs.directory(argResults.option('dir') ?? './repo/');
if (!rootDir.existsSync()) {
rootDir.createSync(recursive: true);
}
final config = DAVConfig(
root: rootDir,
prefix: '/dav',
allowAnonymous: false,
// 1G
maxUploadSize: 1024 * 1024 * 1024,
readOnly: false,
propertyStorageType: PropertyStorageType.file,
authenticationProvider: BasicAuthenticationProvider.plaintext(
users: {argResults.option('user')!: argResults.option('auth')!},
),
);
final dav = ShelfDAV.withConfig(config);
final ip = InternetAddress.anyIPv4;
final port = int.parse(argResults.option('port') ?? '8800');
final server = await serve(dav.handler, ip, port);
print('WebDAV server listening on port ${server.port}');
}