diff --git a/src/user_management/pages/clients.gmi b/src/user_management/pages/clients.gmi new file mode 100644 index 0000000..53714f3 --- /dev/null +++ b/src/user_management/pages/clients.gmi @@ -0,0 +1,32 @@ +# Client-cert Compatible Gemini Clients + +The following is an (incomplete) list of clients known to support client certicates. You will need to use one of these (or another client-cert compatible client) in order to log in. + +## Amfora (TUI) + +Amfora supports client certs, although they currently need to be manually linked. Instructions for how to do this can be found on Amfora's GitHub + +=> https://github.com/makeworld-the-better-one/amfora#client-certificates Instructions +=> https://github.com/makeworld-the-better-one/amfora.git Website + +## Kristal (GUI) + +Kristal supports certificates out of the box! All you need to do is click on a link requesting a client certificate, and Kristall will prompt you to create one. Remember to set an account password if you're using ephemeral certificates though, otherwise you won't be able to log back in when they expire! + +=> https://github.com/MasterQ32/kristall Website + +## AV-98 (TUI) + +AV-98 (The OG gemini client) will automatically generate a client certificate for you when you click on a link that requires one. + +=> https://tildegit.org/solderpunk/AV-98 Website + +## Gemini for iOS (Mobile) + +=> https://github.com/pitr/gemini-ios Website + +## Others? + +If you know of more clients, please feel free to add them to this list by opening a PR or an issue on the kochab (Gemini Server SDK) GitHub! + +=> https://github.com/Alch-Emi/kochab/issues/new New Issue diff --git a/src/user_management/routes.rs b/src/user_management/routes.rs index 6c46383..55b613b 100644 --- a/src/user_management/routes.rs +++ b/src/user_management/routes.rs @@ -96,10 +96,13 @@ impl UserManagementRoutes for crate::Server { /// /// See [`UserManagementRoutes::add_um_routes()`] fn add_um_routes(self) -> Self { + let clients_page = Response::success_gemini(include_str!("pages/clients.gmi")); + #[allow(unused_mut)] let mut modified_self = self.add_route("/account", handle_base::) .add_route("/account/askcert", handle_ask_cert::) - .add_route("/account/register", handle_register::); + .add_route("/account/register", handle_register::) + .add_route("/account/clients", clients_page); #[cfg(feature = "user_management_advanced")] { modified_self = modified_self