This commit is contained in:
Henry Hiles 2025-08-02 23:28:51 -04:00
commit b9adcb205e
No known key found for this signature in database
14 changed files with 274 additions and 214 deletions

View file

@ -0,0 +1,33 @@
import "dart:io";
import "package:matrix/matrix.dart";
import "package:nexusbot/controllers/settings_controller.dart";
import "package:riverpod/riverpod.dart";
import "package:sqflite_common_ffi/sqflite_ffi.dart";
class ClientController extends AsyncNotifier<Client> {
@override
Future<Client> build() async {
final settings = ref.watch(SettingsController.provider)!;
final client = Client(
"nexusbot",
database: await MatrixSdkDatabase.init(
"NexusBot",
database: await databaseFactoryFfi.openDatabase(inMemoryDatabasePath),
),
);
await client.checkHomeserver(settings.homeserver);
await client.login(
LoginType.mLoginPassword,
identifier: AuthenticationUserIdentifier(user: settings.name),
password: (await File(settings.botPasswordFile).readAsString()).trim(),
);
return client;
}
static final provider = AsyncNotifierProvider<ClientController, Client>(
ClientController.new,
);
}

View file

@ -1,36 +0,0 @@
import "dart:io";
import "dart:convert";
import "package:http/http.dart";
import "package:nexusbot/controllers/settings_controller.dart";
import "package:riverpod/riverpod.dart";
class LoginController extends AsyncNotifier<String> {
@override
Future<String> build() async {
final settings = ref.watch(SettingsController.provider)!;
final response = await post(
settings.homeserver.replace(path: "_matrix/client/v3/login"),
headers: {HttpHeaders.contentTypeHeader: "application/json"},
body: json.encode({
"type": "m.login.password",
"device_id": "script",
"identifier": {"type": "m.id.user", "user": settings.name},
"password": (await File(
settings.botPasswordFile,
).readAsString()).trim(),
}),
);
if (response.statusCode != 200) {
throw Exception(
"Login failed, check your name, homeserver and botPasswordFile: ${response.body}",
);
}
return json.decode(response.body)["access_token"];
}
static final provider = AsyncNotifierProvider<LoginController, String>(
LoginController.new,
);
}

View file

@ -0,0 +1,27 @@
import "dart:io";
import "package:enough_mail/enough_mail.dart";
import "package:nexusbot/controllers/settings_controller.dart";
import "package:riverpod/riverpod.dart";
class MailClientController extends AsyncNotifier<MailClient> {
@override
Future<MailClient> build() async {
final settings = ref.watch(SettingsController.provider)!;
final account = MailAccount.fromManualSettings(
email: settings.email,
name: settings.mailName,
incomingHost: settings.mailDomain,
outgoingHost: settings.mailDomain,
password: (await File(settings.smtpPasswordFile).readAsString()).trim(),
);
final client = MailClient(account);
await client.connect();
return client;
}
static final provider =
AsyncNotifierProvider<MailClientController, MailClient>(
MailClientController.new,
);
}

View file

@ -0,0 +1,15 @@
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:nexusbot/models/registration.dart";
import "package:riverpod/riverpod.dart";
class RegistrationController extends Notifier<IList<Registration>> {
@override
IList<Registration> build() => const IList.empty();
void add(Registration registration) => state = state.add(registration);
static final provider =
NotifierProvider<RegistrationController, IList<Registration>>(
RegistrationController.new,
);
}