48 lines
1.5 KiB
Dart
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}');
|
|
}
|