mirror of
https://github.com/nitnelave/lldap.git
synced 2023-04-12 14:25:13 +00:00
Move backend source to server/ subpackage
To clarify the organization.
This commit is contained in:
parent
3eb53ba5bf
commit
d8df47b35d
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
# Don't track cargo generated files
|
# Don't track cargo generated files
|
||||||
target/*
|
target/*
|
||||||
|
server/target/*
|
||||||
app/target/*
|
app/target/*
|
||||||
auth/target/*
|
auth/target/*
|
||||||
|
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,6 +1,7 @@
|
|||||||
# Generated by Cargo
|
# Generated by Cargo
|
||||||
# will have compiled files and executables
|
# will have compiled files and executables
|
||||||
/target/
|
/target
|
||||||
|
/serve/target/
|
||||||
/app/target
|
/app/target
|
||||||
/app/pkg
|
/app/pkg
|
||||||
/auth/target
|
/auth/target
|
||||||
|
80
Cargo.toml
80
Cargo.toml
@ -1,78 +1,6 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
members = [".", "auth", "app"]
|
members = [
|
||||||
|
"server",
|
||||||
[package]
|
"auth",
|
||||||
authors = ["Valentin Tolmer <valentin@tolmer.fr>", "Steve Barrau <steve.barrau@gmail.com>", "Thomas Wickham <mackwic@gmail.com>"]
|
"app"
|
||||||
edition = "2018"
|
|
||||||
name = "lldap"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
actix = "0.12"
|
|
||||||
actix-files = "0.6.0-beta.6"
|
|
||||||
actix-http = "3.0.0-beta.9"
|
|
||||||
actix-rt = "2.2.0"
|
|
||||||
actix-server = "2.0.0-beta.5"
|
|
||||||
actix-service = "2.0.0"
|
|
||||||
actix-web = "4.0.0-beta.8"
|
|
||||||
actix-web-httpauth = "0.6.0-beta.2"
|
|
||||||
anyhow = "*"
|
|
||||||
async-trait = "0.1"
|
|
||||||
base64 = "0.13"
|
|
||||||
bincode = "1.3"
|
|
||||||
chrono = { version = "*", features = [ "serde" ]}
|
|
||||||
clap = "3.0.0-beta.2"
|
|
||||||
cron = "*"
|
|
||||||
derive_builder = "0.10.2"
|
|
||||||
futures = "*"
|
|
||||||
futures-util = "*"
|
|
||||||
hmac = "0.10"
|
|
||||||
http = "*"
|
|
||||||
jwt = "0.13"
|
|
||||||
ldap3_server = "*"
|
|
||||||
lldap_auth = { path = "auth" }
|
|
||||||
log = "*"
|
|
||||||
orion = "0.16"
|
|
||||||
serde = "*"
|
|
||||||
serde_json = "1"
|
|
||||||
sha2 = "0.9"
|
|
||||||
sqlx-core = "=0.5.1"
|
|
||||||
thiserror = "*"
|
|
||||||
time = "0.2"
|
|
||||||
tokio = { version = "1.2.0", features = ["full"] }
|
|
||||||
tokio-util = "0.6.3"
|
|
||||||
tracing = "*"
|
|
||||||
tracing-actix-web = "0.4.0-beta.7"
|
|
||||||
tracing-log = "*"
|
|
||||||
tracing-subscriber = "*"
|
|
||||||
rand = { version = "0.8", features = ["small_rng", "getrandom"] }
|
|
||||||
juniper_actix = "0.4.0"
|
|
||||||
juniper = "0.15.6"
|
|
||||||
|
|
||||||
# TODO: update to 0.6 when out.
|
|
||||||
[dependencies.opaque-ke]
|
|
||||||
git = "https://github.com/novifinancial/opaque-ke"
|
|
||||||
rev = "eb59676a940b15f77871aefe1e46d7b5bf85f40a"
|
|
||||||
|
|
||||||
[dependencies.sqlx]
|
|
||||||
version = "0.5.1"
|
|
||||||
features = [
|
|
||||||
"any",
|
|
||||||
"chrono",
|
|
||||||
"macros",
|
|
||||||
"mysql",
|
|
||||||
"postgres",
|
|
||||||
"runtime-actix-native-tls",
|
|
||||||
"sqlite",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependencies.sea-query]
|
|
||||||
version = "0.9.4"
|
|
||||||
features = ["with-chrono"]
|
|
||||||
|
|
||||||
[dependencies.figment]
|
|
||||||
features = ["env", "toml"]
|
|
||||||
version = "*"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
mockall = "0.9.1"
|
|
||||||
|
@ -12,7 +12,7 @@ RUN set -x \
|
|||||||
app
|
app
|
||||||
RUN set -x \
|
RUN set -x \
|
||||||
# Install required packages
|
# Install required packages
|
||||||
&& apk add npm openssl-dev musl-dev
|
&& apk add npm openssl-dev musl-dev make perl
|
||||||
USER app
|
USER app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN set -x \
|
RUN set -x \
|
||||||
@ -21,7 +21,7 @@ RUN set -x \
|
|||||||
&& npm install rollup
|
&& npm install rollup
|
||||||
# Build
|
# Build
|
||||||
COPY --chown=app:app . /app
|
COPY --chown=app:app . /app
|
||||||
RUN cargo build --release
|
RUN cargo build --release -p lldap
|
||||||
# TODO: release mode.
|
# TODO: release mode.
|
||||||
RUN ./app/build.sh
|
RUN ./app/build.sh
|
||||||
|
|
||||||
|
12
README.md
12
README.md
@ -28,7 +28,8 @@ Backend:
|
|||||||
* Only a small, read-only subset of the LDAP protocol is supported.
|
* Only a small, read-only subset of the LDAP protocol is supported.
|
||||||
* Listens on another port for HTTP traffic.
|
* Listens on another port for HTTP traffic.
|
||||||
* The authentication API, based on JWTs, is under "/auth".
|
* The authentication API, based on JWTs, is under "/auth".
|
||||||
* The user management API is under "/api" (POST requests only).
|
* The user management API is a GraphQL API under "/api/graphql". The schema
|
||||||
|
is defined in `schema.graphql`.
|
||||||
* The static frontend files are served by this port too.
|
* The static frontend files are served by this port too.
|
||||||
|
|
||||||
Note that secure protocols (LDAPS, HTTPS) are currently not supported. This can
|
Note that secure protocols (LDAPS, HTTPS) are currently not supported. This can
|
||||||
@ -53,9 +54,9 @@ Data storage:
|
|||||||
interface between front and back-end. In particular, it contains the OPAQUE
|
interface between front and back-end. In particular, it contains the OPAQUE
|
||||||
structures and the JWT format.
|
structures and the JWT format.
|
||||||
* `app/`: The frontend.
|
* `app/`: The frontend.
|
||||||
* `src/`: The backend.
|
* `server/`: The backend.
|
||||||
* `domain/`: Domain-specific logic: users, groups, checking passwords...
|
* `src/domain/`: Domain-specific logic: users, groups, checking passwords...
|
||||||
* `infra/`: API, both GraphQL and LDAP
|
* `src/infra/`: API, both GraphQL and LDAP
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
@ -98,8 +99,7 @@ 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
|
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.
|
normal people doing this for free on their free time.
|
||||||
|
|
||||||
Make sure that you run `cargo fmt` in each crate that you modified (top-level,
|
Make sure that you run `cargo fmt` from the root before creating the PR.
|
||||||
`app/` and `auth/`) before creating the PR.
|
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
|
|
||||||
|
75
server/Cargo.toml
Normal file
75
server/Cargo.toml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
[package]
|
||||||
|
authors = ["Valentin Tolmer <valentin@tolmer.fr>", "Steve Barrau <steve.barrau@gmail.com>", "Thomas Wickham <mackwic@gmail.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
name = "lldap"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
actix = "0.12"
|
||||||
|
actix-files = "0.6.0-beta.6"
|
||||||
|
actix-http = "3.0.0-beta.9"
|
||||||
|
actix-rt = "2.2.0"
|
||||||
|
actix-server = "2.0.0-beta.5"
|
||||||
|
actix-service = "2.0.0"
|
||||||
|
actix-web = "4.0.0-beta.8"
|
||||||
|
actix-web-httpauth = "0.6.0-beta.2"
|
||||||
|
anyhow = "*"
|
||||||
|
async-trait = "0.1"
|
||||||
|
base64 = "0.13"
|
||||||
|
bincode = "1.3"
|
||||||
|
chrono = { version = "*", features = [ "serde" ]}
|
||||||
|
clap = "3.0.0-beta.2"
|
||||||
|
cron = "*"
|
||||||
|
derive_builder = "0.10.2"
|
||||||
|
futures = "*"
|
||||||
|
futures-util = "*"
|
||||||
|
hmac = "0.10"
|
||||||
|
http = "*"
|
||||||
|
jwt = "0.13"
|
||||||
|
ldap3_server = "*"
|
||||||
|
lldap_auth = { path = "../auth" }
|
||||||
|
log = "*"
|
||||||
|
orion = "0.16"
|
||||||
|
serde = "*"
|
||||||
|
serde_json = "1"
|
||||||
|
sha2 = "0.9"
|
||||||
|
sqlx-core = "=0.5.1"
|
||||||
|
thiserror = "*"
|
||||||
|
time = "0.2"
|
||||||
|
tokio = { version = "1.2.0", features = ["full"] }
|
||||||
|
tokio-util = "0.6.3"
|
||||||
|
tracing = "*"
|
||||||
|
tracing-actix-web = "0.4.0-beta.7"
|
||||||
|
tracing-log = "*"
|
||||||
|
tracing-subscriber = "*"
|
||||||
|
rand = { version = "0.8", features = ["small_rng", "getrandom"] }
|
||||||
|
juniper_actix = "0.4.0"
|
||||||
|
juniper = "0.15.6"
|
||||||
|
|
||||||
|
# TODO: update to 0.6 when out.
|
||||||
|
[dependencies.opaque-ke]
|
||||||
|
git = "https://github.com/novifinancial/opaque-ke"
|
||||||
|
rev = "eb59676a940b15f77871aefe1e46d7b5bf85f40a"
|
||||||
|
|
||||||
|
[dependencies.sqlx]
|
||||||
|
version = "0.5.1"
|
||||||
|
features = [
|
||||||
|
"any",
|
||||||
|
"chrono",
|
||||||
|
"macros",
|
||||||
|
"mysql",
|
||||||
|
"postgres",
|
||||||
|
"runtime-actix-native-tls",
|
||||||
|
"sqlite",
|
||||||
|
]
|
||||||
|
|
||||||
|
[dependencies.sea-query]
|
||||||
|
version = "0.9.4"
|
||||||
|
features = ["with-chrono"]
|
||||||
|
|
||||||
|
[dependencies.figment]
|
||||||
|
features = ["env", "toml"]
|
||||||
|
version = "*"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
mockall = "0.9.1"
|
@ -20,7 +20,7 @@ use std::sync::RwLock;
|
|||||||
|
|
||||||
async fn index(req: HttpRequest) -> actix_web::Result<NamedFile> {
|
async fn index(req: HttpRequest) -> actix_web::Result<NamedFile> {
|
||||||
let mut path = PathBuf::new();
|
let mut path = PathBuf::new();
|
||||||
path.push("app");
|
path.push("../app");
|
||||||
let file = req.match_info().query("filename");
|
let file = req.match_info().query("filename");
|
||||||
path.push(if file.is_empty() { "index.html" } else { file });
|
path.push(if file.is_empty() { "index.html" } else { file });
|
||||||
Ok(NamedFile::open(path)?)
|
Ok(NamedFile::open(path)?)
|
||||||
@ -120,7 +120,7 @@ mod tests {
|
|||||||
async fn test_index_ok() {
|
async fn test_index_ok() {
|
||||||
let req = TestRequest::default().to_http_request();
|
let req = TestRequest::default().to_http_request();
|
||||||
let resp = index(req).await.unwrap();
|
let resp = index(req).await.unwrap();
|
||||||
assert_eq!(resp.path(), Path::new("app/index.html"));
|
assert_eq!(resp.path(), Path::new("../app/index.html"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
@ -129,6 +129,6 @@ mod tests {
|
|||||||
.param("filename", "main.js")
|
.param("filename", "main.js")
|
||||||
.to_http_request();
|
.to_http_request();
|
||||||
let resp = index(req).await.unwrap();
|
let resp = index(req).await.unwrap();
|
||||||
assert_eq!(resp.path(), Path::new("app/main.js"));
|
assert_eq!(resp.path(), Path::new("../app/main.js"));
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user