59 lines
2 KiB
Dart
59 lines
2 KiB
Dart
import "dart:io";
|
|
import "package:args/args.dart";
|
|
import "package:matrixoidc/controllers/settings_controller.dart";
|
|
import "package:matrixoidc/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("serviceDomain", abbr: "d")
|
|
..addOption("port", abbr: "p", defaultsTo: "8080")
|
|
..addOption("address", abbr: "a", defaultsTo: "127.0.0.1")
|
|
..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}");
|
|
}
|