initial commit

This commit is contained in:
Henry Hiles 2025-06-18 10:32:03 -04:00
commit 217621daac
No known key found for this signature in database
21 changed files with 1401 additions and 0 deletions

58
bin/matrixgate.dart Normal file
View file

@ -0,0 +1,58 @@
import "dart:io";
import "package:args/args.dart";
import "package:matrixgate/controllers/settings_controller.dart";
import "package:matrixgate/helpers/api_helper.dart";
import "package:riverpod/riverpod.dart";
import "package:shelf/shelf.dart";
import "package:shelf/shelf_io.dart";
import "package:shelf_router/shelf_router.dart";
void main(List<String> argsRaw) async {
final parser = ArgParser()
..addOption("socket", abbr: "s")
..addOption("address", abbr: "a", defaultsTo: "127.0.0.1")
..addOption("port", abbr: "p", defaultsTo: "8080")
..addOption("issuer", abbr: "i", mandatory: true)
..addOption("homeserver", abbr: "h", mandatory: true)
..addOption("jwtSecretFile", abbr: "j", mandatory: true)
..addOption("authorizeEndpoint", abbr: "e", mandatory: true);
final container = ProviderContainer();
container
.read(SettingsController.provider.notifier)
.set(parser.parse(argsRaw));
final apiHelper = container.read(ApiHelper.provider);
final handler = const Pipeline()
.addMiddleware(logRequests())
.addHandler(
(Router()
..get(
"/.well-known/openid-configuration",
apiHelper.openidConfiguration,
)
..get("/userInfo", apiHelper.userinfoHandler)
..get("/jwks.json", apiHelper.jwks)
..post("/login", apiHelper.handleLogin)
..post("/token", apiHelper.tokenHandler))
.call,
);
final args = container.read(SettingsController.provider)!;
final server = HttpServer.listenOn(
await ServerSocket.bind(
InternetAddress(
args.socket ?? args.address,
type: args.socket == null
? InternetAddressType.any
: InternetAddressType.unix,
),
int.parse(args.port),
),
);
serveRequests(server, handler);
print("OIDC provider listening at ${server.address.address}:${server.port}");
}