From a43364a70f9265e75e5493ed488d0e8f7356cad6 Mon Sep 17 00:00:00 2001 From: Valentin Tolmer Date: Fri, 15 Oct 2021 22:09:17 +0900 Subject: [PATCH] README: Add more details and a screenshot --- .dockerignore | 1 + README.md | 32 ++++++++++++++++++++++++++------ screenshot.png | Bin 0 -> 47729 bytes 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 screenshot.png diff --git a/.dockerignore b/.dockerignore index 5c78c3c..aa8e773 100644 --- a/.dockerignore +++ b/.dockerignore @@ -19,3 +19,4 @@ lldap_config.toml server_key users.db* .gitignore +screenshot.png diff --git a/README.md b/README.md index 2f5526b..d13b66a 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,17 @@ # lldap - Light LDAP implementation for authentication -WARNING: This project is still WIP, it's still missing core functionality. For -updates, follow [@nitnelave1](https://twitter.com/nitnelave1). +WARNING: This project is still in alpha, with the basic core functionality +implemented but still very rough. For updates, follow +[@nitnelave1](https://twitter.com/nitnelave1) or join our [Discord +server](https://discord.gg/h5PEdRMNyP)! + This project is an lightweight authentication server that provides an opinionated, simplified LDAP interface for authentication: clients that can only speak LDAP protocol can talk to it and use it as an authentication server. +![Screenshot of the user list page](screenshot.png) + The goal is _not_ to provide a full LDAP server; if you're interested in that, check out OpenLDAP. This server is made to be: * simple to setup (no messing around with `slapd`) @@ -20,12 +25,13 @@ authentication. ## Architecture -The server is entirely written in Rust, using [actix](https://actix.rs) and -[yew](https://yew.rs) for the frontend. +The server is entirely written in Rust, using [actix](https://actix.rs) for the +backend and [yew](https://yew.rs) for the frontend. Backend: * Listens on a port for LDAP protocol. * Only a small, read-only subset of the LDAP protocol is supported. + * An extension to allow resetting the password through LDAP will be added. * Listens on another port for HTTP traffic. * The authentication API, based on JWTs, is under "/auth". * The user management API is a GraphQL API under "/api/graphql". The schema @@ -54,6 +60,9 @@ Data storage: interface between front and back-end. In particular, it contains the OPAQUE structures and the JWT format. * `app/`: The frontend. + * `src/components`: The elements containing the business and display logic of + the various pages and their components. + * `src/infra`: Various tools and utilities. * `server/`: The backend. * `src/domain/`: Domain-specific logic: users, groups, checking passwords... * `src/infra/`: API, both GraphQL and LDAP @@ -67,7 +76,13 @@ storage. They are hashed using a secret provided in the configuration (which can be given as environment variable or command line argument as well): this should be kept secret and shouldn't change (it would invalidate all passwords). -TODO: Add client-side password hashing. +Authentication is done via the OPAQUE protocol, meaning that the passwords are +never sent to the server, but instead the client proves that they know the +correct password (zero-knowledge proof). This is likely overkill, especially +considered that the LDAP interface requires sending the password to the server, +but it's one less potential flaw (especially since the LDAP interface can be +restricted to an internal docker-only network while the web app is exposed to +the Internet). ### JWTs and refresh tokens @@ -99,7 +114,12 @@ Contributions are welcome! Just fork and open a PR. Or just file a bug. We don't have a code of conduct, just be respectful and remember that it's just normal people doing this for free on their free time. -Make sure that you run `cargo fmt` from the root before creating the PR. +Make sure that you run `cargo fmt` from the root before creating the PR. And if +you change the GraphQL interface, you'll need to regenerate the schema by +running `./export_schema.sh`. + +Join our [Discord server](https://discord.gg/h5PEdRMNyP) if you have any +questions! ### Setup diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6fd8ae43a32fcbc5e3e59a4bca031cf4661419 GIT binary patch literal 47729 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

??Bw4aAkul7e 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 E2F<