diff --git a/Cargo.lock b/Cargo.lock index 192ee9c..03d9cee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,6 +19,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + [[package]] name = "aliasable" version = "0.1.3" @@ -42,20 +51,21 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "askama" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb98f10f371286b177db5eeb9a6e5396609555686a35e1d4f7b9a9c6d8af0139" +version = "0.11.2" +source = "git+https://github.com/djc/askama.git#c131154cb1eaec52110e27fcdfb570308cc8a77e" dependencies = [ "askama_derive", "askama_escape", - "askama_shared", + "comrak", + "humansize", + "num-traits", + "percent-encoding", ] [[package]] name = "askama_axum" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780920656d4e3c8fc3999c1059cb036416423376b814fe8690dbd8c04308aba1" +version = "0.1.0" +source = "git+https://github.com/djc/askama.git#c131154cb1eaec52110e27fcdfb570308cc8a77e" dependencies = [ "askama", "axum-core", @@ -64,40 +74,23 @@ dependencies = [ [[package]] name = "askama_derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87bf87e6e8b47264efa9bde63d6225c6276a52e05e91bf37eaa8afd0032d6b71" +version = "0.12.0" +source = "git+https://github.com/djc/askama.git#c131154cb1eaec52110e27fcdfb570308cc8a77e" dependencies = [ - "askama_shared", + "mime", + "mime_guess", + "nom", "proc-macro2", + "quote", + "serde", "syn", + "toml_edit", ] [[package]] name = "askama_escape" version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" - -[[package]] -name = "askama_shared" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf722b94118a07fcbc6640190f247334027685d4e218b794dbfe17c32bf38ed0" -dependencies = [ - "askama_escape", - "humansize", - "mime", - "mime_guess", - "nom", - "num-traits", - "percent-encoding", - "proc-macro2", - "quote", - "serde", - "syn", - "toml", -] +source = "git+https://github.com/djc/askama.git#c131154cb1eaec52110e27fcdfb570308cc8a77e" [[package]] name = "async-attributes" @@ -340,18 +333,18 @@ dependencies = [ "syn", ] +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - [[package]] name = "bigdecimal" version = "0.3.0" @@ -550,6 +543,23 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "comrak" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784836d0812dade01579cc0cc9b1684847044e716fd7aa6bffbc172e42199500" +dependencies = [ + "entities", + "memchr", + "once_cell", + "pest", + "pest_derive", + "regex", + "slug", + "typed-arena", + "unicode_categories", +] + [[package]] name = "concurrent-queue" version = "2.1.0" @@ -559,12 +569,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - [[package]] name = "core-foundation-sys" version = "0.8.3" @@ -614,16 +618,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crypto-bigint" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "crypto-common" version = "0.1.6" @@ -689,15 +683,10 @@ dependencies = [ ] [[package]] -name = "der" -version = "0.5.1" +name = "deunicode" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid", - "crypto-bigint", - "pem-rfc7468", -] +checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" [[package]] name = "digest" @@ -707,6 +696,27 @@ checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer", "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", ] [[package]] @@ -721,6 +731,12 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +[[package]] +name = "entities" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca" + [[package]] name = "event-listener" version = "2.5.3" @@ -968,6 +984,24 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "http" version = "0.2.8" @@ -1010,9 +1044,12 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humansize" -version = "1.1.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] [[package]] name = "hyper" @@ -1128,9 +1165,6 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin", -] [[package]] name = "libc" @@ -1188,6 +1222,15 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest", +] + [[package]] name = "memchr" version = "2.5.0" @@ -1246,6 +1289,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom8" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" +dependencies = [ + "memchr", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1267,23 +1319,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-bigint-dig" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - [[package]] name = "num-integer" version = "0.1.45" @@ -1294,17 +1329,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.15" @@ -1312,7 +1336,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1426,15 +1449,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" -[[package]] -name = "pem-rfc7468" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01de5d978f34aa4b2296576379fcc416034702fd94117c56ffd8a1a767cefb30" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.2.0" @@ -1452,10 +1466,56 @@ dependencies = [ "log", "migration", "sea-orm 0.11.0-rc.1", + "serde", + "serde_json", "tokio", "tracing-subscriber", ] +[[package]] +name = "pest" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + [[package]] name = "pin-project" version = "1.0.12" @@ -1488,28 +1548,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkcs1" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78f66c04ccc83dd4486fd46c33896f4e17b24a7a3a6400dedc48ed0ddd72320" -dependencies = [ - "der", - "pkcs8", - "zeroize", -] - -[[package]] -name = "pkcs8" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" -dependencies = [ - "der", - "spki", - "zeroize", -] - [[package]] name = "polling" version = "2.5.2" @@ -1640,12 +1678,25 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + [[package]] name = "regex" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] @@ -1713,26 +1764,6 @@ dependencies = [ "syn", ] -[[package]] -name = "rsa" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf22754c49613d2b3b119f0e5d46e34a2c628a937e3024b8762de4e7d8c710b" -dependencies = [ - "byteorder", - "digest", - "num-bigint-dig", - "num-integer", - "num-iter", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core", - "smallvec", - "subtle", - "zeroize", -] - [[package]] name = "rust_decimal" version = "1.28.0" @@ -1769,7 +1800,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64", + "base64 0.21.0", ] [[package]] @@ -2082,6 +2113,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2143,6 +2183,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slug" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" +dependencies = [ + "deunicode", +] + [[package]] name = "smallvec" version = "1.10.0" @@ -2165,16 +2214,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "spki" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" -dependencies = [ - "base64ct", - "der", -] - [[package]] name = "sqlformat" version = "0.2.1" @@ -2204,6 +2243,7 @@ checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105" dependencies = [ "ahash", "atoi", + "base64 0.13.1", "bigdecimal", "bitflags", "byteorder", @@ -2211,7 +2251,7 @@ dependencies = [ "chrono", "crc", "crossbeam-queue", - "digest", + "dirs", "dotenvy", "either", "event-listener", @@ -2219,20 +2259,21 @@ dependencies = [ "futures-core", "futures-intrusive", "futures-util", - "generic-array", "hashlink", "hex", + "hkdf", + "hmac", "indexmap", "itoa", "libc", "log", + "md-5", "memchr", "num-bigint", "once_cell", "paste", "percent-encoding", "rand", - "rsa", "rust_decimal", "rustls", "rustls-pemfile", @@ -2250,6 +2291,7 @@ dependencies = [ "url", "uuid", "webpki-roots", + "whoami", ] [[package]] @@ -2470,6 +2512,28 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90a238ee2e6ede22fb95350acc78e21dc40da00bb66c0334bde83de4ed89424e" +dependencies = [ + "indexmap", + "nom8", + "serde", + "serde_spanned", + "toml_datetime", +] + [[package]] name = "tower" version = "0.4.13" @@ -2586,12 +2650,24 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + [[package]] name = "typenum" version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + [[package]] name = "unicase" version = "2.6.0" @@ -2814,6 +2890,16 @@ dependencies = [ "cc", ] +[[package]] +name = "whoami" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45dbc71f0cdca27dc261a9bd37ddec174e4a0af2b900b890f378460f745426e3" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2925,9 +3011,3 @@ name = "windows_x86_64_msvc" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" - -[[package]] -name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" diff --git a/Cargo.toml b/Cargo.toml index 9d5b6e9..a12e8b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,14 +10,16 @@ edition = "2021" # Core tokio = { version = "1.25.0", features = ["full"] } tracing-subscriber = "0.3.16" +dotenvy = "0.15.6" +log = "0.4.17" +serde = { version = "1.0.152", features = ["derive"] } # Database -sea-orm = { version = "0.11.0-rc.1", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros"] } +sea-orm = { version = "0.11.0-rc.1", features = ["sqlx-postgres", "runtime-tokio-rustls", "macros"] } migration = { path = "./migration" } # Web axum = "0.6.4" -askama = { version = "0.11.1", features = ["with-axum"] } -askama_axum = "0.2.1" -dotenvy = "0.15.6" -log = "0.4.17" +askama = { features = ["with-axum", "markdown"], git = "https://github.com/djc/askama.git" } +askama_axum = { git = "https://github.com/djc/askama.git" } +serde_json = "1.0.91" diff --git a/migration/Cargo.lock b/migration/Cargo.lock index ec944eb..f2e4840 100644 --- a/migration/Cargo.lock +++ b/migration/Cargo.lock @@ -225,18 +225,18 @@ dependencies = [ "syn", ] +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - [[package]] name = "bitflags" version = "1.3.2" @@ -366,12 +366,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - [[package]] name = "core-foundation-sys" version = "0.8.3" @@ -421,16 +415,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crypto-bigint" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "crypto-common" version = "0.1.6" @@ -495,17 +479,6 @@ dependencies = [ "syn", ] -[[package]] -name = "der" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid", - "crypto-bigint", - "pem-rfc7468", -] - [[package]] name = "digest" version = "0.10.6" @@ -514,6 +487,27 @@ checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer", "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", ] [[package]] @@ -760,6 +754,24 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hkdf" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "iana-time-zone" version = "0.1.53" @@ -851,9 +863,6 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin", -] [[package]] name = "libc" @@ -861,12 +870,6 @@ version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" -[[package]] -name = "libm" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" - [[package]] name = "link-cplusplus" version = "1.0.8" @@ -905,6 +908,15 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest", +] + [[package]] name = "memchr" version = "2.5.0" @@ -957,34 +969,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "num-bigint" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2399c9463abc5f909349d8aa9ba080e0b88b3ce2885389b60b993f39b1a56905" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - [[package]] name = "num-integer" version = "0.1.45" @@ -995,17 +979,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.15" @@ -1013,7 +986,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1104,15 +1076,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" -[[package]] -name = "pem-rfc7468" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01de5d978f34aa4b2296576379fcc416034702fd94117c56ffd8a1a767cefb30" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.2.0" @@ -1131,28 +1094,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkcs1" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78f66c04ccc83dd4486fd46c33896f4e17b24a7a3a6400dedc48ed0ddd72320" -dependencies = [ - "der", - "pkcs8", - "zeroize", -] - -[[package]] -name = "pkcs8" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" -dependencies = [ - "der", - "spki", - "zeroize", -] - [[package]] name = "polling" version = "2.5.2" @@ -1254,6 +1195,17 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + [[package]] name = "regex" version = "1.7.1" @@ -1293,26 +1245,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rsa" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf22754c49613d2b3b119f0e5d46e34a2c628a937e3024b8762de4e7d8c710b" -dependencies = [ - "byteorder", - "digest", - "num-bigint-dig", - "num-integer", - "num-iter", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core", - "smallvec", - "subtle", - "zeroize", -] - [[package]] name = "rustls" version = "0.20.8" @@ -1331,7 +1263,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64", + "base64 0.21.0", ] [[package]] @@ -1340,6 +1272,12 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +[[package]] +name = "ryu" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" + [[package]] name = "scopeguard" version = "1.1.0" @@ -1527,6 +1465,17 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha1" version = "0.10.5" @@ -1589,16 +1538,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "spki" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" -dependencies = [ - "base64ct", - "der", -] - [[package]] name = "sqlformat" version = "0.2.1" @@ -1628,12 +1567,13 @@ checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105" dependencies = [ "ahash", "atoi", + "base64 0.13.1", "bitflags", "byteorder", "bytes", "crc", "crossbeam-queue", - "digest", + "dirs", "dotenvy", "either", "event-listener", @@ -1641,22 +1581,24 @@ dependencies = [ "futures-core", "futures-intrusive", "futures-util", - "generic-array", "hashlink", "hex", + "hkdf", + "hmac", "indexmap", "itoa", "libc", "log", + "md-5", "memchr", - "num-bigint", "once_cell", "paste", "percent-encoding", "rand", - "rsa", "rustls", "rustls-pemfile", + "serde", + "serde_json", "sha1", "sha2", "smallvec", @@ -1667,6 +1609,7 @@ dependencies = [ "tokio-stream", "url", "webpki-roots", + "whoami", ] [[package]] @@ -2093,6 +2036,16 @@ dependencies = [ "cc", ] +[[package]] +name = "whoami" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45dbc71f0cdca27dc261a9bd37ddec174e4a0af2b900b890f378460f745426e3" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2180,9 +2133,3 @@ name = "windows_x86_64_msvc" version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" - -[[package]] -name = "zeroize" -version = "1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" diff --git a/migration/Cargo.toml b/migration/Cargo.toml index cfb7e2b..484aebd 100644 --- a/migration/Cargo.toml +++ b/migration/Cargo.toml @@ -15,5 +15,5 @@ async-std = { version = "^1", features = ["attributes", "tokio1"] } version = "^0.10.0" features = [ "runtime-tokio-rustls", - "sqlx-mysql", + "sqlx-postgres", ] diff --git a/migration/src/m20230204_001022_create_pages.rs b/migration/src/m20230204_001022_create_pages.rs index 7cfe580..d8c6ee5 100644 --- a/migration/src/m20230204_001022_create_pages.rs +++ b/migration/src/m20230204_001022_create_pages.rs @@ -18,8 +18,9 @@ impl MigrationTrait for Migration { .primary_key(), ) .col(ColumnDef::new(Page::Draft).boolean().not_null()) - .col(ColumnDef::new(Page::Slug).string().not_null()) + .col(ColumnDef::new(Page::Slug).string().not_null().unique_key()) .col(ColumnDef::new(Page::Title).string().not_null()) + .col(ColumnDef::new(Page::ShowTitle).boolean().not_null()) .col(ColumnDef::new(Page::Description).string()) .col(ColumnDef::new(Page::Published).date_time().not_null()) .col(ColumnDef::new(Page::Updated).date_time()) @@ -43,6 +44,7 @@ pub enum Page { Draft, Slug, Title, + ShowTitle, Description, Published, Updated, diff --git a/migration/src/m20230204_011034_create_posts.rs b/migration/src/m20230204_011034_create_posts.rs index 66a8df1..4a20b69 100644 --- a/migration/src/m20230204_011034_create_posts.rs +++ b/migration/src/m20230204_011034_create_posts.rs @@ -18,7 +18,7 @@ impl MigrationTrait for Migration { .primary_key(), ) .col(ColumnDef::new(Post::Draft).boolean().not_null()) - .col(ColumnDef::new(Post::Slug).string().not_null()) + .col(ColumnDef::new(Post::Slug).string().not_null().unique_key()) .col(ColumnDef::new(Post::Title).string().not_null()) .col(ColumnDef::new(Post::Summary).string()) .col(ColumnDef::new(Post::Published).date_time().not_null()) diff --git a/src/block_types.rs b/src/block_types.rs new file mode 100644 index 0000000..9df95fc --- /dev/null +++ b/src/block_types.rs @@ -0,0 +1,22 @@ +use serde::{Serialize, Deserialize}; + +pub enum BlockTypes { + HR, + HEADER { + text: String, + size: i8, + }, + PARAGRAPH { + text: String, + }, + MARKDOWN { + content: String, + }, + UNSUPPORTED +} + +#[derive(Deserialize)] +pub struct Header { + pub text: String, + pub size: i8, +} diff --git a/src/entities/page.rs b/src/entities/page.rs index d48767a..c356b76 100644 --- a/src/entities/page.rs +++ b/src/entities/page.rs @@ -7,9 +7,11 @@ use sea_orm::entity::prelude::*; pub struct Model { #[sea_orm(primary_key, auto_increment = false)] pub id: String, - pub draft: i8, + pub draft: bool, + #[sea_orm(unique)] pub slug: String, pub title: String, + pub show_title: bool, pub description: Option, pub published: DateTime, pub updated: Option, diff --git a/src/entities/page_block.rs b/src/entities/page_block.rs index c92d607..2b9a082 100644 --- a/src/entities/page_block.rs +++ b/src/entities/page_block.rs @@ -19,8 +19,8 @@ pub enum Relation { belongs_to = "super::page::Entity", from = "Column::Owner", to = "super::page::Column::Id", - on_update = "Restrict", - on_delete = "Restrict" + on_update = "NoAction", + on_delete = "NoAction" )] Page, } diff --git a/src/entities/post.rs b/src/entities/post.rs index fbedf4d..c9c6217 100644 --- a/src/entities/post.rs +++ b/src/entities/post.rs @@ -7,7 +7,8 @@ use sea_orm::entity::prelude::*; pub struct Model { #[sea_orm(primary_key, auto_increment = false)] pub id: String, - pub draft: i8, + pub draft: bool, + #[sea_orm(unique)] pub slug: String, pub title: String, pub summary: Option, diff --git a/src/entities/post_block.rs b/src/entities/post_block.rs index 1f5fe58..1ab65f9 100644 --- a/src/entities/post_block.rs +++ b/src/entities/post_block.rs @@ -19,8 +19,8 @@ pub enum Relation { belongs_to = "super::post::Entity", from = "Column::Owner", to = "super::post::Column::Id", - on_update = "Restrict", - on_delete = "Restrict" + on_update = "NoAction", + on_delete = "NoAction" )] Post, } diff --git a/src/main.rs b/src/main.rs index e0a1be9..c11a8f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,12 @@ use std::{net::SocketAddr, env}; use std::str::FromStr; use axum::{Router, routing::get}; -use log::{info, error}; +use log::info; use sea_orm::{Database, DatabaseConnection}; mod routes; mod entities; +mod block_types; #[tokio::main] async fn main() { @@ -35,7 +36,7 @@ async fn main() { let app_state = AppState { db_conn }; let app = Router::new() - .route("/", get(routes::root::root)) + .route("/", get(routes::root)) .with_state(app_state); info!("Attempting to bind to address..."); diff --git a/src/routes/mod.rs b/src/routes/mod.rs index b7ca40a..5f577be 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -1 +1,65 @@ -pub(crate) mod root; \ No newline at end of file +use askama::Template; +use axum::extract::State; +use log::warn; + +use crate::block_types; +use crate::{block_types::BlockTypes, AppState}; +use crate::entities::{prelude::*, *}; +use sea_orm::*; + +#[derive(Template)] +#[template(path = "page.html")] +pub(crate) struct HomeSpecialTemplate { + title: String, + description: Option, + show_title: bool, + content_blocks: Vec, + year: String +} + +// Handle the special home page +pub(crate) async fn root( + state: State + ) -> HomeSpecialTemplate { + + // Grab special home slug page content + let page_meta: page::Model = Page::find() + .filter(page::Column::Slug.eq("home")) + .one(&state.db_conn) + .await + .expect("Failed to get home page! HALTING") + .unwrap(); + + let blocks: Vec = page_meta.find_related(PageBlock) + .order_by_asc(page_block::Column::Order) + .all(&state.db_conn) + .await + .expect("Failed to get home page blocks! HALTING"); + + // TODO: should move this into its own func, it'll be reused a bit + let content_blocks: Vec = blocks.into_iter().map(|f| + match f.r#type.as_str() { + "HR" => BlockTypes::HR, + "PARAGRAPH" => BlockTypes::PARAGRAPH { text: f.content }, + "MARKDOWN" => BlockTypes::MARKDOWN { content: f.content }, + "HEADER" => { + let deserde: block_types::Header = serde_json::from_str(&f.content.as_str()).expect("Incorrect HEADER formatting"); + + BlockTypes::HEADER { text: deserde.text, size: deserde.size } + } + _ => { + warn!("Unsupported block type! ({})", f.r#type.as_str()); + BlockTypes::UNSUPPORTED + } + } + + ).collect(); + + HomeSpecialTemplate { + title: page_meta.clone().title, + description: page_meta.clone().description, + show_title: page_meta.clone().show_title, + content_blocks, + year: "2023".to_string() + } +} \ No newline at end of file diff --git a/src/routes/root.rs b/src/routes/root.rs deleted file mode 100644 index 39e6c82..0000000 --- a/src/routes/root.rs +++ /dev/null @@ -1,9 +0,0 @@ -use askama::Template; - -#[derive(Template)] -#[template(path = "index.html")] -pub(crate) struct IndexTemplate { } - -pub(crate) async fn root() -> IndexTemplate { - IndexTemplate {} -} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 72bca69..9207213 100644 --- a/templates/base.html +++ b/templates/base.html @@ -3,8 +3,7 @@ - {% block title %} Evie / eviee / uwueviee - {{ title }}{% endblock %} - + Evie / eviee / uwueviee - {% block title %}{{ title }}{% endblock %} diff --git a/templates/page.html b/templates/page.html index 6ad084c..81572c5 100644 --- a/templates/page.html +++ b/templates/page.html @@ -17,8 +17,19 @@

{{ title }}

{% endif -%} - {% for block in blocks %} -

block is real

+ {% for content_block in content_blocks %} + {% match content_block %} + {% when BlockTypes::HR %} +
+ {% when BlockTypes::PARAGRAPH { text } %} +

{{ text }}

+ {% when BlockTypes::MARKDOWN { content } %} + {{ content|markdown }} + {% when BlockTypes::HEADER { text, size } %} + {{text}} + {% when BlockTypes::UNSUPPORTED %} + UNSUPPORTED block type here! + {% endmatch %} {% endfor %} {% endblock %}