diff --git a/Dockerfile b/Dockerfile
index 08dc670..d96b0aa 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -44,13 +44,15 @@ FROM alpine:3.14
WORKDIR /app
-COPY --from=builder /app/app/index.html /app/app/main.js /app/app/style.css app/
+COPY --from=builder /app/app/index_local.html app/index.html
+COPY --from=builder /app/app/static app/static
COPY --from=builder /app/app/pkg app/pkg
COPY --from=builder /app/target/release/lldap lldap
COPY docker-entrypoint.sh lldap_config.docker_template.toml ./
RUN set -x \
&& apk add --no-cache bash \
+ && for file in $(cat app/static/libraries.txt); do wget -P app/static "$file"; done \
&& chmod a+r -R .
ENV LDAP_PORT=3890
diff --git a/app/index.html b/app/index.html
index 5bcf44e..1b4d45a 100644
--- a/app/index.html
+++ b/app/index.html
@@ -23,7 +23,7 @@
-
+
diff --git a/app/index_local.html b/app/index_local.html
new file mode 100644
index 0000000..d703efa
--- /dev/null
+++ b/app/index_local.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ LLDAP Administration
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/static/fonts.css b/app/static/fonts.css
new file mode 100644
index 0000000..27bb97c
--- /dev/null
+++ b/app/static/fonts.css
@@ -0,0 +1,18 @@
+/* latin-ext */
+@font-face {
+ font-family: 'Bebas Neue';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(JTUSjIg69CK48gW7PXoo9Wdhyzbi.woff2) format('woff2');
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Bebas Neue';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url(JTUSjIg69CK48gW7PXoo9Wlhyw.woff2) format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
\ No newline at end of file
diff --git a/app/static/libraries.txt b/app/static/libraries.txt
new file mode 100644
index 0000000..fdb4b42
--- /dev/null
+++ b/app/static/libraries.txt
@@ -0,0 +1,6 @@
+https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css
+https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js
+https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css
+https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css
+https://fonts.gstatic.com/s/bebasneue/v2/JTUSjIg69CK48gW7PXoo9Wdhyzbi.woff2
+https://fonts.gstatic.com/s/bebasneue/v2/JTUSjIg69CK48gW7PXoo9Wlhyw.woff2
\ No newline at end of file
diff --git a/app/style.css b/app/static/style.css
similarity index 100%
rename from app/style.css
rename to app/static/style.css
diff --git a/server/src/infra/tcp_server.rs b/server/src/infra/tcp_server.rs
index 36231f8..9d083ba 100644
--- a/server/src/infra/tcp_server.rs
+++ b/server/src/infra/tcp_server.rs
@@ -14,7 +14,7 @@ use actix_files::{Files, NamedFile};
use actix_http::HttpServiceBuilder;
use actix_server::ServerBuilder;
use actix_service::map_config;
-use actix_web::{dev::AppConfig, web, App, HttpRequest, HttpResponse};
+use actix_web::{dev::AppConfig, web, App, HttpResponse};
use anyhow::{Context, Result};
use hmac::{Hmac, NewMac};
use sha2::Sha512;
@@ -22,11 +22,10 @@ use std::collections::HashSet;
use std::path::PathBuf;
use std::sync::RwLock;
-async fn index(req: HttpRequest) -> actix_web::Result {
+async fn index() -> actix_web::Result {
let mut path = PathBuf::new();
path.push("app");
- let file = req.match_info().query("filename");
- path.push(if file.is_empty() { "index.html" } else { file });
+ path.push("index.html");
Ok(NamedFile::open(path)?)
}
@@ -62,11 +61,6 @@ fn http_config(
server_url,
mail_options,
}))
- // Serve index.html and main.js, and default to index.html.
- .route(
- "/{filename:(index\\.html|main\\.js|style\\.css)?}",
- web::get().to(index),
- )
.service(web::scope("/auth").configure(auth_service::configure_server::))
// API endpoint.
.service(
@@ -76,8 +70,12 @@ fn http_config(
)
// Serve the /pkg path with the compiled WASM app.
.service(Files::new("/pkg", "./app/pkg"))
- // Default to serve index.html for unknown routes, to support routing.
- .service(web::scope("/").route("/.*", web::get().to(index)));
+ // Serve static files
+ .service(Files::new("/static", "./app/static"))
+ // Serve the index
+ .service(web::scope("/")
+ .route("", web::get().to(index))
+ .route("index.html", web::get().to(index)));
}
pub(crate) struct AppState {