// Haveno App extends the features of Haveno, supporting mobile devices and more.
// Copyright (C) 2024 Kewbit (https://kewbit.org)
// Source Code: https://git.haveno.com/haveno/haveno-app.git
//
// Author: Kewbit
// Website: https://kewbit.org
// Contact Email: me@kewbit.org
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
class TorDaemonConfig {
final String host;
final int controlPort;
final List socks5ProxyPorts;
final List httpProxyPorts;
final String? hashedPassword;
TorDaemonConfig({
required this.host,
required this.controlPort,
this.socks5ProxyPorts = const [9050],
this.httpProxyPorts = const [8118],
this.hashedPassword,
}) {
_validateOnionAddress(host);
}
static void _validateOnionAddress(String host) {
print(host);
final pattern = RegExp(r'^[a-zA-Z0-9]{56}\.onion$');
if (!pattern.hasMatch(host)) {
throw const FormatException('Invalid v3 onion address');
}
}
Map toJson() {
return {
'host': host,
'controlPort': controlPort,
'socks5ProxyPorts': socks5ProxyPorts,
'httpProxyPorts': httpProxyPorts,
'hashedPassword': hashedPassword,
};
}
factory TorDaemonConfig.fromJson(Map json) {
return TorDaemonConfig(
host: json['host'],
controlPort: json['controlPort'],
socks5ProxyPorts: List.from(json['socks5ProxyPorts'] ?? [9050]),
httpProxyPorts: List.from(json['httpProxyPorts'] ?? [8118]),
hashedPassword: json['hashedPassword'],
);
}
factory TorDaemonConfig.getDefault() {
return TorDaemonConfig(
host: '127.0.0.1',
controlPort: 9051,
socks5ProxyPorts: [9050],
httpProxyPorts: [8118],
);
}
}