From 6913426619b4c111fdd0cf8034b9dc6ca7f1762d Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 19 Jun 2025 16:13:59 -0500 Subject: [PATCH] getting things to work a bit --- Cargo.lock | 3013 +++++++++++++++++----- Cargo.toml | 17 + content/_index.md | 2 +- data.db | 0 justfile | 2 +- src/api/camp_form.rs | 616 ++--- src/api/contact.rs | 168 ++ src/api/errors.rs | 5 - src/api/health_form.rs | 804 +++--- src/api/local_trip_form.rs | 29 +- src/api/mod.rs | 9 +- src/api/mt_church_form.rs | 234 ++ src/api/mt_form.rs | 944 +++---- src/api/mt_parent_form.rs | 241 ++ src/api/mt_teacher_form.rs | 234 ++ src/email.rs | 30 + src/main.rs | 98 +- src/testing.json | 2 + static/css/main.css | 7 + templates/shortcodes/disciplemaking.html | 32 +- 20 files changed, 4607 insertions(+), 1880 deletions(-) create mode 100644 data.db create mode 100644 src/api/contact.rs create mode 100644 src/api/mt_church_form.rs create mode 100644 src/api/mt_parent_form.rs create mode 100644 src/api/mt_teacher_form.rs create mode 100644 src/email.rs create mode 100644 src/testing.json diff --git a/Cargo.lock b/Cargo.lock index 54b4660..94bfa3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,14 +1,14 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "actix-codec" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617a8268e3537fe1d8c9ead925fca49ef6400927ee7bc26750e90ecee14ce4b8" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "bitflags", + "bitflags 2.9.1", "bytes", "futures-core", "futures-sink", @@ -20,24 +20,62 @@ dependencies = [ ] [[package]] -name = "actix-http" -version = "3.3.1" +name = "actix-cors" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74" +checksum = "daa239b93927be1ff123eebada5a3ff23e89f0124ccb8609234e5103d5a5ae6d" +dependencies = [ + "actix-utils", + "actix-web", + "derive_more 2.0.1", + "futures-util", + "log", + "once_cell", + "smallvec", +] + +[[package]] +name = "actix-files" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0773d59061dedb49a8aed04c67291b9d8cf2fe0b60130a381aab53c6dd86e9be" +dependencies = [ + "actix-http", + "actix-service", + "actix-utils", + "actix-web", + "bitflags 2.9.1", + "bytes", + "derive_more 0.99.20", + "futures-core", + "http-range", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "v_htmlescape", +] + +[[package]] +name = "actix-http" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44dfe5c9e0004c623edc65391dfd51daa201e7e30ebd9c9bedf873048ec32bc2" dependencies = [ "actix-codec", "actix-rt", "actix-service", "actix-utils", - "ahash 0.8.7", - "base64", - "bitflags", + "base64 0.22.1", + "bitflags 2.9.1", "brotli", "bytes", "bytestring", - "derive_more", + "derive_more 2.0.1", "encoding_rs", "flate2", + "foldhash", "futures-core", "h2", "http", @@ -49,7 +87,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand", + "rand 0.9.1", "sha1", "smallvec", "tokio", @@ -60,25 +98,25 @@ dependencies = [ [[package]] name = "actix-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 1.0.109", + "syn 2.0.103", ] [[package]] name = "actix-multipart" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b960e2aea75f49c8f069108063d12a48d329fc8b60b786dfc7552a9d5918d2d" +checksum = "d974dd6c4f78d102d057c672dcf6faa618fafa9df91d44f9c466688fc1275a3a" dependencies = [ "actix-multipart-derive", "actix-utils", "actix-web", "bytes", - "derive_more", + "derive_more 0.99.20", "futures-core", "futures-util", "httparse", @@ -86,6 +124,7 @@ dependencies = [ "log", "memchr", "mime", + "rand 0.8.5", "serde", "serde_json", "serde_plain", @@ -103,27 +142,29 @@ dependencies = [ "parse-size", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.103", ] [[package]] name = "actix-router" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" dependencies = [ "bytestring", + "cfg-if", "http", "regex", + "regex-lite", "serde", "tracing", ] [[package]] name = "actix-rt" -version = "2.8.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" dependencies = [ "actix-macros", "futures-core", @@ -132,9 +173,9 @@ dependencies = [ [[package]] name = "actix-server" -version = "2.2.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327" +checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" dependencies = [ "actix-rt", "actix-service", @@ -142,20 +183,18 @@ dependencies = [ "futures-core", "futures-util", "mio", - "num_cpus", - "socket2 0.4.9", + "socket2", "tokio", "tracing", ] [[package]] name = "actix-service" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" +checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" dependencies = [ "futures-core", - "paste", "pin-project-lite", ] @@ -171,9 +210,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.3.1" +version = "4.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96" +checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea" dependencies = [ "actix-codec", "actix-http", @@ -184,16 +223,16 @@ dependencies = [ "actix-service", "actix-utils", "actix-web-codegen", - "ahash 0.7.6", "bytes", "bytestring", "cfg-if", "cookie", - "derive_more", + "derive_more 2.0.1", "encoding_rs", + "foldhash", "futures-core", "futures-util", - "http", + "impl-more", "itoa", "language-tags", "log", @@ -201,52 +240,51 @@ dependencies = [ "once_cell", "pin-project-lite", "regex", + "regex-lite", "serde", "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.4.9", + "socket2", "time", + "tracing", "url", ] [[package]] name = "actix-web-codegen" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.103", ] [[package]] -name = "adler" -version = "1.0.2" +name = "addr2line" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "getrandom", - "once_cell", - "version_check", + "gimli", ] [[package]] -name = "ahash" -version = "0.8.7" +name = "adler2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom", "once_cell", "version_check", "zerocopy", @@ -254,9 +292,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -278,42 +316,81 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "async-channel" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 2.5.3", "futures-core", ] [[package]] -name = "async-executor" -version = "1.5.1" +name = "async-channel" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" dependencies = [ - "async-lock", "async-task", "concurrent-queue", - "fastrand 1.9.0", + "fastrand", "futures-lite", + "pin-project-lite", "slab", ] [[package]] name = "async-global-executor" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-executor", "async-io", "async-lock", @@ -324,40 +401,41 @@ dependencies = [ [[package]] name = "async-io" -version = "1.13.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" dependencies = [ "async-lock", - "autocfg", "cfg-if", "concurrent-queue", + "futures-io", "futures-lite", - "log", "parking", "polling", "rustix", "slab", - "socket2 0.4.9", - "waker-fn", + "tracing", + "windows-sys 0.59.0", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.4.0", + "event-listener-strategy", + "pin-project-lite", ] [[package]] name = "async-std" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" dependencies = [ - "async-channel", + "async-channel 1.9.0", "async-global-executor", "async-io", "async-lock", @@ -379,27 +457,63 @@ dependencies = [ [[package]] name = "async-task" -version = "4.4.0" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] [[package]] name = "base64" -version = "0.21.2" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bitflags" @@ -407,6 +521,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +dependencies = [ + "serde", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -418,24 +541,22 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", - "async-lock", + "async-channel 2.3.1", "async-task", - "atomic-waker", - "fastrand 1.9.0", + "futures-io", "futures-lite", - "log", + "piper", ] [[package]] name = "brotli" -version = "3.3.4" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -444,9 +565,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -454,39 +575,59 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bytestring" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" dependencies = [ "bytes", ] [[package]] name = "cc" -version = "1.0.79" +version = "1.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" dependencies = [ "jobserver", + "libc", + "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-link", +] [[package]] name = "chumsky" @@ -494,19 +635,52 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" dependencies = [ - "hashbrown 0.14.3", + "hashbrown 0.14.5", "stacker", ] [[package]] -name = "concurrent-queue" -version = "2.2.0" +name = "color-eyre" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "convert_case" version = "0.4.0" @@ -526,9 +700,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -536,37 +710,67 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] -name = "crc32fast" -version = "1.3.2" +name = "crc" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] -name = "crossbeam-utils" -version = "0.8.18" +name = "crossbeam-channel" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ - "cfg-if", + "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "crypto-common" version = "0.1.6" @@ -579,9 +783,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.3" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -589,42 +793,106 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.43", + "syn 2.0.103", ] [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.43", + "syn 2.0.103", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn 2.0.103", ] +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", + "unicode-xid", +] + +[[package]] +name = "destructure_traitobject" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7" + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "digest" version = "0.10.7" @@ -632,39 +900,67 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", ] [[package]] name = "email-encoding" -version = "0.2.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbfb21b9878cf7a348dcb8559109aabc0ec40d69924bd706fa5149846c4fef75" +checksum = "9298e6504d9b9e780ed3f7dfd43a61be8cd0e09eb07f7706a945b0072b6670b6" dependencies = [ - "base64", + "base64 0.22.1", "memchr", ] [[package]] name = "email_address" -version = "0.2.4" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2153bd83ebc09db15bcbdc3e2194d901804952e3dc96967e1cd3b0c5c32d112" +checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ "humantime", "is-terminal", @@ -674,24 +970,30 @@ dependencies = [ ] [[package]] -name = "errno" -version = "0.3.1" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys 0.60.2", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "etcetera" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" dependencies = [ - "cc", - "libc", + "cfg-if", + "home", + "windows-sys 0.48.0", ] [[package]] @@ -701,36 +1003,75 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] -name = "fastrand" -version = "1.9.0" +name = "event-listener" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ - "instant", + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.0", + "pin-project-lite", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", ] [[package]] name = "fastrand" -version = "2.0.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "flate2" -version = "1.0.26" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", ] +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -757,9 +1098,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -772,9 +1113,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -782,15 +1123,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -798,54 +1139,63 @@ dependencies = [ ] [[package]] -name = "futures-io" -version = "0.3.28" +name = "futures-intrusive" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "1.13.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ - "fastrand 1.9.0", + "fastrand", "futures-core", "futures-io", - "memchr", "parking", "pin-project-lite", - "waker-fn", ] [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.103", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -871,20 +1221,38 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", ] [[package]] -name = "gloo-timers" -version = "0.2.6" +name = "getrandom" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ "futures-channel", "futures-core", @@ -894,9 +1262,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.19" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", @@ -913,51 +1281,95 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.7", + "ahash", "allocator-api2", ] [[package]] -name = "hermit-abi" -version = "0.2.6" +name = "hashbrown" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ - "libc", + "allocator-api2", + "equivalent", + "foldhash", ] [[package]] -name = "hermit-abi" -version = "0.3.1" +name = "hashlink" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.4", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +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 = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] [[package]] name = "hostname" -version = "0.3.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" dependencies = [ + "cfg-if", "libc", - "match_cfg", - "winapi", + "windows-link", ] [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -966,9 +1378,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -976,28 +1388,34 @@ dependencies = [ ] [[package]] -name = "httparse" -version = "1.8.0" +name = "http-range" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -1010,7 +1428,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2", "tokio", "tower-service", "tracing", @@ -1030,6 +1448,116 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1038,83 +1566,87 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", ] +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + [[package]] name = "indexmap" -version = "1.9.3" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", + "equivalent", + "hashbrown 0.15.4", ] [[package]] name = "ipnet" -version = "2.7.2" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.48.0", + "hermit-abi", + "libc", + "windows-sys 0.59.0", ] [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.63" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1135,21 +1667,24 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "lettre" -version = "0.11.3" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5aaf628956b6b0852e12ac3505d20d7a12ecc1e32d5ea921f002af4a74036a5" +checksum = "cb2a0354e9ece2fcdcf9fa53417f6de587230c0c248068eb058fa26c4a753179" dependencies = [ - "base64", + "base64 0.22.1", "chumsky", "email-encoding", "email_address", - "fastrand 2.0.1", + "fastrand", "futures-util", "hostname", "httpdate", @@ -1157,47 +1692,70 @@ dependencies = [ "mime", "native-tls", "nom", + "percent-encoding", "quoted_printable", - "socket2 0.5.5", + "socket2", "tokio", "url", ] [[package]] name = "libc" -version = "0.2.151" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "local-channel" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" dependencies = [ "futures-core", "futures-sink", - "futures-util", "local-waker", ] [[package]] name = "local-waker" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -1205,13 +1763,48 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" dependencies = [ + "serde", "value-bag", ] +[[package]] +name = "log-mdc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" + +[[package]] +name = "log4rs" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0816135ae15bd0391cf284eab37e6e3ee0a6ee63d2ceeb659862bd8d0a984ca6" +dependencies = [ + "anyhow", + "arc-swap", + "chrono", + "derivative", + "fnv", + "humantime", + "libc", + "log", + "log-mdc", + "once_cell", + "parking_lot", + "rand 0.8.5", + "serde", + "serde-value", + "serde_json", + "serde_yaml", + "thiserror 1.0.69", + "thread-id", + "typemap-ors", + "winapi", +] + [[package]] name = "markup" version = "0.15.0" @@ -1229,20 +1822,57 @@ checksum = "9ab6ee21fd1855134cacf2f41afdf45f1bc456c7d7f6165d763b4647062dd2be" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.103", ] [[package]] -name = "match_cfg" +name = "matchers" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "maud" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df518b75016b4289cdddffa1b01f2122f4a49802c93191f3133f6dc2472ebcaa" +dependencies = [ + "actix-web", + "futures-util", + "itoa", + "maud_macros", +] + +[[package]] +name = "maud_macros" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa453238ec218da0af6b11fc5978d3b5c3a45ed97b722391a2a11f3306274e18" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "mime" @@ -1252,48 +1882,47 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.6" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "log", - "wasi", - "windows-sys 0.45.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] -name = "native-tls" -version = "0.2.11" +name = "mutually_exclusive_features" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "e94e1e6445d314f972ff7395df2de295fe51b71821694f0b0e1e79c4f12c8577" + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1307,37 +1936,107 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.3" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ "memchr", - "minimal-lexical", ] [[package]] -name = "num_cpus" -version = "1.15.0" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ - "hermit-abi 0.2.6", "libc", ] [[package]] -name = "once_cell" -version = "1.19.0" +name = "object" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.52" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags", + "bitflags 2.9.1", "cfg-if", "foreign-types", "libc", @@ -1354,20 +2053,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.103", ] [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.87" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -1376,16 +2075,37 @@ dependencies = [ ] [[package]] -name = "parking" -version = "2.1.0" +name = "ordered-float" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owo-colors" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26995317201fa17f3656c36716aed4a7c81743a9634ac4c99c0eeda495db0cec" + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -1393,28 +2113,31 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.52.6", ] [[package]] name = "parse-size" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "944553dd59c802559559161f9816429058b869003836120e262e8caec061b7ae" +checksum = "487f2ccd1e17ce8c1bfab3a65c89525af41cfad4c8659021a1e9a2aacd73b89b" [[package]] -name = "paste" -version = "1.0.12" +name = "pem-rfc7468" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] [[package]] name = "percent-encoding" @@ -1423,10 +2146,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "pin-project-lite" -version = "0.2.9" +name = "pin-project" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1435,65 +2178,153 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "pkg-config" -version = "0.3.27" +name = "piper" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ - "autocfg", - "bitflags", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", + "atomic-waker", + "fastrand", + "futures-io", ] [[package]] -name = "ppv-lite86" -version = "0.2.17" +name = "pkcs1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "polling" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" dependencies = [ "cc", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] name = "quoted_printable" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79ec282e887b434b68c18fe5c121d38e72a5cf35119b59e54ec5b992ea9c8eb0" +checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73" + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "rand" @@ -1502,8 +2333,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -1513,7 +2354,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -1522,63 +2373,84 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", + "bitflags 2.9.1", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "regex-syntax 0.6.29", ] [[package]] -name = "regex-syntax" -version = "0.8.2" +name = "regex-automata" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -1597,9 +2469,12 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", @@ -1611,33 +2486,73 @@ dependencies = [ ] [[package]] -name = "rustc_version" -version = "0.4.0" +name = "rsa" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.19" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags", + "bitflags 2.9.1", "errno", - "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] -name = "ryu" -version = "1.0.13" +name = "rustls-pemfile" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sanitize-filename" @@ -1651,26 +2566,26 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.59.0", ] [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.9.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags", + "bitflags 2.9.1", "core-foundation", "core-foundation-sys", "libc", @@ -1679,9 +2594,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -1689,32 +2604,57 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.163" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_plain" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6018081315db179d0ce57b1fe4b62a12a0028c9cf9bbef868c9cf477b3c34ae" +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" dependencies = [ "serde", ] @@ -1732,10 +2672,23 @@ dependencies = [ ] [[package]] -name = "sha1" -version = "0.10.5" +name = "serde_yaml" +version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -1743,67 +2696,320 @@ dependencies = [ ] [[package]] -name = "signal-hook-registry" -version = "1.4.1" +name = "sha2" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "slab" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" dependencies = [ - "libc", - "winapi", + "serde", ] [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlx" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +dependencies = [ + "base64 0.22.1", + "bytes", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.4.0", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.15.4", + "hashlink", + "indexmap", + "log", + "memchr", + "once_cell", + "percent-encoding", + "serde", + "serde_json", + "sha2", + "smallvec", + "thiserror 2.0.12", + "tracing", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.103", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +dependencies = [ + "dotenvy", + "either", + "heck", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.103", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.9.1", + "byteorder", + "bytes", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.12", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +dependencies = [ + "atoi", + "base64 0.22.1", + "bitflags 2.9.1", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.12", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +dependencies = [ + "atoi", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror 2.0.12", + "tracing", + "url", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "cddb07e32ddb770749da91081d8d0ac3a16f1a569a18b20348cd371f5dead06b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", ] [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -1818,9 +3024,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.43" +version = "2.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" +checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" dependencies = [ "proc-macro2", "quote", @@ -1828,23 +3034,61 @@ dependencies = [ ] [[package]] -name = "tempfile" -version = "3.5.0" +name = "sync_wrapper" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ - "cfg-if", - "fastrand 1.9.0", - "redox_syscall 0.3.5", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", "rustix", - "windows-sys 0.45.0", + "windows-sys 0.59.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] @@ -1853,30 +3097,105 @@ dependencies = [ name = "tfcapi" version = "0.1.0" dependencies = [ + "actix-cors", + "actix-files", "actix-multipart", "actix-rt", "actix-web", "async-std", + "color-eyre", "env_logger", "futures", "futures-util", "lettre", "log", + "log4rs", "markup", + "maud", + "pretty_assertions", "reqwest", "sanitize-filename", "serde", "serde_json", + "sqlx", + "tracing", + "tracing-actix-web", + "tracing-appender", + "tracing-subscriber", "uuid", ] [[package]] -name = "time" -version = "0.3.21" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "thread-id" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe8f25bbdd100db7e1d34acf7fd2dc59c4bf8f7483f505eaa7d4f12f76cc0ea" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -1884,24 +3203,35 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.9" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ + "num-conv", "time-core", ] [[package]] -name = "tinyvec" -version = "1.6.0" +name = "tinystr" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -1914,19 +3244,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.1" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.4.9", - "windows-sys 0.48.0", + "socket2", + "windows-sys 0.52.0", ] [[package]] @@ -1941,92 +3271,202 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "cfg-if", "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] [[package]] -name = "tracing-core" -version = "0.1.31" +name = "tracing-actix-web" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "2340b7722695166c7fc9b3e3cd1166e7c74fedb9075b8f0c74d3822d2e41caf5" +dependencies = [ + "actix-web", + "mutually_exclusive_features", + "pin-project", + "tracing", + "uuid", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror 1.0.69", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "chrono", + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "time", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "typenum" -version = "1.16.0" +name = "typemap-ors" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "a68c24b707f02dd18f1e4ccceb9d49f2058c2fb86384ef9972592904d7a28867" dependencies = [ - "version_check", + "unsafe-any-ors", ] [[package]] -name = "unicode-bidi" -version = "0.3.13" +name = "typenum" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] -name = "url" -version = "2.5.0" +name = "unicode-properties" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unsafe-any-ors" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a303d30665362d9680d7d91d78b23f5f899504d4f08b3c4cf08d055d87c0ad" +dependencies = [ + "destructure_traitobject", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -2034,16 +3474,39 @@ dependencies = [ ] [[package]] -name = "uuid" -version = "1.6.1" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "getrandom 0.3.3", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "v_htmlescape" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c" + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-bag" -version = "1.4.3" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ce5bb364b23e66b528d03168df78b38c0f7b6fe17386928f29d5ab2e7cb2f7" +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" [[package]] name = "vcpkg" @@ -2053,74 +3516,84 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.86" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.86" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.103", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.36" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.86" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2128,33 +3601,46 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.86" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.103", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.86" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.63" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", ] +[[package]] +name = "whoami" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +dependencies = [ + "redox_syscall", + "wasite", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2173,11 +3659,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -2187,27 +3673,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-core" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "windows-targets 0.42.2", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", ] [[package]] @@ -2216,178 +3737,380 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", ] [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", + "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.43", + "syn 2.0.103", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", ] [[package]] name = "zstd" -version = "0.12.3+zstd.1.5.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ - "libc", "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 6c47d9f..d46a7bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,3 +21,20 @@ uuid = "1.6.1" sanitize-filename = "0.5.0" lettre = { version = "0.11.3", features = ["smtp-transport"] } markup = "0.15.0" +maud = { version = "0.26.0", features = ["actix-web"] } +log4rs = "1.3.0" +actix-cors = "0.7.0" +tracing = "0.1.40" +tracing-subscriber = { version = "0.3.18", features = ["fmt", "std", "chrono", "time", "local-time", "env-filter"] } +tracing-appender = "0.2.3" +actix-files = "0.6.6" +tracing-actix-web = "0.7.14" +color-eyre = "0.6.3" +pretty_assertions = "1.4.1" +sqlx = { version = "0.8.2", features = ["sqlite"] } + +[profile.dev] +opt-level = 0 + +[profile.release] +opt-level = 3 diff --git a/content/_index.md b/content/_index.md index a401f92..b4787e2 100644 --- a/content/_index.md +++ b/content/_index.md @@ -59,4 +59,4 @@ Our vision is to change the world from the heart of America by providing discipl ## Our Mission We do that by, connecting teens with the truth of Jesus Christ…teaching and equipping them to live out the Great Commission. -{{ disciplemaking }} +{{ disciplemaking() }} diff --git a/data.db b/data.db new file mode 100644 index 0000000..e69de29 diff --git a/justfile b/justfile index bff9091..67c992d 100644 --- a/justfile +++ b/justfile @@ -1,7 +1,7 @@ default: just --list build: - zola build + tailwindcss -i static/css/base.css -o static/css/main.css && zola build serve: zola serve uglify: diff --git a/src/api/camp_form.rs b/src/api/camp_form.rs index 405aec9..46d082d 100644 --- a/src/api/camp_form.rs +++ b/src/api/camp_form.rs @@ -1,318 +1,360 @@ +use std::collections::HashMap; + use actix_multipart::form::{text::Text, MultipartForm}; -use actix_web::{post, HttpResponse}; -use lettre::{ - message::MultiPart, - transport::smtp::authentication::{Credentials, Mechanism}, - Message, SmtpTransport, Transport, -}; +use actix_web::{http::StatusCode, post, HttpResponse, HttpResponseBuilder}; +use color_eyre::eyre::{Context, Result}; +use futures::FutureExt; +use lettre::{message::SinglePart, Message}; +use maud::{html, Markup, DOCTYPE}; +use reqwest::Client; +use tracing::{error, info}; -use super::errors::ApiError; - -#[derive(Debug, MultipartForm, Default)] +#[derive(Debug, MultipartForm)] struct CampForm { #[multipart(rename = "first-name")] - first_name: Option>, + first_name: Text, #[multipart(rename = "last-name")] - last_name: Option>, + last_name: Text, #[multipart(rename = "parent-first-name")] - parent_first_name: Option>, + parent_first_name: Text, #[multipart(rename = "parent-last-name")] - parent_last_name: Option>, - birthdate: Option>, - gender: Option>, - street: Option>, - city: Option>, - state: Option>, - zip: Option>, + parent_last_name: Text, + #[multipart(rename = "birth-date")] + birthdate: Text, + gender: Text, + street: Text, + city: Text, + state: Text, + zip: Text, #[multipart(rename = "parent-phone")] - parent_phone: Option>, + parent_phone: Text, #[multipart(rename = "parent-email")] - parent_email: Option>, - grade: Option>, - shirt: Option>, - allergies: Option>, - week: Option>, - registration: Option>, + parent_email: Text, + grade: Text, + shirt: Text, + allergies: Text, + week: Text, + registration: Text, + #[multipart(rename = "health-form")] + health_form: Text, } -#[post("/camp-form")] +impl From<&CampForm> for HashMap { + fn from(form: &CampForm) -> Self { + let mut map = HashMap::new(); + map.insert(63, format!("{} {}", form.first_name.0, form.last_name.0)); + map.insert( + 64, + format!("{} {}", form.parent_first_name.0, form.parent_last_name.0), + ); + map.insert(65, form.parent_phone.0.clone()); + map.insert(66, form.parent_email.0.clone().clone()); + map.insert(67, form.birthdate.0.clone()); + map.insert(69, form.gender.0.clone()); + map.insert(70, form.street.0.clone()); + map.insert(71, form.city.0.clone()); + map.insert(72, form.state.0.clone()); + map.insert(73, form.zip.0.clone().to_string()); + map.insert(74, form.grade.0.clone()); + map.insert(75, form.week.0.clone()); + map.insert(76, form.shirt.0.clone()); + map.insert(77, form.registration.0.clone()); + map.insert(115, form.health_form.0.clone()); + map + } +} + +impl CampForm { + fn build_email(&self) -> Markup { + html! { + (DOCTYPE) + meta charset="utf-8"; + html { + head { + title { (self.first_name.0) " " (self.last_name.0) " signed up for camp!" } + style { + "table { border-collapse: collapse; width: 100% }" + "td, th { padding: 8px }" + "td { text-align: left; width: 70%; word-wrap: break-word }" + "th { text-align: right; border-right: 1px solid #ddd }" + "tr { border-bottom: 1px solid #ddd }" + "h1 { text-align: center }" + } + } + body { + h1 { "Camp form for " (self.first_name.0) " " (self.last_name.0) "!" } + hr; + table { + tr { + th { "Name" } + td { (self.first_name.0) " " (self.last_name.0) } + } + tr { + th { "Parent" } + td { (self.parent_first_name.0) " " (self.parent_last_name.0) } + } + tr { + th { "Birthdate" } + td { (self.birthdate.0) } + } + tr { + th { "Gender" } + td { (self.gender.0) } + } + tr { + th { "Street" } + td { (self.street.0) } + } + tr { + th { "City" } + td { (self.city.0) } + } + tr { + th { "State" } + td { (self.state.0) } + } + tr { + th { "Zip" } + td { (self.zip.0) } + } + tr { + th { "Parent Phone" } + td { (self.parent_phone.0) } + } + tr { + th { "Parent Email" } + td { (self.parent_email.0) } + } + tr { + th { "Grade" } + td { (self.grade.0) } + } + tr { + th { "Camper Allergies" } + td { (self.allergies.0) } + } + tr { + th { "T-Shirt Size" } + td { (self.shirt.0) } + } + tr { + th { "Week Choice" } + td { (self.week.0) } + } + tr { + th { "Health Form" } + td { (self.health_form.0) } + } + tr { + th { "Registration" } + td { (self.registration.0) } + } + } + } + } + } + } + + fn prepare_email(&self) -> Result { + let first = self.first_name.clone(); + let last = self.last_name.clone(); + let email_subject = format!("{} {} signed up for camp!", first, last); + info!("{first} {last} signed up for camp!"); + let email = self.build_email(); + // let temp_file = self.get_temp_file(); + // let multi = if let Some((file, path, content_type)) = temp_file { + // let filebody = fs::read(path); + // let content_type = + // ContentType::parse(&content_type.unwrap_or(String::from("image/jpg"))).unwrap(); + // let attachment = Attachment::new(file).body(filebody.unwrap(), content_type); + // // info!(?attachment); + // MultiPart::mixed() + // .singlepart(SinglePart::html(email.into_string())) + // .singlepart(attachment) + // } else { + // MultiPart::alternative_plain_html(String::from("Testing"), email.into_string()) + // }; + + let singlepart = SinglePart::html(email.into_string()); + + Message::builder() + .from( + "TFC ADMIN " + .parse() + .unwrap(), + ) + .to("Chris Cochrun ".parse().unwrap()) + .to("Ethan Rose ".parse().unwrap()) + .subject(email_subject) + .singlepart(singlepart) + // .multipart(multi) + .wrap_err("problemss") + } +} + +#[post("/api/camp-form")] pub async fn camp_form(MultipartForm(form): MultipartForm) -> HttpResponse { - log::info!("a new form"); - let first = form - .first_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let last = form - .last_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let full_name = format!("{} {}", first, last); - let email_subject = format!("{} {} signed up for camp!", first, last); - let parent = format!( - "{} {}", - form.parent_first_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(), - form.parent_last_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone() - ); - let birthdate = form - .birthdate - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let gender = form - .gender - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let street = form - .street - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let city = form - .city - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let state = form - .state - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let zip = form.zip.as_ref().unwrap_or(&Text(0)).0; - let parent_phone = form - .parent_phone - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let parent_email = form - .parent_email - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let grade = form - .grade - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let shirt = form - .shirt - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let allergies = form - .allergies - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let week = form - .week - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let registration = form - .registration - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let reg = registration.clone(); - log::info!("{first} {last} signed up for camp!"); - let email = markup::new! { - @markup::doctype() - html { - head { - title { @format!("{} {} signed up for camp!", first, last) } - style { - "table { border-collapse: collapse; width: 100% }" - "td, th { padding: 8px }" - "td { text-align: left; width: 70%; word-wrap: break-word }" - "th { text-align: right; border-right: 1px solid #ddd }" - "tr { border-bottom: 1px solid #ddd }" - "h1 { text-align: center }" - } - } - body { - h1 { @format!("Camp form for {} {}!", first, last) } - hr; - table { - tr { - th { "Name" } - td { @format!("{} {}", first, last) } - } - tr { - th { "Parent" } - td { @parent } - } - tr { - th { "Birthdate" } - td { @birthdate } - } - tr { - th { "Gender" } - td { @gender } - } - tr { - th { "Street" } - td { @street } - } - tr { - th { "City" } - td { @city } - } - tr { - th { "State" } - td { @state } - } - tr { - th { "Zip" } - td { @zip } - } - tr { - th { "Parent Phone" } - td { @parent_phone } - } - tr { - th { "Parent Email" } - td { @parent_email } - } - tr { - th { "Grade" } - td { @grade } - } - tr { - th { "Camper Allergies" } - td { @allergies } - } - tr { - th { "T-Shirt Size" } - td { @shirt } - } - tr { - th { "Week Choice" } - td { @week } - } - tr { - th { "Registration" } - td { @registration } - } - } - } - } + let full_name = format!("{} {}", form.first_name.0, form.last_name.0); + let map = (&form).into(); + let future = store_camp_form(map); + actix_rt::spawn(future.map(|s| match s { + Ok(_) => info!("Successfully posted to nextcloud tables"), + Err(e) => log::error!("Error in posting camp data: {:?}", e), + })); + + let email = form.prepare_email(); + match email { + Ok(m) => { + let sent = crate::email::send_email(m); + actix_rt::spawn(sent.map(|s| match s { + Ok(_) => info!("Successfully sent form to email!"), + Err(e) => error!("There was an erroring sending form to email: {e}"), + })); + } + Err(e) => error!("error sending email {e}"), }; - let multi = MultiPart::alternative_plain_html( - String::from("A camp form was filled out!"), - email.to_string(), - ); - if let Ok(m) = Message::builder() - .from( - "TFC ADMIN " - .parse() - .unwrap(), - ) - .to("Chris Cochrun ".parse().unwrap()) - // .to("Ethan Rose ".parse().unwrap()) - .subject(email_subject) - .multipart(multi) - { - let sender = SmtpTransport::relay("mail.tfcconnection.org") - .ok() - .unwrap() - .credentials(Credentials::new( - "no-reply@mail.tfcconnection.org".to_owned(), - "r9f36mNZFtiW4f".to_owned(), - )) - .authentication(vec![Mechanism::Plain]) - .build(); - match sender.send(&m) { - Ok(res) => log::info!("{:?}", res), - Err(e) => log::error!("{e}"), - } - } else { - log::info!("Email incorrect"); - } - - match reg.as_str() { + match form.health_form.0.as_str() { "now" => { - log::info!("Sending them to pay for registration now"); + info!("Sending them to fill out the health form"); HttpResponse::Ok() .insert_header(("Access-Control-Expose-Headers", "*")) .insert_header(( "HX-Redirect", - "https://secure.myvanco.com/L-Z772/campaign/C-13JPJ", + format!( + "/camp-health-form/?registration={}", + form.registration.0.as_str() + ), )) .finish() } - "full" => { - log::info!("Sending them to pay for the full registration now"); - HttpResponse::Ok() - .insert_header(("Access-Control-Expose-Headers", "*")) - .insert_header(( - "HX-Redirect", - "https://secure.myvanco.com/L-Z772/campaign/C-13JQE", - )) - .finish() - } - "later" => { - log::info!("{} would like to pay later", full_name); - let html = markup::new! { - div { - class { "mt-8" } - h2 { - @format!("Thank you, {}!", full_name) + "later" => match form.registration.0.as_str() { + "now" => { + info!("Sending them to pay for registration now"); + HttpResponse::Ok() + .insert_header(("Access-Control-Expose-Headers", "*")) + .insert_header(( + "HX-Redirect", + "https://secure.myvanco.com/L-Z772/campaign/C-13JPJ", + )) + .finish() + } + "full" => { + info!("Sending them to pay for the full registration now"); + HttpResponse::Ok() + .insert_header(("Access-Control-Expose-Headers", "*")) + .insert_header(( + "HX-Redirect", + "https://secure.myvanco.com/L-Z772/campaign/C-13JQE", + )) + .finish() + } + "later" => { + info!("{} would like to pay later", full_name); + let html = html! { + div class="mt-8" { + h2 { + "Thank you, " (full_name) "!" + } + p { "Can't wait to see you at camp!" } + p { + class { "" } + "If you'd like to pay for your registration go to the donate tab in the top right when you are ready and find the camp registration option." + } } - p { "Can't wait to see you at camp!" } - p { - class { "" } - "If you'd like to pay for your registration go to the donate tab in the top right when you are ready and find the camp registration option." + }; + HttpResponse::Ok().body(html.into_string()) + } + _ => { + log::error!("Got registration error....."); + let html = html! { + div class="mt-8" { + h2 { + "Thank you, " (full_name) "!" + } + p { "Can't wait to see you at camp!" } + p { + class { "" } + "If you'd like to pay for your registration go to the donate tab in the top right when you are ready and find the camp registration option." + } } - } - }; - HttpResponse::Ok().body(html.to_string()) - } + }; + HttpResponse::Ok().body(html.into_string()) + } + }, + _ => { - log::error!("Got registration error....."); - let html = markup::new! { - div { - class { "mt-8" } - h2 { - @format!("Thank you, {}!", full_name) - } - p { "Can't wait to see you at camp!" } - p { - class { "" } - "If you'd like to pay for your registration go to the donate tab in the top right when you are ready and find the camp registration option." - } - } - }; - HttpResponse::Ok().body(html.to_string()) + log::error!("Unknown selection for health. We don't know where to send the user."); + HttpResponseBuilder::new(StatusCode::IM_A_TEAPOT) + .body("Unknown selection for health. We don't know where to send the user.") } } } -async fn store_camp_form(form: CampForm) -> Result<(), ApiError> { +async fn store_camp_form(map: HashMap) -> Result<()> { + let request = Client::new(); + let mut json = HashMap::new(); + json.insert("data", map); + request + .post("https://staff.tfcconnection.org/apps/tables/api/1/tables/5/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; Ok(()) } + +#[cfg(test)] +mod test { + use super::*; + use actix_web::test; + + fn form() -> CampForm { + CampForm { + first_name: Text("Frodo".into()), + last_name: Text("Braggins".into()), + parent_first_name: Text("Bilbo".into()), + parent_last_name: Text("Braggins".into()), + birthdate: Text(String::from("1845-09-12")), + gender: Text(String::from("male")), + street: Text(String::from("1234 Bag End")), + city: Text(String::from("The Shire")), + state: Text(String::from("Hobbiton")), + zip: Text(88888), + parent_phone: Text(String::from("1234567898")), + parent_email: Text(String::from("bilbo@hobbits.com")), + grade: Text(String::from("junior")), + shirt: Text(String::from("medium")), + allergies: Text(String::from("Cool beans")), + week: Text(String::from("1")), + registration: Text(String::from("later")), + health_form: Text(String::from("I guess")), + } + } + + #[test] + async fn test_nc_post() { + let form = form(); + assert!(!form.first_name.is_empty()); + let map = HashMap::from(&form); + let res = store_camp_form(map).await; + match res { + Ok(_) => assert!(true), + Err(e) => assert!(false, "Failed storing test: {e}"), + } + } + + #[test] + async fn test_email() { + let form = form(); + assert!(!form.first_name.is_empty()); + match form.prepare_email() { + Ok(m) => { + assert!(crate::email::send_email(m).await.is_ok()) + } + Err(e) => assert!(false, "Failed emailing test: {e}"), + } + } +} diff --git a/src/api/contact.rs b/src/api/contact.rs new file mode 100644 index 0000000..7796f11 --- /dev/null +++ b/src/api/contact.rs @@ -0,0 +1,168 @@ +use std::{ + collections::{BTreeMap, HashMap}, + fs, +}; + +use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm}; +use actix_web::{post, web, HttpResponse}; +use color_eyre::{eyre::eyre, Result}; +use lettre::{ + message::{header::ContentType, Attachment, MultiPart, SinglePart}, + Message, +}; +use maud::{html, Markup, PreEscaped, DOCTYPE}; +use reqwest::Client; +use serde_json::json; +use sqlx::SqliteConnection; +use tracing::{error, info}; + +#[derive(Debug, MultipartForm)] +struct ContactForm { + name: Text, + email: Text, + staff: Text, + message: Text, +} + +impl From<&ContactForm> for HashMap { + fn from(form: &ContactForm) -> Self { + let mut map = HashMap::new(); + map.insert(169, form.name.0.clone()); + map.insert(169, form.email.0.clone()); + map.insert(169, form.staff.0.clone()); + map.insert(169, form.message.0.clone()); + map + } +} + +impl ContactForm { + async fn build_email(&self) -> Markup { + html! { + (DOCTYPE) + meta charset="utf-8"; + html { + head { + title { (self.name.0) " filled out a contact form!" } + style { + "table { border-collapse: collapse; width: 100% }" + "td, th { padding: 8px }" + "td { text-align: left; width: 70%; word-wrap: break-word }" + "th { text-align: right; border-right: 1px solid #ddd }" + "tr { border-bottom: 1px solid #ddd }" + "h1 { text-align: center }" + } + } + body { + h1 { "Contact form for " (self.name.0) "!" } + hr; + p { "Email: " (self.email.0) } + p { "To: " (self.staff.0) } + hr; + p { (self.message.0) } + } + } + } + } + + async fn store_form(&self) -> Result<()> { + let client = Client::new(); + let map = HashMap::from(self); + let mut json = HashMap::new(); + json.insert("data", map); + + let res = client + .post("https://staff.tfcconnection.org/ocs/v2.php/apps/tables/api/2/tables/140/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; + if res.status().is_success() { + let res = res.text().await.unwrap(); + Ok(()) + } else { + Err(eyre!( + "Problem in storing data: {:?}", + res.error_for_status() + )) + } + } + + async fn send_email(&mut self) -> Result<()> { + let name = self.name.clone(); + let email_subject = format!("Contact form for {}!", name); + info!("{name} contact form!"); + let email = self.build_email().await; + let email = SinglePart::html(email.into_string()); + + if let Ok(m) = Message::builder() + .from( + "TFC ADMIN " + .parse() + .unwrap(), + ) + .to("Chris Cochrun ".parse().unwrap()) + .to("Ethan Rose ".parse().unwrap()) + .subject(email_subject) + .singlepart(email) + { + crate::email::send_email(m).await + } else { + Err(eyre!("Email incorrect")) + } + } +} + +#[post("/api/contact-form")] +pub async fn contact_form(MultipartForm(mut form): MultipartForm) -> HttpResponse { + // match form.store_form().await { + // Ok(_) => info!("Successfully sent form to nextcloud!"), + // Err(e) => error!("There was an erroring sending form to nextcloud: {e}"), + // } + match form.send_email().await { + Ok(_) => info!("Successfully sent email"), + Err(e) => error!("There was an error sending the email: {e}"), + } + HttpResponse::Ok().body("Thank you! We will get back with you shortly!") +} + +#[cfg(test)] +mod test { + use actix_web::test; + use pretty_assertions::assert_eq; + use sqlx::Connection; + use tracing::debug; + + use super::*; + + fn form() -> ContactForm { + ContactForm { + name: Text(String::from("Bilbo Braggins")), + email: Text(String::from("biblo@hobbits.us")), + staff: Text(String::from("Uncle")), + message: Text(String::from("Very")), + } + } + + #[test] + async fn test_nc_post() { + let form = form(); + assert!(!form.name.is_empty()); + let res = form.store_form().await; + match res { + Ok(_) => assert!(true, "passed storing test"), + Err(e) => assert!(false, "Failed storing test: {e}"), + } + } + + #[test] + async fn test_email() { + let mut form = form(); + assert!(!form.name.is_empty()); + match form.send_email().await { + Ok(_) => assert!(true, "passed emailing test"), + Err(e) => assert!(false, "Failed emailing test: {e}"), + } + } +} diff --git a/src/api/errors.rs b/src/api/errors.rs index 106d97a..e0f759a 100644 --- a/src/api/errors.rs +++ b/src/api/errors.rs @@ -18,8 +18,3 @@ pub struct ApiError { pub cause: Option, pub error_type: ApiErrorType, } - -#[derive(Serialize)] -pub struct ApiErrorResponse { - pub error: String, -} diff --git a/src/api/health_form.rs b/src/api/health_form.rs index 1c95e02..5196a0a 100644 --- a/src/api/health_form.rs +++ b/src/api/health_form.rs @@ -1,454 +1,381 @@ -use std::fs; +use std::{collections::HashMap, fs}; use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm}; use actix_web::{post, HttpResponse}; +use color_eyre::{ + eyre::{eyre, Context}, + Result, +}; +use futures::FutureExt; use lettre::{ message::{header::ContentType, Attachment, MultiPart, SinglePart}, - transport::smtp::authentication::{Credentials, Mechanism}, - Message, SmtpTransport, Transport, + Message, }; +use maud::{html, Markup, DOCTYPE}; +use reqwest::Client; +use tracing::{error, info}; -#[derive(Debug, MultipartForm, Default)] +use crate::email::send_email; + +#[derive(Debug, MultipartForm)] struct HealthForm { #[multipart(rename = "first-name")] - first_name: Option>, + first_name: Text, #[multipart(rename = "last-name")] - last_name: Option>, + last_name: Text, #[multipart(rename = "parent-first-name")] - parent_first_name: Option>, + parent_first_name: Text, #[multipart(rename = "parent-last-name")] - parent_last_name: Option>, - birthdate: Option>, - street: Option>, - city: Option>, - state: Option>, - zip: Option>, + parent_last_name: Text, + #[multipart(rename = "birth-date")] + birthdate: Text, + street: Text, + city: Text, + state: Text, + zip: Text, #[multipart(rename = "cell-phone")] - parent_cellphone: Option>, - homephone: Option>, + parent_cellphone: Text, + #[multipart(rename = "home-phone")] + homephone: Text, #[multipart(rename = "additional-emergency-contact")] - contact: Option>, - #[multipart(rename = "addtional-emergency-contact-phone")] - contact_phone: Option>, - doctorname: Option>, - doctorcity: Option>, - doctorphone: Option>, + contact: Text, + #[multipart(rename = "additional-emergency-contact-phone")] + contact_phone: Text, + #[multipart(rename = "doctor-name")] + doctorname: Text, + #[multipart(rename = "doctor-city")] + doctorcity: Text, + #[multipart(rename = "doctor-phone")] + doctorphone: Text, #[multipart(rename = "medical-coverage")] - medical: Option>, + medical: Text, #[multipart(rename = "insurance-name")] - insurance: Option>, + insurance: Text, #[multipart(rename = "policy-number")] - policy_number: Option>, - allergies: Option>, + policy_number: Text, + allergies: Text, #[multipart(rename = "allergies-other")] - allergies_other: Option>, + allergies_other: Text, #[multipart(rename = "specific-allergies")] - specific_allergies: Option>, + specific_allergies: Text, #[multipart(rename = "allergic-treatment")] - treatment: Option>, - conditions: Option>, + treatment: Text, + conditions: Text, #[multipart(rename = "tetanus-shot")] - tetanus: Option>, + tetanus: Text, #[multipart(rename = "swimming-ability")] - swimming: Option>, + swimming: Text, #[multipart(rename = "medication-schedule")] - medication: Option>, + medication: Text, #[multipart(rename = "other-notes")] - notes: Option>, - agreement: Option>, + notes: Text, + agreement: Text, #[multipart(rename = "image")] file: Option, - registration: Option>, + registration: Text, } -#[post("/health-form")] -pub async fn health_form(MultipartForm(form): MultipartForm) -> HttpResponse { - let first = form - .first_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let last = form - .last_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let full_name = format!("{} {}", first, last); - let registration = form - .registration - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let email_subject = format!("{} {} filled out a health form!", first, last); - let filename_noext = format!("{}_{}", first, last); - let parent = format!( - "{} {}", - form.parent_first_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(), - form.parent_last_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone() - ); - let birthdate = form - .birthdate - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let street = form - .street - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let city = form - .city - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let state = form - .state - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let zip = form - .zip - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let parent_cellphone = form - .parent_cellphone - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let homephone = form - .homephone - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let contact = form - .contact - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let contact_phone = form - .contact_phone - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let doctorname = form - .doctorname - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let doctorcity = form - .doctorcity - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let doctorphone = form - .doctorphone - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let medical = form - .medical - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let insurance = form - .insurance - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let policy_number = form - .policy_number - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let agreement = form - .agreement - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let allergies = form - .allergies - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let allergies_other = form - .allergies_other - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let specific_allergies = form - .specific_allergies - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let treatment = form - .treatment - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let conditions = form - .conditions - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let tetanus = form - .tetanus - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let swimming = form - .swimming - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let medication = form - .medication - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let notes = form - .notes - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - log::info!("{first} {last} filled out a health form!"); - let email = markup::new! { - @markup::doctype() - html { - head { - title { @format!("{} {} filled out a health form!", first, last) } - style { - "table { border-collapse: collapse; width: 100% }" - "td, th { padding: 8px }" - "td { text-align: left; width: 70%; word-wrap: break-word }" - "th { text-align: right; border-right: 1px solid #ddd }" - "tr { border-bottom: 1px solid #ddd }" - "h1 { text-align: center }" +impl From<&HealthForm> for HashMap { + fn from(form: &HealthForm) -> Self { + let mut map = HashMap::new(); + map.insert(37, format!("{} {}", form.first_name.0, form.last_name.0)); + map.insert( + 38, + format!("{} {}", form.parent_first_name.0, form.parent_last_name.0), + ); + map.insert(39, form.birthdate.0.clone()); + map.insert(40, form.street.0.clone()); + map.insert(41, form.city.0.clone()); + map.insert(42, form.state.0.clone()); + map.insert(43, form.zip.0.clone()); + map.insert(44, form.parent_cellphone.0.clone()); + map.insert(45, form.homephone.0.clone()); + map.insert(46, format!("{} {}", form.contact.0, form.contact_phone.0)); + map.insert(47, form.doctorname.0.clone()); + map.insert(48, form.doctorcity.0.clone()); + map.insert(49, form.doctorphone.0.clone()); + map.insert(50, form.medical.0.clone()); + map.insert(51, form.insurance.0.clone()); + map.insert(52, form.policy_number.0.clone()); + map.insert(54, form.agreement.0.clone()); + map.insert( + 55, + format!("{} \n {}", form.allergies.0, form.allergies_other.0), + ); + map.insert(56, form.specific_allergies.0.clone()); + map.insert(57, form.treatment.0.clone()); + map.insert(58, form.conditions.0.clone()); + map.insert(59, form.tetanus.0.clone()); + map.insert(60, form.medication.0.clone()); + map.insert(61, form.notes.0.clone()); + map.insert(62, form.swimming.0.clone()); + map + } +} + +impl HealthForm { + fn build_email(&self) -> Markup { + html! { + (DOCTYPE) + meta charset="utf-8"; + html { + head { + title { (self.first_name.0) " " (self.last_name.0) " filled out a health form!" } + style { + "table { border-collapse: collapse; width: 100% }" + "td, th { padding: 8px }" + "td { text-align: left; width: 70%; word-wrap: break-word }" + "th { text-align: right; border-right: 1px solid #ddd }" + "tr { border-bottom: 1px solid #ddd }" + "h1 { text-align: center }" + } } - } - body { - h1 { @format!("Health form for {} {}!", first, last) } - hr; - table { - tr { - th { "Name" } - td { @format!("{} {}", first, last) } - } - tr { - th { "Parent" } - td { @parent } - } - tr { - th { "Birthdate" } - td { @birthdate } - } - tr { - th { "Street" } - td { @street } - } - tr { - th { "City" } - td { @city } - } - tr { - th { "State" } - td { @state } - } - tr { - th { "Zip" } - td { @zip } - } - tr { - th { "Phone" } - td { @parent_cellphone } - } - tr { - th { "Home Phone" } - td { @homephone } - } - tr { - th { "Additional Emergency Contact" } - td { @contact } - } - tr { - th { "Contact Phone" } - td { @contact_phone } - } - tr { - th { "Doctor" } - td { @doctorname } - } - tr { - th { "Doctor City" } - td { @doctorcity } - } - tr { - th { "Doctor Phone" } - td { @doctorphone } - } - tr { - th { "Medical Coverage" } - td { @medical } - } - tr { - th { "Insurance Provider" } - td { @insurance } - } - tr { - th { "Policy Number" } - td { @policy_number } - } - tr { - th { "Allergies" } - td { @allergies } - } - tr { - th { "Other Allergies" } - td { @allergies_other } - } - tr { - th { "Specific Allergies" } - td { @specific_allergies } - } - tr { - th { "Treatments" } - td { @treatment } - } - tr { - th { "Physical or mental conditions" } - td { @conditions } - } - tr { - th { "Last tetanus shot" } - td { @tetanus } - } - tr { - th { "Swimming Ability" } - td { @swimming } - } - tr { - th { "Medication Schedule" } - td { @medication } - } - tr { - th { "Other Relevant Info" } - td { @notes } - } - tr { - th { "Final Agreement" } - td { @agreement } + body { + h1 { "Health form for " (self.first_name.0) " " (self.last_name.0) "!" } + hr; + table { + tr { + th { "Name" } + td { (self.first_name.0) " " (self.last_name.0) } + } + tr { + th { "Parent" } + td { (self.parent_first_name.0) " " (self.parent_last_name.0) } + } + tr { + th { "Birthdate" } + td { (self.birthdate.0) } + } + tr { + th { "Street" } + td { (self.street.0) } + } + tr { + th { "City" } + td { (self.city.0) } + } + tr { + th { "State" } + td { (self.state.0) } + } + tr { + th { "Zip" } + td { (self.zip.0) } + } + tr { + th { "Parent Cell Phone" } + td { (self.parent_cellphone.0) } + } + tr { + th { "Homephone" } + td { (self.homephone.0) } + } + tr { + th { "Additional Emergency Contact" } + td { (self.contact.0) } + } + tr { + th { "Emegency Contact Phone" } + td { (self.contact_phone.0) } + } + tr { + th { "Doctor" } + td { (self.doctorname.0) } + } + tr { + th { "Doctor City" } + td { (self.doctorcity.0) } + } + tr { + th { "Doctor Phone" } + td { (self.doctorphone.0) } + } + tr { + th { "Medical Coverage" } + td { (self.medical.0) } + } + tr { + th { "Insurance Provider" } + td { (self.insurance.0) } + } + tr { + th { "Policy Number" } + td { (self.policy_number.0) } + } + tr { + th { "Allergies" } + td { (self.allergies.0) + "\n\n" + (self.allergies_other.0) + } + } + tr { + th { "Specific Allergies" } + td { (self.specific_allergies.0) } + } + tr { + th { "Allergic Treatments" } + td { (self.treatment.0) } + } + tr { + th { "Conditions" } + td { (self.conditions.0) } + } + tr { + th { "Date of last Tetanus Shot" } + td { (self.tetanus.0) } + } + tr { + th { "Swimming Ability" } + td { (self.swimming.0) } + } + tr { + th { "Medication Schedule" } + td { (self.medication.0) } + } + tr { + th { "Other Notes" } + td { (self.notes.0) } + } + tr { + th { "Final Agreement" } + td { (self.agreement.0) } + } + tr { + th { "Registration" } + td { (self.registration.0) } + } } } } - } - }; - let mut path: Option = Some(String::from("")); - let mut file_exists = false; - let mut filename = String::from(""); - log::info!("{:?}", file_exists); - if let Some(f) = form.file { - if let Some(file) = f.file_name { - if let Some(ext) = file.rsplit('.').next() { - filename = format!("{}.{}", filename_noext, ext); - path = Some(format!("./tmp/{}.{}", filename_noext, ext)); - } else { - path = Some(format!("./tmp/{}", file)); - } - // let path = format!("./tmp/{}", file); - log::info!("saving to {}", path.clone().unwrap()); - match f.file.persist(path.clone().unwrap()) { - Ok(f) => { - log::info!("{:?}", f); - if f.metadata().unwrap().len() > 0 { - file_exists = true; - } - } - Err(e) => log::info!("{:?}: Probably a missing image", e), - } } } - let multi = if file_exists { - let filebody = fs::read(path.clone().unwrap_or_default()); - let content_type = ContentType::parse("image/jpg").unwrap(); - let attachment = Attachment::new(filename).body(filebody.unwrap(), content_type); - log::info!("{:?}", attachment); - MultiPart::mixed() - .singlepart(SinglePart::html(email.to_string())) - .singlepart(attachment) - } else { - MultiPart::alternative_plain_html(String::from("Testing"), email.to_string()) - }; + async fn store_form(&self) -> Result<()> { + let client = Client::new(); + let map = HashMap::from(self); + let mut json = HashMap::new(); + json.insert("data", map); - log::info!("{:?}", multi); - - if let Ok(m) = Message::builder() - .from( - "TFC ADMIN " - .parse() - .unwrap(), - ) - .to("Chris Cochrun ".parse().unwrap()) - // .to("Ethan Rose ".parse().unwrap()) - .subject(email_subject) - .multipart(multi) - { - let sender = SmtpTransport::relay("mail.tfcconnection.org") - .ok() - .unwrap() - .credentials(Credentials::new( - "no-reply@mail.tfcconnection.org".to_owned(), - "r9f36mNZFtiW4f".to_owned(), + let link = r#"https://staff.tfcconnection.org/apps/tables/#/table/4/row/757"#; + let res = client + .post("https://staff.tfcconnection.org/ocs/v2.php/apps/tables/api/2/tables/4/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; + if res.status().is_success() { + let res = res.text().await.unwrap(); + Ok(()) + } else { + Err(eyre!( + "Problem in storing data: {:?}", + res.error_for_status() )) - .authentication(vec![Mechanism::Plain]) - .build(); - match sender.send(&m) { - Ok(res) => log::info!("{:?}", res), - Err(e) => log::info!("{e}"), } - } else { - log::info!("Email incorrect"); } - match registration.as_str() { + fn get_temp_file(&mut self) -> Option<(String, String, Option)> { + let first = self.first_name.clone(); + let last = self.last_name.clone(); + let filename_noext = format!("{}_{}", first, last); + let (file_name, content_type) = if let Some(file) = self.file.as_ref() { + let content_type = file.content_type.clone().map(|m| m.to_string()); + (file.file_name.to_owned(), content_type) + } else { + return None; + }; + let filename; + let path = if let Some(file_name) = file_name { + if let Some(ext) = file_name.rsplit('.').next() { + filename = format!("{}.{}", filename_noext, ext); + format!("./tmp/{}.{}", filename_noext, ext) + } else { + filename = String::default(); + format!("./tmp/{}", file_name) + } + } else { + filename = String::default(); + String::default() + }; + let file = self.file.take(); + match file.unwrap().file.persist(path.clone()) { + Ok(f) => { + if f.metadata().unwrap().len() <= 0 { + return None; + } + info!(?f, "File saved successfully"); + Some((filename, path, content_type.clone())) + } + Err(e) => { + error!("{:?}: Probably a missing image", e); + None + } + } + } + + fn send_email(&mut self) -> Result { + let first = self.first_name.clone(); + let last = self.last_name.clone(); + let email_subject = format!("{} {} filled out a health form!", first, last); + info!("{first} {last} filled out a health form!"); + let email = self.build_email(); + let temp_file = self.get_temp_file(); + let multi = if let Some((file, path, content_type)) = temp_file { + let filebody = fs::read(path); + let content_type = + ContentType::parse(&content_type.unwrap_or(String::from("image/jpg"))).unwrap(); + let attachment = Attachment::new(file).body(filebody.unwrap(), content_type); + // info!(?attachment); + MultiPart::mixed() + .singlepart(SinglePart::html(email.into_string())) + .singlepart(attachment) + } else { + MultiPart::alternative_plain_html(String::from("Testing"), email.into_string()) + }; + + Message::builder() + .from( + "TFC ADMIN " + .parse() + .unwrap(), + ) + .to("Chris Cochrun ".parse().unwrap()) + .to("Ethan Rose ".parse().unwrap()) + .subject(email_subject) + .multipart(multi) + .wrap_err("Email incorrect") + } +} + +#[post("/api/health-form")] +pub async fn health_form(MultipartForm(mut form): MultipartForm) -> HttpResponse { + info!("Starting health form work: {:?}", form); + match form.send_email() { + Ok(m) => { + actix_rt::spawn(send_email(m).map(|r| match r { + Ok(_) => info!("Email sent successfully"), + Err(e) => error!("There was an erroring sending form to nextcloud: {e}"), + })); + info!("Successfully sent email health form") + } + Err(e) => error!("There was an error sending email: {e}"), + } + + let map = HashMap::from(&form); + actix_rt::spawn(store_form(map).map(|r| match r { + Ok(_) => { + info!("Successfully stored health form in nextcloud!") + } + Err(e) => error!("There was an error storing form in nextcloud: {e}"), + })); + + let full_name = format!("{} {}", form.first_name.0, form.last_name.0); + match form.registration.0.as_str() { "now" => { - log::info!("Sending them to pay for registration now"); + info!("Sending them to pay for registration now"); HttpResponse::Ok() .insert_header(("Access-Control-Expose-Headers", "*")) .insert_header(( @@ -458,7 +385,7 @@ pub async fn health_form(MultipartForm(form): MultipartForm) -> Http .finish() } "full" => { - log::info!("Sending them to pay for the full registration now"); + info!("Sending them to pay for the full registration now"); HttpResponse::Ok() .insert_header(("Access-Control-Expose-Headers", "*")) .insert_header(( @@ -468,43 +395,62 @@ pub async fn health_form(MultipartForm(form): MultipartForm) -> Http .finish() } "later" => { - log::info!("{} would like to pay later", full_name); - let html = markup::new! { - div { - class { "mt-8" } + info!("{} would like to pay later", full_name); + let html = html! { + div class="mt-8" { h2 { - @format!("Thank you, {}!", full_name) + "Thank you, " (full_name) "!" } - p { "Can't wait to see you at camp!" } p { class { "" } - "If you'd like to pay for your registration go to the donate tab in the top right when you are ready and find the camp registration option." + "If you'd like to pay for your registration go to the donate tab in the top right when you are ready and find the right registration option." } } }; - HttpResponse::Ok().body(html.to_string()) + HttpResponse::Ok().body(html.into_string()) } _ => { - log::error!("Got registration error....."); - let html = markup::new! { - div { - class { "mt-8" } + log::warn!( + "Got registration error possibly. Here is what the registration was: {}", + form.registration.0.as_str() + ); + let html = html! { + div class="mt-8" { h2 { - @format!("Thank you, {}!", full_name) + "Thank you, " (full_name) "!" } - p { "Can't wait to see you at camp!" } p { class { "" } - "If you'd like to pay for your registration go to the donate tab in the top right when you are ready and find the camp registration option." + "If you filled this out for camp or mission trip you can pay for your registration at the donate tab in the top right when you are ready and find the camp or mission trip registration option." } } }; - HttpResponse::Ok().body(html.to_string()) + HttpResponse::Ok().body(html.into_string()) } } // HttpResponse::Ok().body("hi") } -async fn store_health_form(_form: HealthForm) -> bool { - todo!() +async fn store_form(map: HashMap) -> Result<()> { + let client = Client::new(); + let mut json = HashMap::new(); + json.insert("data", map); + + let res = client + .post("https://staff.tfcconnection.org/ocs/v2.php/apps/tables/api/2/tables/4/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; + if res.status().is_success() { + let res = res.text().await.unwrap(); + Ok(()) + } else { + Err(eyre!( + "Problem in storing data: {:?}", + res.error_for_status() + )) + } } diff --git a/src/api/local_trip_form.rs b/src/api/local_trip_form.rs index fa38b2b..da139bc 100644 --- a/src/api/local_trip_form.rs +++ b/src/api/local_trip_form.rs @@ -1,10 +1,9 @@ use actix_multipart::form::{text::Text, MultipartForm}; use actix_web::{post, HttpResponse}; -use lettre::{ - message::MultiPart, - transport::smtp::authentication::{Credentials, Mechanism}, - Message, SmtpTransport, Transport, -}; +use lettre::{message::MultiPart, Message}; +use tracing::info; + +use crate::email::send_email; #[derive(Debug, MultipartForm, Default)] struct LocalForm { @@ -165,7 +164,7 @@ pub async fn local_form(MultipartForm(form): MultipartForm) -> HttpRe .unwrap_or(&Text(String::from(""))) .0 .clone(); - log::info!("{first} {last} signed up for the local mission trip!"); + info!("{first} {last} signed up for the local mission trip!"); let email = markup::new! { @markup::doctype() html { @@ -260,7 +259,7 @@ pub async fn local_form(MultipartForm(form): MultipartForm) -> HttpRe } } }; - log::info!("{:?}", form); + info!("{:?}", form); let multi = MultiPart::alternative_plain_html(String::from("Testing"), email.to_string()); if let Ok(m) = Message::builder() @@ -274,21 +273,9 @@ pub async fn local_form(MultipartForm(form): MultipartForm) -> HttpRe .subject(email_subject) .multipart(multi) { - let sender = SmtpTransport::relay("mail.tfcconnection.org") - .ok() - .unwrap() - .credentials(Credentials::new( - "no-reply@mail.tfcconnection.org".to_owned(), - "r9f36mNZFtiW4f".to_owned(), - )) - .authentication(vec![Mechanism::Plain]) - .build(); - match sender.send(&m) { - Ok(res) => log::info!("{:?}", res), - Err(e) => log::info!("{e}"), - } + let _ = send_email(m); } else { - log::info!("Email incorrect"); + info!("Email incorrect"); } HttpResponse::Ok().body("thankyou") diff --git a/src/api/mod.rs b/src/api/mod.rs index f9c19bf..0c01222 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1,8 +1,9 @@ pub mod camp_form; -pub mod church_form; -pub mod errors; +// pub mod errors; +pub mod contact; pub mod health_form; pub mod local_trip_form; +pub mod mt_church_form; pub mod mt_form; -pub mod parent_form; -pub mod teacher_form; +pub mod mt_parent_form; +pub mod mt_teacher_form; diff --git a/src/api/mt_church_form.rs b/src/api/mt_church_form.rs new file mode 100644 index 0000000..f3e634f --- /dev/null +++ b/src/api/mt_church_form.rs @@ -0,0 +1,234 @@ +use std::{ + collections::{BTreeMap, HashMap}, + fs, +}; + +use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm}; +use actix_web::{post, web, HttpResponse}; +use color_eyre::{eyre::eyre, Result}; +use lettre::{ + message::{header::ContentType, Attachment, MultiPart, SinglePart}, + Message, +}; +use maud::{html, Markup, PreEscaped, DOCTYPE}; +use reqwest::Client; +use serde_json::json; +use sqlx::SqliteConnection; +use tracing::{error, info}; + +#[derive(Debug, MultipartForm)] +struct MtChurchForm { + #[multipart(rename = "firstname")] + first_name: Text, + #[multipart(rename = "lastname")] + last_name: Text, + #[multipart(rename = "studentfirstname")] + student_first_name: Text, + #[multipart(rename = "studentlastname")] + student_last_name: Text, + relationship: Text, + #[multipart(rename = "walk-with-jesus")] + walk_jesus: Text, + commitment: Text, + #[multipart(rename = "pos-characteristics")] + positive: Text, + #[multipart(rename = "neg-characteristics")] + negative: Text, + teachable: Text, + #[multipart(rename = "extra-info")] + extra_info: Text, +} + +impl From<&MtChurchForm> for HashMap { + fn from(form: &MtChurchForm) -> Self { + let mut map = HashMap::new(); + map.insert(158, format!("{} {}", form.first_name.0, form.last_name.0)); + map.insert( + 159, + format!("{} {}", form.student_first_name.0, form.student_last_name.0), + ); + map.insert(160, form.relationship.0.clone()); + map.insert(163, form.positive.0.clone()); + map.insert(164, form.negative.0.clone()); + map.insert(161, form.walk_jesus.0.clone()); + map.insert(162, form.commitment.0.clone()); + map.insert(165, form.teachable.0.clone()); + map.insert(166, form.extra_info.0.clone()); + map + } +} + +impl MtChurchForm { + async fn build_email(&self) -> Markup { + html! { + (DOCTYPE) + meta charset="utf-8"; + html { + head { + title { (self.first_name.0) " " (self.last_name.0) " filled out a church reference form for " (self.student_first_name.0) " " (self.student_last_name.0) "!" } + style { + "table { border-collapse: collapse; width: 100% }" + "td, th { padding: 8px }" + "td { text-align: left; width: 70%; word-wrap: break-word }" + "th { text-align: right; border-right: 1px solid #ddd }" + "tr { border-bottom: 1px solid #ddd }" + "h1 { text-align: center }" + } + } + body { + h1 { "Church reference form for " (self.student_first_name.0) " " (self.student_last_name.0) "!" } + hr; + table { + tr { + th { "Name" } + td { (self.first_name.0) " " (self.last_name.0) } + } + tr { + th { "Student" } + td { (self.student_first_name.0) " " (self.student_last_name.0) } + } + tr { + th { "Relationship with student" } + td { (self.relationship.0) } + } + tr { + th { "Positive characteristics" } + td { (self.positive.0) } + } + tr { + th { "Negative characteristics" } + td { (self.negative.0) } + } + tr { + th { "Walk with Jesus" } + td { (self.walk_jesus.0) } + } + tr { + th { "Commitment" } + td { (self.commitment.0) } + } + tr { + th { "Teachable heart" } + td { (self.teachable.0) } + } + tr { + th { "Other Relevant Info" } + td { (self.extra_info.0) } + } + } + } + } + } + } + + async fn store_form(&self) -> Result<()> { + let client = Client::new(); + let map = HashMap::from(self); + let mut json = HashMap::new(); + json.insert("data", map); + + let link = r#"https://staff.tfcconnection.org/apps/tables/#/table/13/row/757"#; + let res = client + .post("https://staff.tfcconnection.org/ocs/v2.php/apps/tables/api/2/tables/13/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; + if res.status().is_success() { + let res = res.text().await.unwrap(); + Ok(()) + } else { + Err(eyre!( + "Problem in storing data: {:?}", + res.error_for_status() + )) + } + } + + async fn send_email(&mut self) -> Result<()> { + let first = self.student_first_name.clone(); + let last = self.student_last_name.clone(); + let email_subject = format!("Church reference form for {} {}!", first, last); + info!("{first} {last} church reference form!"); + let email = self.build_email().await; + let email = SinglePart::html(email.into_string()); + + if let Ok(m) = Message::builder() + .from( + "TFC ADMIN " + .parse() + .unwrap(), + ) + .to("Chris Cochrun ".parse().unwrap()) + .to("Ethan Rose ".parse().unwrap()) + .subject(email_subject) + .singlepart(email) + { + crate::email::send_email(m).await + } else { + Err(eyre!("Email incorrect")) + } + } +} + +#[post("/api/mt-church-form")] +pub async fn mt_church_form(MultipartForm(mut form): MultipartForm) -> HttpResponse { + match form.store_form().await { + Ok(_) => info!("Successfully sent form to nextcloud!"), + Err(e) => error!("There was an erroring sending form to nextcloud: {e}"), + } + match form.send_email().await { + Ok(_) => info!("Successfully sent email"), + Err(e) => error!("There was an error sending the email: {e}"), + } + HttpResponse::Ok().body("thankyou") +} + +#[cfg(test)] +mod test { + use actix_web::test; + use pretty_assertions::assert_eq; + use sqlx::Connection; + use tracing::debug; + + use super::*; + + fn form() -> MtChurchForm { + MtChurchForm { + first_name: Text(String::from("Bilbo")), + last_name: Text(String::from("Braggins")), + student_first_name: Text(String::from("Frodo")), + student_last_name: Text(String::from("Braggins")), + relationship: Text(String::from("Uncle")), + positive: Text(String::from("Nimble and brave")), + negative: Text(String::from("Small")), + walk_jesus: Text(String::from("Such a strutter")), + commitment: Text(String::from("Super")), + teachable: Text(String::from("Very")), + extra_info: Text(String::from("Willing to take the ring")), + } + } + + #[test] + async fn test_nc_post() { + let form = form(); + assert!(!form.first_name.is_empty()); + let res = form.store_form().await; + match res { + Ok(_) => assert!(true, "passed storing test"), + Err(e) => assert!(false, "Failed storing test: {e}"), + } + } + + #[test] + async fn test_email() { + let mut form = form(); + assert!(!form.first_name.is_empty()); + match form.send_email().await { + Ok(_) => assert!(true, "passed emailing test"), + Err(e) => assert!(false, "Failed emailing test: {e}"), + } + } +} diff --git a/src/api/mt_form.rs b/src/api/mt_form.rs index 3ded04a..1e0752a 100644 --- a/src/api/mt_form.rs +++ b/src/api/mt_form.rs @@ -1,487 +1,519 @@ -use std::fs; +use std::{collections::HashMap, fs}; use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm}; use actix_web::{post, HttpResponse}; +use color_eyre::{ + eyre::{eyre, Context}, + Result, +}; +use futures::FutureExt; use lettre::{ message::{header::ContentType, Attachment, MultiPart, SinglePart}, - transport::smtp::authentication::{Credentials, Mechanism}, - Message, SmtpTransport, Transport, + Message, }; +use maud::{html, Markup, DOCTYPE}; +use reqwest::Client; +use tracing::{error, info}; -#[derive(Debug, MultipartForm, Default)] +#[derive(Debug, MultipartForm)] struct MtForm { #[multipart(rename = "firstname")] - first_name: Option>, + first_name: Text, #[multipart(rename = "lastname")] - last_name: Option>, + last_name: Text, #[multipart(rename = "parentfirstname")] - parent_first_name: Option>, + parent_first_name: Text, #[multipart(rename = "parentlastname")] - parent_last_name: Option>, - birthdate: Option>, - gender: Option>, - street: Option>, - city: Option>, - state: Option>, - zip: Option>, - cellphone: Option>, - parentphone: Option>, - email: Option>, - parentemail: Option>, - school: Option>, - grade: Option>, + parent_last_name: Text, + birthdate: Text, + gender: Text, + street: Text, + city: Text, + state: Text, + zip: Text, + cellphone: Text, + parentphone: Text, + email: Text, + parentemail: Text, + school: Text, + grade: Text, #[multipart(rename = "pastorfirstname")] - pastor_first_name: Option>, + pastor_first_name: Text, #[multipart(rename = "pastorlastname")] - pastor_last_name: Option>, + pastor_last_name: Text, #[multipart(rename = "churchattendance")] - church_attendance: Option>, + church_attendance: Text, #[multipart(rename = "tfcgroup")] - tfc_group: Option>, - shirt: Option>, - trip: Option>, + tfc_group: Text, + shirt: Text, + trip: Text, #[multipart(rename = "tripnotes")] - trip_notes: Option>, + trip_notes: Text, #[multipart(rename = "relationship-with-jesus")] - relationship_with_jesus: Option>, + relationship_with_jesus: Text, #[multipart(rename = "testimony")] - testimony: Option>, + testimony: Text, #[multipart(rename = "involvement-with-group")] - involvement_with_group: Option>, + involvement_with_group: Text, #[multipart(rename = "reasons-for-trip-choice")] - reasons: Option>, - strengths: Option>, - weaknesses: Option>, + reasons: Text, + strengths: Text, + weaknesses: Text, #[multipart(rename = "previous-trip-info")] - previous_trip_info: Option>, + previous_trip_info: Text, #[multipart(rename = "attitude-torward-work")] - attitude: Option>, + attitude: Text, #[multipart(rename = "relevant-notes")] - relevant_notes: Option>, + relevant_notes: Text, #[multipart(rename = "final-agreement")] - final_agreement: Option>, - registration: Option>, + final_agreement: Text, + registration: Text, + #[multipart(rename = "health-form")] + health_form: Text, #[multipart(rename = "image")] file: Option, } -#[post("/mt-form")] -pub async fn mt_form(MultipartForm(form): MultipartForm) -> HttpResponse { - let first = form - .first_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let last = form - .last_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let email_subject = format!("{} {} signed up for mission trip!", first, last); - let filename_noext = format!("{}_{}", first, last); - let parent = format!( - "{} {}", - form.parent_first_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(), - form.parent_last_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone() - ); - let birthdate = form - .birthdate - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let gender = form - .gender - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let street = form - .street - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let city = form - .city - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let state = form - .state - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let zip = form.zip.as_ref().unwrap_or(&Text(0)).0; - let cellphone = form - .cellphone - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let parentphone = form - .parentphone - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let email = form - .email - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let parentemail = form - .parentemail - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let school = form - .school - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let grade = form - .grade - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let pastor = format!( - "{} {}", - form.pastor_first_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(), - form.pastor_last_name - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone() - ); - let church_attendance = form - .church_attendance - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let tfc_group = form - .tfc_group - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let shirt = form - .shirt - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let trip = form - .trip - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let trip_notes = form - .trip_notes - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let relationship = form - .relationship_with_jesus - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let testimony = form - .testimony - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let involvement = form - .involvement_with_group - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let reasons = form - .reasons - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let strengths = form - .strengths - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let weaknesses = form - .weaknesses - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let previous_trip = form - .previous_trip_info - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let attitude = form - .attitude - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let relevant = form - .relevant_notes - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let final_agreement = form - .final_agreement - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - let registration = form - .registration - .as_ref() - .unwrap_or(&Text(String::from(""))) - .0 - .clone(); - log::info!("{first} {last} signed up for mission trip!"); - let email = markup::new! { - @markup::doctype() - html { - head { - title { @format!("{} {} signed up for mission trip!", first, last) } - style { - "table { border-collapse: collapse; width: 100% }" - "td, th { padding: 8px }" - "td { text-align: left; width: 70%; word-wrap: break-word }" - "th { text-align: right; border-right: 1px solid #ddd }" - "tr { border-bottom: 1px solid #ddd }" - "h1 { text-align: center }" - } - } - body { - h1 { @format!("Mission trip form for {} {}!", first, last) } - hr; - table { - tr { - th { "Name" } - td { @format!("{} {}", first, last) } - } - tr { - th { "Parent" } - td { @parent } - } - tr { - th { "Birthdate" } - td { @birthdate } - } - tr { - th { "Gender" } - td { @gender } - } - tr { - th { "Street" } - td { @street } - } - tr { - th { "City" } - td { @city } - } - tr { - th { "State" } - td { @state } - } - tr { - th { "Zip" } - td { @zip } - } - tr { - th { "Phone" } - td { @cellphone } - } - tr { - th { "Parent Phone" } - td { @parentphone } - } - tr { - th { "Email" } - td { @email } - } - tr { - th { "Parent Email" } - td { @parentemail } - } - tr { - th { "School" } - td { @school } - } - tr { - th { "Grade" } - td { @grade } - } - tr { - th { "Pastor" } - td { @pastor } - } - tr { - th { "Church Attendance" } - td { @church_attendance } - } - tr { - th { "TFC Group" } - td { @tfc_group } - } - tr { - th { "T-Shirt Size" } - td { @shirt } - } - tr { - th { "Trip Choice" } - td { @trip } - } - tr { - th { "Extra Trip Notes" } - td { @trip_notes } - } - tr { - th { "Relationship with Jesus" } - td { @relationship } - } - tr { - th { "Testimony" } - td { @testimony } - } - tr { - th { "Involvement with TFC or Youth Group" } - td { @involvement } - } - tr { - th { "Reasons for trip choice" } - td { @reasons } - } - tr { - th { "Strengths" } - td { @strengths } - } - tr { - th { "Weaknesses" } - td { @weaknesses } - } - tr { - th { "Previous Trips" } - td { @previous_trip } - } - tr { - th { "Attitude Torward Work" } - td { @attitude } - } - tr { - th { "Other Relevant Info" } - td { @relevant } - } - tr { - th { "Final Agreement" } - td { @final_agreement } - } - tr { - th { "Registration" } - td { @registration } - } - } - } - } - }; - let mut path: Option = Some(String::from("")); - let mut file_exists = false; - let mut filename = String::from(""); - log::info!("{:?}", file_exists); - if let Some(f) = form.file { - if let Some(file) = f.file_name { - if let Some(ext) = file.rsplit('.').next() { - filename = format!("{}.{}", filename_noext, ext); - path = Some(format!("./tmp/{}.{}", filename_noext, ext)); - } else { - path = Some(format!("./tmp/{}", file)); - } - // let path = format!("./tmp/{}", file); - log::info!("saving to {}", path.clone().unwrap()); - match f.file.persist(path.clone().unwrap()) { - Ok(f) => { - log::info!("{:?}", f); - if f.metadata().unwrap().len() > 0 { - file_exists = true; - } - } - Err(e) => log::info!("{:?}: Probably a missing image", e), - } - } +impl From<&MtForm> for HashMap { + fn from(form: &MtForm) -> Self { + let mut map = HashMap::new(); + map.insert(106, format!("{} {}", form.first_name.0, form.last_name.0)); + map.insert( + 107, + format!("{} {}", form.parent_first_name.0, form.parent_last_name.0), + ); + map.insert(109, form.gender.0.clone()); + map.insert(110, form.birthdate.0.clone()); + map.insert(117, form.street.0.clone()); + map.insert(118, form.city.0.clone()); + map.insert(119, form.zip.0.to_string()); + map.insert(120, form.state.0.clone()); + map.insert(121, form.cellphone.0.clone()); + map.insert(122, form.email.0.clone()); + map.insert(123, form.parentphone.0.clone()); + map.insert(124, form.parentemail.0.clone()); + map.insert(125, form.school.0.clone()); + map.insert(126, form.grade.0.clone()); + map.insert( + 127, + format!("{} {}", form.pastor_first_name.0, form.pastor_last_name.0), + ); + map.insert(128, form.church_attendance.0.clone()); + map.insert(129, form.tfc_group.0.clone()); + map.insert(130, form.shirt.0.clone()); + map.insert(131, form.trip.0.clone()); + map.insert(132, form.trip_notes.0.clone()); + map.insert(133, form.relationship_with_jesus.0.clone()); + map.insert(134, form.testimony.0.clone()); + map.insert(135, form.involvement_with_group.0.clone()); + map.insert(136, form.reasons.0.clone()); + map.insert(137, form.strengths.0.clone()); + map.insert(138, form.weaknesses.0.clone()); + map.insert(139, form.previous_trip_info.0.clone()); + map.insert(140, form.attitude.0.clone()); + map.insert(141, form.relevant_notes.0.clone()); + map.insert(144, form.final_agreement.0.clone()); + map.insert(145, form.registration.0.clone()); + map + } +} + +impl MtForm { + fn build_email(&self) -> Markup { + html! { + (DOCTYPE) + meta charset="utf-8"; + html { + head { + title { (self.first_name.0) " " (self.last_name.0) " signed up for mission trip!" } + style { + "table { border-collapse: collapse; width: 100% }" + "td, th { padding: 8px }" + "td { text-align: left; width: 70%; word-wrap: break-word }" + "th { text-align: right; border-right: 1px solid #ddd }" + "tr { border-bottom: 1px solid #ddd }" + "h1 { text-align: center }" + } + } + body { + h1 { "Mission trip form for " (self.first_name.0) " " (self.last_name.0) "!" } + hr; + table { + tr { + th { "Name" } + td { (self.first_name.0) " " (self.last_name.0) } + } + tr { + th { "Parent" } + td { (self.parent_first_name.0) " " (self.parent_last_name.0) } + } + tr { + th { "Birthdate" } + td { (self.birthdate.0) } + } + tr { + th { "Gender" } + td { (self.gender.0) } + } + tr { + th { "Street" } + td { (self.street.0) } + } + tr { + th { "City" } + td { (self.city.0) } + } + tr { + th { "State" } + td { (self.state.0) } + } + tr { + th { "Zip" } + td { (self.zip.0) } + } + tr { + th { "Phone" } + td { (self.cellphone.0) } + } + tr { + th { "Parent Phone" } + td { (self.parentphone.0) } + } + tr { + th { "Email" } + td { (self.email.0) } + } + tr { + th { "Parent Email" } + td { (self.parentemail.0) } + } + tr { + th { "School" } + td { (self.school.0) } + } + tr { + th { "Grade" } + td { (self.grade.0) } + } + tr { + th { "Pastor" } + td { (self.pastor_first_name.0) (self.pastor_last_name.0) } + } + tr { + th { "Church Attendance" } + td { (self.church_attendance.0) } + } + tr { + th { "TFC Group" } + td { (self.tfc_group.0) } + } + tr { + th { "T-Shirt Size" } + td { (self.shirt.0) } + } + tr { + th { "Trip Choice" } + td { (self.trip.0) } + } + tr { + th { "Extra Trip Notes" } + td { (self.trip_notes.0) } + } + tr { + th { "Relationship with Jesus" } + td { (self.relationship_with_jesus.0) } + } + tr { + th { "Testimony" } + td { (self.testimony.0) } + } + tr { + th { "Involvement with TFC or Youth Group" } + td { (self.involvement_with_group.0) } + } + tr { + th { "Reasons for trip choice" } + td { (self.reasons.0) } + } + tr { + th { "Strengths" } + td { (self.strengths.0) } + } + tr { + th { "Weaknesses" } + td { (self.weaknesses.0) } + } + tr { + th { "Previous Trips" } + td { (self.previous_trip_info.0) } + } + tr { + th { "Attitude Torward Work" } + td { (self.attitude.0) } + } + tr { + th { "Other Relevant Info" } + td { (self.relevant_notes.0) } + } + tr { + th { "Final Agreement" } + td { (self.final_agreement.0) } + } + tr { + th { "Registration" } + td { (self.registration.0) } + } + } + } + } + } + } + + fn get_temp_file(&self) -> Option<(String, String, Option)> { + let first = self.first_name.clone(); + let last = self.last_name.clone(); + let filename_noext = format!("{}_{}", first, last); + let (file_name, content_type) = if let Some(file) = self.file.as_ref() { + let content_type = file.content_type.clone().map(|m| m.to_string()); + (file.file_name.to_owned(), content_type) + } else { + return None; + }; + let filename; + let path = if let Some(file_name) = file_name { + if let Some(ext) = file_name.rsplit('.').next() { + filename = format!("{}.{}", filename_noext, ext); + format!("./tmp/{}.{}", filename_noext, ext) + } else { + filename = String::default(); + format!("./tmp/{}", file_name) + } + } else { + filename = String::default(); + String::default() + }; + if let Some(file) = &self.file { + let file = file.file.path(); + match fs::copy(file, &path) { + Ok(f) => { + if f <= 0 { + return None; + } + info!(?f, "File saved successfully"); + Some((filename, path, content_type.clone())) + } + Err(e) => { + error!("{:?}: Probably a missing image", e); + None + } + } + } else { + error!("Error in tempfile"); + None + } + } + + fn prepare_email(&self) -> Result { + let first = self.first_name.clone(); + let last = self.last_name.clone(); + let email_subject = format!("{} {} signed up for mission trip!", first, last); + info!("{first} {last} signed up for mission trip!"); + let email = self.build_email(); + let temp_file = self.get_temp_file(); + let multi = if let Some((file, path, content_type)) = temp_file { + let filebody = fs::read(path); + let content_type = + ContentType::parse(&content_type.unwrap_or(String::from("image/jpg"))).unwrap(); + let attachment = Attachment::new(file).body(filebody.unwrap(), content_type); + // info!(?attachment); + MultiPart::mixed() + .singlepart(SinglePart::html(email.into_string())) + .singlepart(attachment) + } else { + MultiPart::alternative_plain_html(String::from("Testing"), email.into_string()) + }; + + Message::builder() + .from( + "TFC ADMIN " + .parse() + .unwrap(), + ) + .to("Chris Cochrun ".parse().unwrap()) + .to("Ethan Rose ".parse().unwrap()) + .subject(email_subject) + .multipart(multi) + .wrap_err("problemss") + } +} + +#[post("/api/mt-form")] +pub async fn mt_form(MultipartForm(form): MultipartForm) -> HttpResponse { + let name = format!("{} {}", form.first_name.0, form.last_name.0); + let map = HashMap::from(&form); + let store = store_form(map); + actix_rt::spawn(store.map(|s| match s { + Ok(_) => info!("Successfully sent form to nextcloud!"), + Err(e) => error!("There was an erroring sending form to nextcloud: {e}"), + })); + let email = form.prepare_email(); + match email { + Ok(m) => { + let sent = crate::email::send_email(m); + actix_rt::spawn(sent.map(|s| match s { + Ok(_) => info!("Successfully sent form to email!"), + Err(e) => error!("There was an erroring sending form to email: {e}"), + })); + } + Err(e) => error!("error sending email {e}"), + }; + match form.registration.0.as_str() { + "now" => { + if form.health_form.0.as_str() == "yes" { + HttpResponse::Ok() + .insert_header(("Access-Control-Expose-Headers", "*")) + .insert_header(("HX-Redirect", "/health-form?registration=now")) + .finish() + } else { + HttpResponse::Ok() + .insert_header(("Access-Control-Expose-Headers", "*")) + .insert_header(( + "HX-Redirect", + "https://secure.myvanco.com/L-Z772/campaign/C-13DM3", + )) + .finish() + } + } + "later" => { + if form.health_form.0.as_str() == "yes" { + HttpResponse::Ok() + .insert_header(("Access-Control-Expose-Headers", "*")) + .insert_header(("HX-Redirect", "/health-form?registration=later")) + .finish() + } else { + HttpResponse::Ok().body( + html! { + h2 { "Thank you! {}" (name)} + p { "You can go to the health form " + a href="/health-form" { "here" } + " or you can pay for mission trip " + a href="https://secure.myvanco.com/L-Z772/campaign/C-13DM3" { "here" } + } + } + .into_string(), + ) + } + } + _ => { + error!("There wasn't an option for the registration passed in."); + HttpResponse::Ok().body( + html! { + h2 { "Thank you! {}" (name)} + p { "You can go to the health form " + a href="/health-form" { "here" } + " or you can pay for mission trip " + a href="https://secure.myvanco.com/L-Z772/campaign/C-13DM3" { "here" } + } + } + .into_string(), + ) + } + } +} + +async fn store_form(map: HashMap) -> Result<()> { + let client = Client::new(); + // let map = HashMap::from(self); + let mut json = HashMap::new(); + json.insert("data", map); + + let res = client + .post("https://staff.tfcconnection.org/ocs/v2.php/apps/tables/api/2/tables/9/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; + if res.status().is_success() { + // let res = res.text().await.unwrap(); + Ok(()) + } else { + Err(eyre!( + "Problem in storing data: {:?}", + res.error_for_status() + )) + } +} + +#[cfg(test)] +mod test { + use actix_web::test; + + use super::*; + + fn form() -> MtForm { + MtForm { + first_name: Text(String::from("Frodo")), + last_name: Text(String::from("Braggins")), + parent_first_name: Text(String::from("Bilbo")), + parent_last_name: Text(String::from("Braggins")), + birthdate: Text(String::from("1845-09-12")), + gender: Text(String::from("male")), + street: Text(String::from("1234 Bag End")), + city: Text(String::from("The Shire")), + state: Text(String::from("Hobbiton")), + zip: Text(88888), + cellphone: Text(String::from("7868889797")), + parentphone: Text(String::from("1234567898")), + email: Text(String::from("frodo@hobbits.com")), + parentemail: Text(String::from("bilbo@hobbits.com")), + school: Text(String::from("Shire High")), + grade: Text(String::from("junior")), + pastor_first_name: Text(String::from("Gandalf")), + pastor_last_name: Text(String::from("The White")), + church_attendance: Text(String::from("often")), + tfc_group: Text(String::from("Northern Valley")), + shirt: Text(String::from("medium")), + trip: Text(String::from("Mordor")), + trip_notes: Text(String::from("If it must happen, I'll do it.")), + relationship_with_jesus: Text(String::from("Cool beans")), + testimony: Text(String::from("Nephew of Bilbo Braggins")), + involvement_with_group: Text(String::from("Good friends with Gandalf")), + reasons: Text(String::from("Want an adventure")), + strengths: Text(String::from("Willing, brave, small, and curious")), + weaknesses: Text(String::from("Not strong, or good with weapons")), + previous_trip_info: Text(String::from("The edge of Hob Hill")), + attitude: Text(String::from("Willing")), + relevant_notes: Text(String::from("Willing to take the ring")), + final_agreement: Text(String::from("yes")), + registration: Text(String::from("later")), + health_form: Text(String::from("yes")), + file: None, + } + } + + #[test] + async fn test_nc_post() { + let form = form(); + assert!(!form.first_name.is_empty()); + let map = HashMap::from(&form); + let res = store_form(map).await; + match res { + Ok(_) => assert!(true, "passed storing test"), + Err(e) => assert!(false, "Failed storing test: {e}"), + } + } + + #[test] + async fn test_email() { + let form = form(); + assert!(!form.first_name.is_empty()); + match form.prepare_email() { + Ok(m) => { + assert!(crate::email::send_email(m).await.is_ok()) + } + Err(e) => assert!(false, "Failed emailing test: {e}"), + } } - - let multi = if file_exists { - let filebody = fs::read(path.clone().unwrap_or_default()); - let content_type = ContentType::parse("image/jpg").unwrap(); - let attachment = Attachment::new(filename).body(filebody.unwrap(), content_type); - log::info!("{:?}", attachment); - MultiPart::mixed() - .singlepart(SinglePart::html(email.to_string())) - .singlepart(attachment) - } else { - MultiPart::alternative_plain_html(String::from("Testing"), email.to_string()) - }; - - if let Ok(m) = Message::builder() - .from( - "TFC ADMIN " - .parse() - .unwrap(), - ) - .to("Chris Cochrun ".parse().unwrap()) - .to("Ethan Rose ".parse().unwrap()) - .subject(email_subject) - .multipart(multi) - { - let sender = SmtpTransport::relay("mail.tfcconnection.org") - .ok() - .unwrap() - .credentials(Credentials::new( - "no-reply@mail.tfcconnection.org".to_owned(), - "r9f36mNZFtiW4f".to_owned(), - )) - .authentication(vec![Mechanism::Plain]) - .build(); - match sender.send(&m) { - Ok(res) => log::info!("{:?}", res), - Err(e) => log::info!("{e}"), - } - } else { - log::info!("Email incorrect"); - } - - HttpResponse::Ok().body("thankyou") } diff --git a/src/api/mt_parent_form.rs b/src/api/mt_parent_form.rs new file mode 100644 index 0000000..b940e40 --- /dev/null +++ b/src/api/mt_parent_form.rs @@ -0,0 +1,241 @@ +use std::{ + collections::{BTreeMap, HashMap}, + fs, +}; + +use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm}; +use actix_web::{post, web, HttpResponse}; +use color_eyre::{eyre::eyre, Result}; +use lettre::{ + message::{header::ContentType, Attachment, MultiPart, SinglePart}, + Message, +}; +use maud::{html, Markup, PreEscaped, DOCTYPE}; +use reqwest::Client; +use serde_json::json; +use sqlx::SqliteConnection; +use tracing::{error, info}; + +#[derive(Debug, MultipartForm)] +struct MtParentForm { + #[multipart(rename = "firstname")] + first_name: Text, + #[multipart(rename = "lastname")] + last_name: Text, + email: Text, + #[multipart(rename = "studentfirstname")] + student_first_name: Text, + #[multipart(rename = "studentlastname")] + student_last_name: Text, + authority: Text, + positive: Text, + negative: Text, + #[multipart(rename = "family-relation")] + family: Text, + #[multipart(rename = "previous-trip-info")] + previous_trip: Text, + #[multipart(rename = "trip-feelings")] + feelings: Text, + #[multipart(rename = "extra-info")] + extra_info: Text, +} + +impl From<&MtParentForm> for HashMap { + fn from(form: &MtParentForm) -> Self { + let mut map = HashMap::new(); + map.insert(167, format!("{} {}", form.first_name.0, form.last_name.0)); + map.insert( + 168, + format!("{} {}", form.student_first_name.0, form.student_last_name.0), + ); + map.insert(169, form.authority.0.clone()); + map.insert(170, form.positive.0.clone()); + map.insert(171, form.negative.0.clone()); + map.insert(172, form.family.0.clone()); + map.insert(173, form.previous_trip.0.clone()); + map.insert(174, form.feelings.0.clone()); + map.insert(175, form.extra_info.0.clone()); + map.insert(176, form.email.0.clone()); + map + } +} + +impl MtParentForm { + async fn build_email(&self) -> Markup { + html! { + (DOCTYPE) + meta charset="utf-8"; + html { + head { + title { (self.first_name.0) " " (self.last_name.0) " filled out a parent form for " (self.student_first_name.0) " " (self.student_last_name.0) "!" } + style { + "table { border-collapse: collapse; width: 100% }" + "td, th { padding: 8px }" + "td { text-align: left; width: 70%; word-wrap: break-word }" + "th { text-align: right; border-right: 1px solid #ddd }" + "tr { border-bottom: 1px solid #ddd }" + "h1 { text-align: center }" + } + } + body { + h1 { "Parent reference form for " (self.student_first_name.0) " " (self.student_last_name.0) "!" } + hr; + table { + tr { + th { "Name" } + td { (self.first_name.0) " " (self.last_name.0) } + } + tr { + th { "Student" } + td { (self.student_first_name.0) " " (self.student_last_name.0) } + } + tr { + th { "Email" } + td { (self.email.0) } + } + tr { + th { "Authority" } + td { (self.authority.0) } + } + tr { + th { "Positive characteristics" } + td { (self.positive.0) } + } + tr { + th { "Negative characteristics" } + td { (self.negative.0) } + } + tr { + th { "Family Relations" } + td { (self.family.0) } + } + tr { + th { "Previous Trip" } + td { (self.previous_trip.0) } + } + tr { + th { "Trip Feelings" } + td { (self.feelings.0) } + } + tr { + th { "Other Relevant Info" } + td { (self.extra_info.0) } + } + } + } + } + } + } + + async fn store_form(&self) -> Result<()> { + let client = Client::new(); + let map = HashMap::from(self); + let mut json = HashMap::new(); + json.insert("data", map); + + let link = r#"https://staff.tfcconnection.org/apps/tables/#/table/14/row/757"#; + let res = client + .post("https://staff.tfcconnection.org/ocs/v2.php/apps/tables/api/2/tables/14/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; + if res.status().is_success() { + let res = res.text().await.unwrap(); + Ok(()) + } else { + Err(eyre!( + "Problem in storing data: {:?}", + res.error_for_status() + )) + } + } + + async fn send_email(&self) -> Result<()> { + let first = self.student_first_name.clone(); + let last = self.student_last_name.clone(); + let email_subject = format!("Parent reference form for {} {}!", first, last); + info!("{first} {last} parent reference form!"); + let email = self.build_email().await; + let email = SinglePart::html(email.into_string()); + + if let Ok(m) = Message::builder() + .from( + "TFC ADMIN " + .parse() + .unwrap(), + ) + .to("Chris Cochrun ".parse().unwrap()) + .to("Ethan Rose ".parse().unwrap()) + .subject(email_subject) + .singlepart(email) + { + crate::email::send_email(m).await + } else { + Err(eyre!("Email incorrect")) + } + } +} + +#[post("/api/mt-parent-form")] +pub async fn mt_parent_form(MultipartForm(form): MultipartForm) -> HttpResponse { + match form.store_form().await { + Ok(_) => info!("Successfully sent form to nextcloud!"), + Err(e) => error!("There was an erroring sending form to nextcloud: {e}"), + } + match form.send_email().await { + Ok(_) => info!("Successfully sent email"), + Err(e) => error!("There was an error sending the email: {e}"), + } + HttpResponse::Ok().body("thankyou") +} + +#[cfg(test)] +mod test { + use actix_web::test; + use pretty_assertions::assert_eq; + use sqlx::Connection; + use tracing::debug; + + use super::*; + + fn form() -> MtParentForm { + MtParentForm { + first_name: Text(String::from("Bilbo")), + last_name: Text(String::from("Braggins")), + student_first_name: Text(String::from("Frodo")), + student_last_name: Text(String::from("Braggins")), + email: Text(String::from("biblo@hobbits.us")), + authority: Text(String::from("Uncle")), + positive: Text(String::from("Nimble and brave")), + negative: Text(String::from("Small")), + family: Text(String::from("Such a strutter")), + previous_trip: Text(String::from("Super")), + feelings: Text(String::from("Very")), + extra_info: Text(String::from("Willing to take the ring")), + } + } + + #[test] + async fn test_nc_post() { + let form = form(); + assert!(!form.first_name.is_empty()); + let res = form.store_form().await; + match res { + Ok(_) => assert!(true, "passed storing test"), + Err(e) => assert!(false, "Failed storing test: {e}"), + } + } + + #[test] + async fn test_email() { + let mut form = form(); + assert!(!form.first_name.is_empty()); + match form.send_email().await { + Ok(_) => assert!(true, "passed emailing test"), + Err(e) => assert!(false, "Failed emailing test: {e}"), + } + } +} diff --git a/src/api/mt_teacher_form.rs b/src/api/mt_teacher_form.rs new file mode 100644 index 0000000..7219992 --- /dev/null +++ b/src/api/mt_teacher_form.rs @@ -0,0 +1,234 @@ +use std::{ + collections::{BTreeMap, HashMap}, + fs, +}; + +use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm}; +use actix_web::{post, web, HttpResponse}; +use color_eyre::{eyre::eyre, Result}; +use lettre::{ + message::{header::ContentType, Attachment, MultiPart, SinglePart}, + Message, +}; +use maud::{html, Markup, PreEscaped, DOCTYPE}; +use reqwest::Client; +use serde_json::json; +use sqlx::SqliteConnection; +use tracing::{error, info}; + +#[derive(Debug, MultipartForm)] +struct MtTeacherForm { + #[multipart(rename = "firstname")] + first_name: Text, + #[multipart(rename = "lastname")] + last_name: Text, + #[multipart(rename = "studentfirstname")] + student_first_name: Text, + #[multipart(rename = "studentlastname")] + student_last_name: Text, + relationship: Text, + positive: Text, + negative: Text, + attitudes: Text, + #[multipart(rename = "team-challenges")] + challenges: Text, + behavior: Text, + #[multipart(rename = "extra-info")] + extra_info: Text, +} + +impl From<&MtTeacherForm> for HashMap { + fn from(form: &MtTeacherForm) -> Self { + let mut map = HashMap::new(); + map.insert(150, format!("{} {}", form.first_name.0, form.last_name.0)); + map.insert( + 151, + format!("{} {}", form.student_first_name.0, form.student_last_name.0), + ); + map.insert(152, form.relationship.0.clone()); + map.insert(153, form.positive.0.clone()); + map.insert(154, form.negative.0.clone()); + map.insert(155, form.attitudes.0.clone()); + map.insert(156, form.challenges.0.clone()); + map.insert(157, form.extra_info.0.clone()); + map.insert(177, form.behavior.0.clone()); + map + } +} + +impl MtTeacherForm { + async fn build_email(&self) -> Markup { + html! { + (DOCTYPE) + meta charset="utf-8"; + html { + head { + title { (self.first_name.0) " " (self.last_name.0) " filled out a teacher reference form for " (self.student_first_name.0) " " (self.student_last_name.0) "!" } + style { + "table { border-collapse: collapse; width: 100% }" + "td, th { padding: 8px }" + "td { text-align: left; width: 70%; word-wrap: break-word }" + "th { text-align: right; border-right: 1px solid #ddd }" + "tr { border-bottom: 1px solid #ddd }" + "h1 { text-align: center }" + } + } + body { + h1 { "Teacher reference form for " (self.student_first_name.0) " " (self.student_last_name.0) "!" } + hr; + table { + tr { + th { "Name" } + td { (self.first_name.0) " " (self.last_name.0) } + } + tr { + th { "Student" } + td { (self.student_first_name.0) " " (self.student_last_name.0) } + } + tr { + th { "Relationship with student" } + td { (self.relationship.0) } + } + tr { + th { "Positive characteristics" } + td { (self.positive.0) } + } + tr { + th { "Negative characteristics" } + td { (self.negative.0) } + } + tr { + th { "Attitudes" } + td { (self.attitudes.0) } + } + tr { + th { "Teamwork" } + td { (self.challenges.0) } + } + tr { + th { "Behavior in school" } + td { (self.behavior.0) } + } + tr { + th { "Other Relevant Info" } + td { (self.extra_info.0) } + } + } + } + } + } + } + + async fn store_form(&self) -> Result<()> { + let client = Client::new(); + let map = HashMap::from(self); + let mut json = HashMap::new(); + json.insert("data", map); + + let link = r#"https://staff.tfcconnection.org/apps/tables/#/table/12/row/757"#; + let res = client + .post("https://staff.tfcconnection.org/ocs/v2.php/apps/tables/api/2/tables/12/rows") + .basic_auth("chris", Some("2VHeGxeC^Zf9KqFK^G@Pt!zu2q^6@b")) + .header("OCS-APIRequest", "true") + .header("Content-Type", "application/json") + .json(&json) + .send() + .await?; + if res.status().is_success() { + let res = res.text().await.unwrap(); + Ok(()) + } else { + Err(eyre!( + "Problem in storing data: {:?}", + res.error_for_status() + )) + } + } + + async fn send_email(&mut self) -> Result<()> { + let first = self.student_first_name.clone(); + let last = self.student_last_name.clone(); + let email_subject = format!("Teacher reference form for {} {}!", first, last); + info!("{first} {last} teacher reference form!"); + let email = self.build_email().await; + let email = SinglePart::html(email.into_string()); + + if let Ok(m) = Message::builder() + .from( + "TFC ADMIN " + .parse() + .unwrap(), + ) + .to("Chris Cochrun ".parse().unwrap()) + .to("Ethan Rose ".parse().unwrap()) + .subject(email_subject) + .singlepart(email) + { + crate::email::send_email(m).await + } else { + Err(eyre!("Email incorrect")) + } + } +} + +#[post("/api/mt-teacher-form")] +pub async fn mt_teacher_form( + MultipartForm(mut form): MultipartForm, +) -> HttpResponse { + match form.store_form().await { + Ok(_) => info!("Successfully sent form to nextcloud!"), + Err(e) => error!("There was an erroring sending form to nextcloud: {e}"), + } + match form.send_email().await { + Ok(_) => info!("Successfully sent email"), + Err(e) => error!("There was an error sending the email: {e}"), + } + HttpResponse::Ok().body("thankyou") +} + +#[cfg(test)] +mod test { + use actix_web::test; + use pretty_assertions::assert_eq; + use sqlx::Connection; + use tracing::debug; + + use super::*; + + fn form() -> MtTeacherForm { + MtTeacherForm { + first_name: Text(String::from("Bilbo")), + last_name: Text(String::from("Braggins")), + student_first_name: Text(String::from("Frodo")), + student_last_name: Text(String::from("Braggins")), + relationship: Text(String::from("Uncle")), + positive: Text(String::from("Nimble and brave")), + negative: Text(String::from("Small")), + attitudes: Text(String::from("Lighthearted")), + challenges: Text(String::from("Willing")), + behavior: Text(String::from("Good")), + extra_info: Text(String::from("Willing to take the ring")), + } + } + + #[test] + async fn test_nc_post() { + let form = form(); + assert!(!form.first_name.is_empty()); + let res = form.store_form().await; + match res { + Ok(_) => assert!(true, "passed storing test"), + Err(e) => assert!(false, "Failed storing test: {e}"), + } + } + + #[test] + async fn test_email() { + let mut form = form(); + assert!(!form.first_name.is_empty()); + match form.send_email().await { + Ok(_) => assert!(true, "passed emailing test"), + Err(e) => assert!(false, "Failed emailing test: {e}"), + } + } +} diff --git a/src/email.rs b/src/email.rs new file mode 100644 index 0000000..6ce5a35 --- /dev/null +++ b/src/email.rs @@ -0,0 +1,30 @@ +use color_eyre::Result; +use lettre::{ + transport::smtp::authentication::{Credentials, Mechanism}, + Message, SmtpTransport, Transport, +}; +use tracing::{error, info}; + +pub async fn send_email(message: Message) -> Result<()> { + let sender = SmtpTransport::relay("mail.tfcconnection.org") + .ok() + .unwrap() + .credentials(Credentials::new( + "no-reply@mail.tfcconnection.org".to_owned(), + "r9f36mNZFtiW4f".to_owned(), + )) + .authentication(vec![Mechanism::Plain]) + .build(); + + match sender.send(&message) { + Ok(res) => { + let res: String = res.message().collect(); + info!( + "Successfully sent email to server with this response: {:?}", + res + ) + } + Err(e) => error!("There was an error sending the email: {e}"), + } + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index d98546b..534c887 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,37 +1,105 @@ mod api; +pub mod email; +use actix_files::Files; use actix_multipart::form::tempfile::TempFileConfig; -use actix_web::{middleware, App, HttpServer}; +use actix_web::body::MessageBody; +use actix_web::dev::{ServiceRequest, ServiceResponse}; +use actix_web::{web, App, Error, HttpServer}; use api::camp_form::camp_form; -use api::church_form::church_form; +use api::contact::{self, contact_form}; use api::health_form::health_form; use api::local_trip_form::local_form; use api::mt_form::mt_form; -use api::parent_form::parent_form; -use api::teacher_form::teacher_form; +use api::{ + mt_church_form::mt_church_form, mt_parent_form::mt_parent_form, + mt_teacher_form::mt_teacher_form, +}; +use color_eyre::eyre::Context; +use color_eyre::Result; +use sqlx::{Connection, SqliteConnection}; +use tracing::level_filters::LevelFilter; +use tracing::{info, Span}; +use tracing_actix_web::{RootSpanBuilder, TracingLogger}; +use tracing_appender::rolling::{RollingFileAppender, Rotation}; +use tracing_subscriber::{layer::SubscriberExt, EnvFilter, Layer}; + +pub struct DomainRootSpanBuilder; + +impl RootSpanBuilder for DomainRootSpanBuilder { + fn on_request_start(request: &ServiceRequest) -> Span { + let method = request.method(); + let info = request.connection_info(); + let ip = info.realip_remote_addr().expect("hi"); + let location = request.path(); + info!(?method, ip, location); + tracing_actix_web::root_span!(request) + + // let client_id: &str = todo!("Somehow extract it from the authorization header"); + } + + fn on_request_end(_span: Span, _outcome: &Result, Error>) {} +} #[actix_web::main] async fn main() -> std::io::Result<()> { - env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); + let timer = + tracing_subscriber::fmt::time::ChronoLocal::new("%Y-%m-%d_%I:%M:%S%.6f %P".to_owned()); + let logfile = RollingFileAppender::builder() + .rotation(Rotation::DAILY) + .filename_prefix("api") + .filename_suffix("log") + .build("/tmp/tfcsite") + .expect("Shouldn't"); - log::info!("creating temporary upload directory"); - std::fs::create_dir_all("./tmp")?; + let filter = EnvFilter::builder() + .with_default_directive(LevelFilter::WARN.into()) + .parse_lossy("tfcapi=debug"); + let logfile_layer = tracing_subscriber::fmt::layer() + .with_writer(logfile) + .with_line_number(true) + .with_level(true) + .with_target(true) + .with_ansi(false) + .with_timer(timer.clone()); + let stdout_layer = tracing_subscriber::fmt::layer() + .pretty() + .with_line_number(true) + .with_target(true) + .with_timer(timer) + .with_filter(filter); + let filter = EnvFilter::builder() + .with_default_directive(LevelFilter::WARN.into()) + .parse_lossy("tfcapi=debug"); + let subscriber = tracing_subscriber::registry() + .with(logfile_layer.with_filter(filter).and_then(stdout_layer)); + let _ = tracing::subscriber::set_global_default(subscriber).wrap_err("Tracing broked"); - log::info!("starting HTTP server at http://localhost:4242"); + std::fs::create_dir_all("/tmp/tfcsite")?; - HttpServer::new(|| { + info!("starting HTTP server at http://localhost:4242"); + + let conn = SqliteConnection::connect("sqlite://./data.db") + .await + .expect("Couldn't connect sqlite db"); + let data = web::Data::new(conn); + + HttpServer::new(move || { App::new() - .wrap(middleware::Logger::default()) - .app_data(TempFileConfig::default().directory("./tmp")) + .app_data(data.clone()) + .wrap(TracingLogger::::new()) + .app_data(TempFileConfig::default().directory("/tmp/tfcsite")) .service(mt_form) .service(health_form) - .service(parent_form) - .service(teacher_form) - .service(church_form) + .service(mt_parent_form) + .service(mt_teacher_form) + .service(mt_church_form) .service(local_form) .service(camp_form) + .service(contact_form) + .service(Files::new("/", "./public").index_file("index.html")) }) - .bind(("127.0.0.1", 4242))? + .bind(("localhost", 4242))? .workers(2) .run() .await diff --git a/src/testing.json b/src/testing.json new file mode 100644 index 0000000..7211dfa --- /dev/null +++ b/src/testing.json @@ -0,0 +1,2 @@ + +[{\"id\":6,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Abigail Reardon\"},{\"columnId\":38,\"value\":\"Hannah Reardon\"},{\"columnId\":39,\"value\":\"2010-10-29\"},{\"columnId\":40,\"value\":\"914 Brown Ave., #14\"},{\"columnId\":41,\"value\":\"Downs\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67437\"},{\"columnId\":44,\"value\":\"712-291-0790\"},{\"columnId\":46,\"value\":\"Hannah Reardon 712-291-0790\"},{\"columnId\":47,\"value\":\"Carl Fugate\"},{\"columnId\":48,\"value\":\"Beloit\"},{\"columnId\":49,\"value\":\"785-738-2246\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare\"},{\"columnId\":52,\"value\":\"110128313\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":56,\"value\":\"NA\"},{\"columnId\":57,\"value\":\"NA\"},{\"columnId\":58,\"value\":\"Exercise-induced asthma. She will bring an inhaler to events. \"},{\"columnId\":59,\"value\":\"2011-01-19\"},{\"columnId\":60,\"value\":\"NA\"},{\"columnId\":61,\"value\":\"NA\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":7,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Alyssa Dudley \"},{\"columnId\":38,\"value\":\"Megan Anderson\"},{\"columnId\":39,\"value\":\"2005-10-11\"},{\"columnId\":40,\"value\":\"211 east jackson\"},{\"columnId\":41,\"value\":\"Burr oak\"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"66936\"},{\"columnId\":44,\"value\":\"785-534-7991\"},{\"columnId\":46,\"value\":\"Megan Anderson 7855347991\"},{\"columnId\":47,\"value\":\"Kerri Adams\"},{\"columnId\":48,\"value\":\"Beloit KS\"},{\"columnId\":49,\"value\":\"7857382246\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"PNC, sulfa, IBprophen\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":8,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Quentin Rice\"},{\"columnId\":38,\"value\":\"Megan Anderson\"},{\"columnId\":39,\"value\":\"2008-04-15\"},{\"columnId\":40,\"value\":\"211 east jackson\"},{\"columnId\":41,\"value\":\"Burr oak \"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"66936\"},{\"columnId\":44,\"value\":\"785-534-7991\"},{\"columnId\":46,\"value\":\"Megan Anderson 7855347991\"},{\"columnId\":47,\"value\":\"Kerri Adams\"},{\"columnId\":48,\"value\":\"Beloit ks\"},{\"columnId\":49,\"value\":\"7857382246\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":9,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Shiloh Could bett\"},{\"columnId\":38,\"value\":\"Jennifer Corbett\"},{\"columnId\":39,\"value\":\"2007-08-03\"},{\"columnId\":40,\"value\":\"122 n main st\"},{\"columnId\":41,\"value\":\"Kensington \"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"(785) 282-1072\"},{\"columnId\":46,\"value\":\"Lorin (dad) (785) 476-8026\"},{\"columnId\":47,\"value\":\"Smith county family practice\"},{\"columnId\":48,\"value\":\"Smith center\"},{\"columnId\":49,\"value\":\"785-282-6934\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Kancare\"},{\"columnId\":52,\"value\":\"5551212\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-08-21\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":10,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Leanka van der Linden\"},{\"columnId\":38,\"value\":\"Ilze van der Linden\"},{\"columnId\":39,\"value\":\"2008-06-27\"},{\"columnId\":40,\"value\":\"122 East Oak Street\"},{\"columnId\":41,\"value\":\"Kensington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"785-476-8035\"},{\"columnId\":46,\"value\":\"Bennie van der Linden 785-476-8088\"},{\"columnId\":47,\"value\":\"Dr. Wiehl\"},{\"columnId\":48,\"value\":\"Smith Center, KS\"},{\"columnId\":49,\"value\":\"785-282-6834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield of Kansas\"},{\"columnId\":52,\"value\":\"XSB852842920\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"None\"},{\"columnId\":59,\"value\":\"2019-05-06\"},{\"columnId\":60,\"value\":\"None\"},{\"columnId\":61,\"value\":\"None\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":11,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Kaydee Bolt\"},{\"columnId\":38,\"value\":\"Lisa Bolt\"},{\"columnId\":39,\"value\":\"2010-12-15\"},{\"columnId\":40,\"value\":\"503, West Logan St\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":46,\"value\":\"Tyler Bolt 7854303769\"},{\"columnId\":47,\"value\":\"Lindsey Johnson\"},{\"columnId\":48,\"value\":\"Logan\"},{\"columnId\":49,\"value\":\"6897464\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS\"},{\"columnId\":52,\"value\":\"45057\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2011-12-23\"},{\"columnId\":60,\"value\":\"None\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":12,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Jaidon Allen\"},{\"columnId\":38,\"value\":\"Michele Boeve\"},{\"columnId\":39,\"value\":\"2007-02-01\"},{\"columnId\":40,\"value\":\"902 Prospect Street \"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":46,\"value\":\"Ron Boeve 7855437550\"},{\"columnId\":47,\"value\":\"Robin Burwell\"},{\"columnId\":48,\"value\":\"Phillipsburg \"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"UnitedHealthCare\"},{\"columnId\":52,\"value\":\"00102266743\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":13,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Jayla Traxler\"},{\"columnId\":38,\"value\":\"Crystal White \"},{\"columnId\":39,\"value\":\"2010-02-21\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"7\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":14,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Jayla Traxler\"},{\"columnId\":38,\"value\":\"Crystal White \"},{\"columnId\":39,\"value\":\"2010-02-21\"},{\"columnId\":40,\"value\":\"204 E, Church St \"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":46,\"value\":\"Brandon Traxler 7853028465\"},{\"columnId\":47,\"value\":\"Dr. Wisinger\"},{\"columnId\":48,\"value\":\"Phillipsburg, KS\"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Allied \"},{\"columnId\":52,\"value\":\"ZZ6463236\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2022-07-15\"},{\"columnId\":60,\"value\":\"None \"},{\"columnId\":61,\"value\":\"No \"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":15,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Buster States\"},{\"columnId\":38,\"value\":\"Carolyn States\"},{\"columnId\":39,\"value\":\"2009-04-03\"},{\"columnId\":40,\"value\":\"2556 W 1600 Rd\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":44,\"value\":\"785-543-1993\"},{\"columnId\":46,\"value\":\"Sam States 785-543-8331\"},{\"columnId\":47,\"value\":\"Lindsey Johnson\"},{\"columnId\":48,\"value\":\"Logan\"},{\"columnId\":49,\"value\":\"7856897464\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare \"},{\"columnId\":52,\"value\":\"937619392\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":16,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"XANDER Sherwood\"},{\"columnId\":38,\"value\":\"julie Sherwood\"},{\"columnId\":39,\"value\":\"2009-05-07\"},{\"columnId\":40,\"value\":\"71598 hwy 46\"},{\"columnId\":41,\"value\":\"Oxford\"},{\"columnId\":42,\"value\":\"NE\"},{\"columnId\":43,\"value\":\"68967\"},{\"columnId\":44,\"value\":\"308-991-1958\"},{\"columnId\":45,\"value\":\"308-440-1318\"},{\"columnId\":46,\"value\":\"Carol wells 3082931198\"},{\"columnId\":47,\"value\":\"Goldfish\"},{\"columnId\":48,\"value\":\"Kearney \"},{\"columnId\":49,\"value\":\"3088652263\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Medica\"},{\"columnId\":52,\"value\":\"930240415\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2021-06-17\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":17,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Connor Engelke\"},{\"columnId\":38,\"value\":\"Carmen Engelke\"},{\"columnId\":39,\"value\":\"2008-12-05\"},{\"columnId\":40,\"value\":\"22092 E Rd\"},{\"columnId\":41,\"value\":\"Cedar\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67628\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":47,\"value\":\"Jennifer Hamons\"},{\"columnId\":48,\"value\":\"Phillipsburg \"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Providers Care\"},{\"columnId\":52,\"value\":\"T17700052\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin\"},{\"columnId\":58,\"value\":\"Absence epilepsy. Takes depakote \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":18,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Emma Traxler \"},{\"columnId\":38,\"value\":\"Crystal White\"},{\"columnId\":39,\"value\":\"2008-10-24\"},{\"columnId\":40,\"value\":\"204 east church street\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"67647\"},{\"columnId\":46,\"value\":\"Brandon Traxler 785\"},{\"columnId\":47,\"value\":\"Dr.Wisinger\"},{\"columnId\":48,\"value\":\"Phillipsburg, kansas\"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Allied\"},{\"columnId\":52,\"value\":\"ZZ6463236\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2020-08-01\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":19,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Coda Ashmore\"},{\"columnId\":38,\"value\":\"Jessica Ashmore\"},{\"columnId\":39,\"value\":\"2011-06-30\"},{\"columnId\":40,\"value\":\"408 W. Logan St\"},{\"columnId\":41,\"value\":\"LOGAN\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":44,\"value\":\"785-689-8201\"},{\"columnId\":46,\"value\":\"Colton Ashmore 1-785-689-8055\"},{\"columnId\":47,\"value\":\"Phillips County Medical Clinic\"},{\"columnId\":48,\"value\":\"Phillipsburg\"},{\"columnId\":49,\"value\":\"785-543-5211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Aetna\"},{\"columnId\":52,\"value\":\"00103571143\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"No\"},{\"columnId\":59,\"value\":\"2022-07-01\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":20,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Gavin Gottschalk\"},{\"columnId\":38,\"value\":\"Tanya Gottschalk\"},{\"columnId\":39,\"value\":\"2008-07-14\"},{\"columnId\":40,\"value\":\"603 w commercial st\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":46,\"value\":\"Clint Gottschalk \"},{\"columnId\":47,\"value\":\"Phillips county medical clinic\"},{\"columnId\":48,\"value\":\"Phillipsburg\"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS\"},{\"columnId\":52,\"value\":\"XSB825939969\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":21,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Gavin Gottschalk\"},{\"columnId\":38,\"value\":\"Tanya Gottschalk\"},{\"columnId\":39,\"value\":\"2008-07-14\"},{\"columnId\":40,\"value\":\"603 w commercial st\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":46,\"value\":\"Clint Gottschalk \"},{\"columnId\":47,\"value\":\"Phillips county medical clinic\"},{\"columnId\":48,\"value\":\"Phillipsburg\"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS\"},{\"columnId\":52,\"value\":\"XSB825939969\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":22,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"austin parsons\"},{\"columnId\":38,\"value\":\"julie skinner\"},{\"columnId\":39,\"value\":\"2008-03-21\"},{\"columnId\":40,\"value\":\"308 east spruce street\"},{\"columnId\":41,\"value\":\"orlenas\"},{\"columnId\":42,\"value\":\"Nebraska\"},{\"columnId\":43,\"value\":\"68966\"},{\"columnId\":44,\"value\":\"308-920-2705\"},{\"columnId\":46,\"value\":\"melissa engleamn 3082172429\"},{\"columnId\":48,\"value\":\"alma cloinak\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-03-21\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":23,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Hannah Nelson\"},{\"columnId\":38,\"value\":\"Marlene Nelson\"},{\"columnId\":39,\"value\":\"2008-08-21\"},{\"columnId\":40,\"value\":\"605 S Main\"},{\"columnId\":41,\"value\":\"Kensington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"785-514-1149\"},{\"columnId\":46,\"value\":\"Lance Nelson 785-614-1454\"},{\"columnId\":47,\"value\":\"Dr Haack\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"785-282-6834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS\"},{\"columnId\":52,\"value\":\"XSB81504895\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penecillin and Sulfa medications - HIVES\"},{\"columnId\":57,\"value\":\"Topical itch relief\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":24,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Gideon Nelson\"},{\"columnId\":38,\"value\":\"Marlene Nelson\"},{\"columnId\":39,\"value\":\"2010-07-09\"},{\"columnId\":40,\"value\":\"605 S Main\"},{\"columnId\":41,\"value\":\"Kensington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"785-614-1149\"},{\"columnId\":46,\"value\":\"Lance Nelson 785-614-1454\"},{\"columnId\":47,\"value\":\"Dr. Overmiller\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"785-282-6834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS\"},{\"columnId\":52,\"value\":\"XSB815048695\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":25,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"William Jessup\"},{\"columnId\":38,\"value\":\"Roy Jessup\"},{\"columnId\":39,\"value\":\"2008-03-25\"},{\"columnId\":40,\"value\":\"169 6th st\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":46,\"value\":\"Bethany Jessup 785-953-0421\"},{\"columnId\":47,\"value\":\"Dr Birney\"},{\"columnId\":48,\"value\":\"Holdrege NE\"},{\"columnId\":49,\"value\":\"3089954431\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield \"},{\"columnId\":52,\"value\":\"R59054116\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-08-08\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":26,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Hayley Dougherty\"},{\"columnId\":38,\"value\":\"Becky Dougherty\"},{\"columnId\":39,\"value\":\"2007-02-05\"},{\"columnId\":40,\"value\":\"634 7th St\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":46,\"value\":\"Levi Dougherty 7853020653\"},{\"columnId\":47,\"value\":\"Dr Beth Oller\"},{\"columnId\":48,\"value\":\"Stockton \"},{\"columnId\":49,\"value\":\"7854342622\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blu cross Blue Shield\"},{\"columnId\":52,\"value\":\"C3H89623995\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":27,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Taden Gottschalk\"},{\"columnId\":38,\"value\":\"Trent and Ashley Gottschalk\"},{\"columnId\":39,\"value\":\"2009-02-24\"},{\"columnId\":40,\"value\":\"2950 west 1300 Rd\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":44,\"value\":\"785-259-6611\"},{\"columnId\":45,\"value\":\"785-567-7113\"},{\"columnId\":46,\"value\":\"Sandra Gottschalk 795-567-7039\"},{\"columnId\":47,\"value\":\"Logan clinic\"},{\"columnId\":48,\"value\":\"Logan\"},{\"columnId\":49,\"value\":\"785-689-7464\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Aetna\"},{\"columnId\":52,\"value\":\"737493 045 00001\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":56,\"value\":\"None\"},{\"columnId\":57,\"value\":\"Benadryl or cortisone cream\"},{\"columnId\":58,\"value\":\"None\"},{\"columnId\":59,\"value\":\"2020-08-27\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":28,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Abigail Reardon\"},{\"columnId\":38,\"value\":\"Hannah Reardon\"},{\"columnId\":39,\"value\":\"2010-10-29\"},{\"columnId\":40,\"value\":\"914 Brown Ave, #14\"},{\"columnId\":41,\"value\":\"Downs\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67437\"},{\"columnId\":44,\"value\":\"712-291-0790\"},{\"columnId\":45,\"value\":\"712-291-0790\"},{\"columnId\":46,\"value\":\"Jeff Reardon 7122910790\"},{\"columnId\":47,\"value\":\"Carl Fugate\"},{\"columnId\":48,\"value\":\"Beloit, KS\"},{\"columnId\":49,\"value\":\"785-738-2246\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare\"},{\"columnId\":52,\"value\":\"00110128313\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"Exercise-induced asthma. Will bring an inhaler.\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":29,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Norah Ellenz\"},{\"columnId\":38,\"value\":\"Kim Ellenz\"},{\"columnId\":39,\"value\":\"2009-09-01\"},{\"columnId\":40,\"value\":\"401 State St\"},{\"columnId\":41,\"value\":\"Tipton\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67485\"},{\"columnId\":44,\"value\":\"785-531-2622\"},{\"columnId\":45,\"value\":\"785-545-5994\"},{\"columnId\":46,\"value\":\"Daron Ellenz 7855455122\"},{\"columnId\":47,\"value\":\"Carl Fugate\"},{\"columnId\":48,\"value\":\"Beloit, Ks\"},{\"columnId\":49,\"value\":\"7857382266\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BC\\/BS\"},{\"columnId\":52,\"value\":\"Xsb800354502\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other Sulfa\"},{\"columnId\":59,\"value\":\"2018-05-05\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":30,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Breanna Brown\"},{\"columnId\":38,\"value\":\"Tamara Drullinger\"},{\"columnId\":39,\"value\":\"2009-10-16\"},{\"columnId\":40,\"value\":\"517 S Madison\"},{\"columnId\":41,\"value\":\"Smith Center\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66967\"},{\"columnId\":44,\"value\":\"7853028469\"},{\"columnId\":45,\"value\":\"7853028470\"},{\"columnId\":46,\"value\":\"Richard Drullinger Jr 7853028470\"},{\"columnId\":47,\"value\":\"Smith County Family Practice\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Sunflower Health\"},{\"columnId\":52,\"value\":\"00103595104\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"depression\"},{\"columnId\":59,\"value\":\"2020-10-15\"},{\"columnId\":60,\"value\":\"Morning and bed meds, for depression and sleep\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":31,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"JaNiyah Porter\"},{\"columnId\":38,\"value\":\"Ashley Dodds\"},{\"columnId\":39,\"value\":\"2011-02-22\"},{\"columnId\":40,\"value\":\"101 South Kansas \"},{\"columnId\":41,\"value\":\"Kensington \"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"7854767425\"},{\"columnId\":46,\"value\":\"Gail Dodds 7854768067\"},{\"columnId\":47,\"value\":\"Dr. Kuhmann\"},{\"columnId\":48,\"value\":\"Smith Center \"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"KanCare\"},{\"columnId\":52,\"value\":\"000103220079\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2014-01-04\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":32,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Isaiah Bohnert\"},{\"columnId\":38,\"value\":\"Diana Benjamin\"},{\"columnId\":39,\"value\":\"2006-04-26\"},{\"columnId\":40,\"value\":\"211 east jackson\"},{\"columnId\":41,\"value\":\"Burr oak\"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"66936\"},{\"columnId\":44,\"value\":\"7855347991\"},{\"columnId\":45,\"value\":\"7855347991\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":33,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Noah Carver\"},{\"columnId\":38,\"value\":\"Heather & Adam Carver\"},{\"columnId\":39,\"value\":\"2007-05-10\"},{\"columnId\":40,\"value\":\"501 Heather Street\"},{\"columnId\":41,\"value\":\"Burlington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66839\"},{\"columnId\":44,\"value\":\"620-364-6713\"},{\"columnId\":46,\"value\":\"Marcia Taylor 620-330-7721\"},{\"columnId\":47,\"value\":\"Dr. Cupp\"},{\"columnId\":48,\"value\":\"Scott City, KS\"},{\"columnId\":49,\"value\":\"620-872-2187\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"ProviDRs Care Network\"},{\"columnId\":52,\"value\":\"T11100203\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"plants \"},{\"columnId\":56,\"value\":\"Noah will get itchy when he is in the grass too long. \"},{\"columnId\":59,\"value\":\"2020-07-15\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":34,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Abigail Massey\"},{\"columnId\":38,\"value\":\"Sophie Massey\"},{\"columnId\":39,\"value\":\"2006-09-28\"},{\"columnId\":40,\"value\":\"376 Madison 6415\"},{\"columnId\":41,\"value\":\"Huntsville\"},{\"columnId\":42,\"value\":\"AR\"},{\"columnId\":43,\"value\":\"72740\"},{\"columnId\":44,\"value\":\"479 301 5831\"},{\"columnId\":45,\"value\":\"479 325 3037\"},{\"columnId\":46,\"value\":\"Sophie Massey 479 325 3037\"},{\"columnId\":47,\"value\":\"Sophie\"},{\"columnId\":48,\"value\":\"Massey\"},{\"columnId\":49,\"value\":\"479 325 3037\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Medicaid ARKids 1st\"},{\"columnId\":52,\"value\":\"3150700201\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":35,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Corbin Keas\"},{\"columnId\":38,\"value\":\"Chris & Caroline Keas\"},{\"columnId\":39,\"value\":\"2009-01-14\"},{\"columnId\":40,\"value\":\"508 S Broadway\"},{\"columnId\":41,\"value\":\"Plainville\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67663\"},{\"columnId\":44,\"value\":\"785-737-3899\"},{\"columnId\":46,\"value\":\"Diane Hrabe 785-737-3939\"},{\"columnId\":47,\"value\":\"Daniel Sanchez\"},{\"columnId\":48,\"value\":\"Plainville\"},{\"columnId\":49,\"value\":\"785-434-2622\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield of Kansas\"},{\"columnId\":52,\"value\":\"XSB834277854\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":56,\"value\":\"Some Seasonal\"},{\"columnId\":58,\"value\":\"No\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"none\"},{\"columnId\":61,\"value\":\"He'll have a great time helping!\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":36,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Case Ashmore\"},{\"columnId\":38,\"value\":\"Elsie Parks\"},{\"columnId\":39,\"value\":\"2008-04-13\"},{\"columnId\":40,\"value\":\"511 N Mill\"},{\"columnId\":41,\"value\":\"Logan\"},{\"columnId\":42,\"value\":\"KANSAS\"},{\"columnId\":43,\"value\":\"67646\"},{\"columnId\":44,\"value\":\"7856898210\"},{\"columnId\":45,\"value\":\"7856898314\"},{\"columnId\":46,\"value\":\"Jim Ashmore 7856501685\"},{\"columnId\":47,\"value\":\"Dr. Buckle\"},{\"columnId\":48,\"value\":\"Hays Kansas \"},{\"columnId\":49,\"value\":\"7856232360\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross\\\\Blue Shield\"},{\"columnId\":52,\"value\":\"XSB879079694\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"Slight anxiety \"},{\"columnId\":59,\"value\":\"2020-08-06\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":37,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Carsen Meitl\"},{\"columnId\":38,\"value\":\"Jamie Mccreery\"},{\"columnId\":39,\"value\":\"2006-04-17\"},{\"columnId\":40,\"value\":\"25 Sunset Dr\"},{\"columnId\":41,\"value\":\"Phillipsburg\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7856560361\"},{\"columnId\":45,\"value\":\"7856560361\"},{\"columnId\":46,\"value\":\"Jamie mccreery 7856560361\"},{\"columnId\":47,\"value\":\"Plainville clinic\"},{\"columnId\":48,\"value\":\"Plainville \"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue cross and blue shield \"},{\"columnId\":52,\"value\":\"GWR319792382567\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":38,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Lorelai Murphy\"},{\"columnId\":38,\"value\":\"Stacy Murphy\"},{\"columnId\":39,\"value\":\"2006-06-29\"},{\"columnId\":40,\"value\":\"701 S 10th St.\"},{\"columnId\":41,\"value\":\"Canon City\"},{\"columnId\":42,\"value\":\"Colorado\"},{\"columnId\":43,\"value\":\"81212\"},{\"columnId\":44,\"value\":\"7193710708\"},{\"columnId\":45,\"value\":\"7193710708\"},{\"columnId\":46,\"value\":\"Sean Murphy\"},{\"columnId\":47,\"value\":\"Marc Sindler\"},{\"columnId\":48,\"value\":\"Canon City\"},{\"columnId\":49,\"value\":\"7192754137\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":51,\"value\":\"Cash Pay\"},{\"columnId\":52,\"value\":\"NA\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin\"},{\"columnId\":57,\"value\":\"Benadryl\"},{\"columnId\":58,\"value\":\"Depression and Anxiety\"},{\"columnId\":59,\"value\":\"2017-06-30\"},{\"columnId\":60,\"value\":\"Buproprion 150mg after eating breakfast and right before bed 1 tablet by mouth depression\\nBirth Control Pills after eating breakfast 1 tablet by mouth cycle regulation\\nMirtazapine 30mg right before bed HALF tablet by mouth anxiety\"},{\"columnId\":61,\"value\":\"Lorelai has made her walk with the Lord a priority in her life and has also been working hard in her mental health journey.\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":39,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Samuel Coulson\"},{\"columnId\":38,\"value\":\"Jennifer Coulson\"},{\"columnId\":39,\"value\":\"2006-09-20\"},{\"columnId\":40,\"value\":\"684 Brooke Ct\"},{\"columnId\":41,\"value\":\"Canon City\"},{\"columnId\":42,\"value\":\"CO\"},{\"columnId\":43,\"value\":\"81212\"},{\"columnId\":44,\"value\":\"7194319400\"},{\"columnId\":46,\"value\":\"John Coulson 7194319401\"},{\"columnId\":47,\"value\":\"The Pulse\"},{\"columnId\":48,\"value\":\"Canon\"},{\"columnId\":49,\"value\":\"7192047410\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare\"},{\"columnId\":52,\"value\":\"976568864\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":40,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Kallan Rothchild\"},{\"columnId\":38,\"value\":\"Shea Kasiah Rothchild\"},{\"columnId\":39,\"value\":\"2007-08-15\"},{\"columnId\":40,\"value\":\"732 N 3rd St\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-656-0020\"},{\"columnId\":45,\"value\":\"785-694-8859\"},{\"columnId\":46,\"value\":\"Glenda Rothchild 785-545-8280\"},{\"columnId\":47,\"value\":\"Dr Anna Remple\"},{\"columnId\":48,\"value\":\"Quinter, KS\"},{\"columnId\":49,\"value\":\"785-754-3333\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBSKS\"},{\"columnId\":52,\"value\":\"KSE875541078\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2020-11-26\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":41,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Eden Britton\"},{\"columnId\":38,\"value\":\"Trevor & Michele Britton \"},{\"columnId\":39,\"value\":\"2007-10-17\"},{\"columnId\":40,\"value\":\"2585 N. State Hwy 27\"},{\"columnId\":41,\"value\":\"St. Francis \"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67756\"},{\"columnId\":44,\"value\":\"7854431949\"},{\"columnId\":46,\"value\":\"Trevor Britton 7854435728\"},{\"columnId\":47,\"value\":\"Tammi Cawthra\"},{\"columnId\":48,\"value\":\"Benkleman, NE\"},{\"columnId\":49,\"value\":\"3084232204\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare\"},{\"columnId\":52,\"value\":\"948419168\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":42,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Eden Britton\"},{\"columnId\":38,\"value\":\"Trevor & Michele Britton\"},{\"columnId\":39,\"value\":\"2007-10-17\"},{\"columnId\":40,\"value\":\"2585 N. State Hwy 27\"},{\"columnId\":41,\"value\":\"St. Francis\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67756\"},{\"columnId\":44,\"value\":\"7854431949\"},{\"columnId\":46,\"value\":\"Trevor Britton 7854435728\"},{\"columnId\":47,\"value\":\"Tammi Cawthra\"},{\"columnId\":48,\"value\":\"Benkelman, NE\"},{\"columnId\":49,\"value\":\"3084232204\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare\"},{\"columnId\":52,\"value\":\"948419168\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"Adderall XR, After breakfast, 1, Adhd\"},{\"columnId\":61,\"value\":\"Love and encourage and watch her fly!\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":43,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Annabelle Malsam\"},{\"columnId\":38,\"value\":\"Stacey Malsam\"},{\"columnId\":39,\"value\":\"2006-01-26\"},{\"columnId\":40,\"value\":\"123 S 10th St.\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-743-8279\"},{\"columnId\":46,\"value\":\"Craig Malsam\"},{\"columnId\":47,\"value\":\"Kate Bailey, PA\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"1-316-619-0197\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield of Kansas\"},{\"columnId\":52,\"value\":\"XSB870941670\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2017-10-17\"},{\"columnId\":60,\"value\":\"Tri-sprintec, 8:00 AM, 1, menstrual cycle regulation\\nSprionolactone, 8:00 AM, 1, skincare\"},{\"columnId\":61,\"value\":\"Nothing that wasn't already noted on the parent form.\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":44,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Abby Busenitz \"},{\"columnId\":38,\"value\":\"Kurt Busenitz \"},{\"columnId\":39,\"value\":\"2006-06-01\"},{\"columnId\":40,\"value\":\"5596 Broadway Rd. \"},{\"columnId\":41,\"value\":\"Groveland \"},{\"columnId\":42,\"value\":\"IL\"},{\"columnId\":43,\"value\":\"61535\"},{\"columnId\":44,\"value\":\"4023223102\"},{\"columnId\":46,\"value\":\"Denna Busenitz 4023223851\"},{\"columnId\":47,\"value\":\"Stephanie K Clarke \"},{\"columnId\":48,\"value\":\"Morton \"},{\"columnId\":49,\"value\":\"3092638173\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Samaritan Ministries \"},{\"columnId\":52,\"value\":\"NA \"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2018-07-30\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":45,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Carsen Meitl\"},{\"columnId\":38,\"value\":\"Jamie McCreery\"},{\"columnId\":39,\"value\":\"2006-04-17\"},{\"columnId\":40,\"value\":\"25 Sunset Drive\"},{\"columnId\":41,\"value\":\"Phillipsburg\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7856560361\"},{\"columnId\":45,\"value\":\"7856560361\"},{\"columnId\":46,\"value\":\"jr mccreery 785-656-2090\"},{\"columnId\":47,\"value\":\"Dr. Sanchez\"},{\"columnId\":48,\"value\":\"plainville\"},{\"columnId\":49,\"value\":\"785-434-2622\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"blue cross and blue shield\"},{\"columnId\":52,\"value\":\"GWR319792382567\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":56,\"value\":\"none\"},{\"columnId\":57,\"value\":\"none\"},{\"columnId\":58,\"value\":\"asthma\"},{\"columnId\":59,\"value\":\"2017-08-18\"},{\"columnId\":60,\"value\":\"welbutrin xl morning 1 depression\"},{\"columnId\":61,\"value\":\"Nothing\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":46,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Khloe Reimer\"},{\"columnId\":38,\"value\":\"Kraig and Staci Reimer\"},{\"columnId\":39,\"value\":\"2008-03-06\"},{\"columnId\":40,\"value\":\"874 W 400 Rd\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7852080073\"},{\"columnId\":46,\"value\":\"Kraig Reimer 7855437656\"},{\"columnId\":47,\"value\":\"Dr. Wisinger\"},{\"columnId\":48,\"value\":\"Phillipsburg \"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2020-09-03\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":47,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Avery Ziegler\"},{\"columnId\":38,\"value\":\"Libby Ziegler\"},{\"columnId\":39,\"value\":\"2005-11-03\"},{\"columnId\":40,\"value\":\"137 N. 8th St.\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-650-7340\"},{\"columnId\":46,\"value\":\"Lance Ziegler 785-769-3089\"},{\"columnId\":47,\"value\":\"David Day, PA\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"ProviDRs Care Network\"},{\"columnId\":52,\"value\":\"G20800024\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":56,\"value\":\"None\"},{\"columnId\":58,\"value\":\"None\"},{\"columnId\":59,\"value\":\"2017-09-12\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":48,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Bailey Ziegler\"},{\"columnId\":38,\"value\":\"Libby Ziegler\"},{\"columnId\":39,\"value\":\"2008-09-25\"},{\"columnId\":40,\"value\":\"137 N. 8th Street\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-650-7340\"},{\"columnId\":46,\"value\":\"Lance Ziegler 785-769-3089\"},{\"columnId\":47,\"value\":\"David Day, PA\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"ProviDRs Care Network\"},{\"columnId\":52,\"value\":\"G20800024\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":56,\"value\":\"None\"},{\"columnId\":58,\"value\":\"None\"},{\"columnId\":59,\"value\":\"2020-08-06\"},{\"columnId\":60,\"value\":\"None\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":49,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Braden Harkness\"},{\"columnId\":38,\"value\":\"Trisha Harkness\"},{\"columnId\":39,\"value\":\"2005-09-28\"},{\"columnId\":40,\"value\":\"1018 Jackson St\"},{\"columnId\":41,\"value\":\"Scott City\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67871\"},{\"columnId\":44,\"value\":\"6208748034\"},{\"columnId\":45,\"value\":\"6208727033\"},{\"columnId\":46,\"value\":\"Warren Harkness 6208748052\"},{\"columnId\":47,\"value\":\"Christian Cupp\"},{\"columnId\":48,\"value\":\"Scott City, KS\"},{\"columnId\":49,\"value\":\"6208722187\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield of Kansas\"},{\"columnId\":52,\"value\":\"XSB880047923\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other Medication, Food\"},{\"columnId\":56,\"value\":\"Augmentin (medication), peanuts, and seasonal allergies to pollen\"},{\"columnId\":57,\"value\":\"Do not take Augmentin or eat food with peanuts or peanut butter. Zyxal will be sent for seasonal allergies.\"},{\"columnId\":58,\"value\":\"Crohn's (in remission)\\nEpisodic depression\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"His medications and supplements vary. A list will be sent with the medication bottles. The medications will be in a medication organizer.\"},{\"columnId\":61,\"value\":\"Nothing comes to mind. I'm excited about his first mission trip.\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":50,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Joshua Popp\"},{\"columnId\":38,\"value\":\"Jenny Popp\"},{\"columnId\":39,\"value\":\"2005-02-19\"},{\"columnId\":40,\"value\":\"508 S. 1st\"},{\"columnId\":41,\"value\":\"ATWOOD\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7856262999\"},{\"columnId\":46,\"value\":\"Albert Popp 7856262608\"},{\"columnId\":47,\"value\":\"Dr. Robbins \"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"7856263421\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Meritain\"},{\"columnId\":52,\"value\":\"9457556758\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Azithromycin\\n\\nSeasonal Allergies \"},{\"columnId\":57,\"value\":\"Allergy meds as needed.\"},{\"columnId\":59,\"value\":\"2019-06-04\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":51,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Asa Popp\"},{\"columnId\":38,\"value\":\"Jenny Popp\"},{\"columnId\":39,\"value\":\"2006-11-24\"},{\"columnId\":40,\"value\":\"508 S. 1st\"},{\"columnId\":41,\"value\":\"ATWOOD\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7856262999\"},{\"columnId\":46,\"value\":\"Albert Popp 7856262608\"},{\"columnId\":47,\"value\":\"Dr. Robbins\"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"7856263241\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Meritain\"},{\"columnId\":52,\"value\":\"9457556758\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"plants \"},{\"columnId\":56,\"value\":\"Seasonal allergies \"},{\"columnId\":57,\"value\":\"Meds as needed\"},{\"columnId\":59,\"value\":\"2019-06-04\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":52,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Taryn Hirst\"},{\"columnId\":38,\"value\":\"Stephan Hirst\"},{\"columnId\":39,\"value\":\"2011-04-06\"},{\"columnId\":40,\"value\":\"615 S Lincoln\"},{\"columnId\":41,\"value\":\"Smith Center\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"66967\"},{\"columnId\":44,\"value\":\"7852828377\"},{\"columnId\":45,\"value\":\"7852828377\"},{\"columnId\":46,\"value\":\"Lisa Hirst 7852080201\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":53,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Zavier Dooley\"},{\"columnId\":38,\"value\":\"Lyssa Meyer\"},{\"columnId\":39,\"value\":\"2007-04-29\"},{\"columnId\":40,\"value\":\"116 S Grant St.\"},{\"columnId\":41,\"value\":\"Smith Center\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"66967\"},{\"columnId\":44,\"value\":\"785-282-4625\"},{\"columnId\":46,\"value\":\"David Meyer 785-282-8050\"},{\"columnId\":47,\"value\":\"Dr Justin Overmiller\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"785-282-6834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Aetna Better Health of Kansas\"},{\"columnId\":52,\"value\":\"00102281865\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-08-22\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":54,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Briley Brauer\"},{\"columnId\":38,\"value\":\"Alaina Jacobs\"},{\"columnId\":39,\"value\":\"2011-06-24\"},{\"columnId\":40,\"value\":\"17032 Highway 36\"},{\"columnId\":41,\"value\":\"Smith Center \"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"66967\"},{\"columnId\":44,\"value\":\"3082898674\"},{\"columnId\":46,\"value\":\"Tristian Jacobs 7852824103\"},{\"columnId\":47,\"value\":\"Jill Kuhlmann\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Medicaid\"},{\"columnId\":52,\"value\":\"00110550664\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":55,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Tayton Nixon \"},{\"columnId\":38,\"value\":\"Brittany Hackerott\"},{\"columnId\":39,\"value\":\"2011-05-11\"},{\"columnId\":40,\"value\":\"315 w New york\"},{\"columnId\":41,\"value\":\"Smith center \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"66967\"},{\"columnId\":44,\"value\":\"7856207029\"},{\"columnId\":45,\"value\":\"7856207638\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":47,\"value\":\"Ferrill Conant\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"KanCare\"},{\"columnId\":52,\"value\":\"00103200926\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":56,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Cameron Hardacre\"},{\"columnId\":38,\"value\":\"Cameron Hardacre\"},{\"columnId\":39,\"value\":\"2010-05-06\"},{\"columnId\":40,\"value\":\"314 E Hwy 36\"},{\"columnId\":41,\"value\":\"Kensington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"7854765413\"},{\"columnId\":46,\"value\":\"Bruce Hardacre 7854767582\"},{\"columnId\":47,\"value\":\"Dr Conant\"},{\"columnId\":48,\"value\":\"Smith Center KS\"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS Kansas\"},{\"columnId\":52,\"value\":\"KSE853189711\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2011-06-29\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":57,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Jordan Drullinger \"},{\"columnId\":38,\"value\":\"Tamara Drullinger \"},{\"columnId\":39,\"value\":\"2006-09-23\"},{\"columnId\":40,\"value\":\"517 S Madison\"},{\"columnId\":41,\"value\":\"Smith Center\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67651\"},{\"columnId\":44,\"value\":\"7853028469\"},{\"columnId\":46,\"value\":\"Richard Drullinger Jr. 7853028470\"},{\"columnId\":47,\"value\":\"Smith County family practice \"},{\"columnId\":48,\"value\":\"Smith Center \"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Kancare\"},{\"columnId\":52,\"value\":\"001100310252\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":58,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Amanda Drullinger\"},{\"columnId\":38,\"value\":\"Tamara Drullinger\"},{\"columnId\":39,\"value\":\"2008-01-24\"},{\"columnId\":40,\"value\":\"517 S Madison St, \"},{\"columnId\":41,\"value\":\"Smith Center\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66967\"},{\"columnId\":44,\"value\":\"7853028469\"},{\"columnId\":46,\"value\":\"Richard Drullinger Jr 7853028470\"},{\"columnId\":47,\"value\":\"Hallie\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"KanCare\"},{\"columnId\":52,\"value\":\"00110310253\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"Depression and Type 1 Diabetes \"},{\"columnId\":59,\"value\":\"2021-08-05\"},{\"columnId\":60,\"value\":\"Insulin...4\\u00d7day...varies...diabetes \\nHydroxyzine HCL...4\\u00d7day...1...anxiety\\nOxcarbazepine...AM and HS...1...depression\\nLatuda 80...supper...1...depression\\nLatuda 20...supper...1...depression\"},{\"columnId\":61,\"value\":\"If Amanda gets overwhelmed, give her 15 minutes to calm down somewhere quieter. Then have her rejoin the activities.\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":59,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"April Webb\"},{\"columnId\":38,\"value\":\"Lauren Webb\"},{\"columnId\":39,\"value\":\"2006-09-19\"},{\"columnId\":40,\"value\":\"117 S Adams St\"},{\"columnId\":41,\"value\":\"Kensington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"7854768157\"},{\"columnId\":46,\"value\":\"Jerry Webb 7854768198\"},{\"columnId\":47,\"value\":\"Dr. Overmiller\"},{\"columnId\":48,\"value\":\"Smith Center, KS\"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield - KS\"},{\"columnId\":52,\"value\":\"XSB859085207\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"Ashlyna - Daily, morning 1 pill, doctor prescribed\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":60,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Ryan Jones\"},{\"columnId\":38,\"value\":\"Mandi Jones\"},{\"columnId\":39,\"value\":\"2009-12-24\"},{\"columnId\":40,\"value\":\"803 Page\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7856266479\"},{\"columnId\":46,\"value\":\"Josiah Jones 7856266478\"},{\"columnId\":47,\"value\":\"Dr. Robbins\"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"7856263241\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Meritain\"},{\"columnId\":52,\"value\":\"16466\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":61,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Ainsley Moses\"},{\"columnId\":38,\"value\":\"Michelle Moses\"},{\"columnId\":39,\"value\":\"2008-05-06\"},{\"columnId\":40,\"value\":\"505 E Hill Dr\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"(785) 626-0892\"},{\"columnId\":45,\"value\":\"(785) 626-0892\"},{\"columnId\":46,\"value\":\"Ken Moses (785) 626-0891\"},{\"columnId\":47,\"value\":\"RCHC\"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"(785) 626-3241\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Medishare\"},{\"columnId\":52,\"value\":\"15318M26547\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":62,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Ainsley Moses\"},{\"columnId\":38,\"value\":\"Michelle Moses\"},{\"columnId\":39,\"value\":\"2008-05-06\"},{\"columnId\":40,\"value\":\"505 E Hill Dr\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"(785) 626-0892\"},{\"columnId\":45,\"value\":\"(785) 626-0892\"},{\"columnId\":46,\"value\":\"Ken Moses (785) 626-0891\"},{\"columnId\":47,\"value\":\"RCHC\"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"(785) 626-3241\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Medishare\"},{\"columnId\":52,\"value\":\"15318M26547\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":63,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Tessa Witt\"},{\"columnId\":38,\"value\":\"Tiffany Witt\"},{\"columnId\":39,\"value\":\"2012-07-29\"},{\"columnId\":40,\"value\":\"2104 1300th Rd\"},{\"columnId\":41,\"value\":\"Oberlin\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":48,\"value\":\"Oberlin\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbsks\"},{\"columnId\":52,\"value\":\"XSB839863157\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other Sunscreen \"},{\"columnId\":56,\"value\":\"She can only use Walmart brand sunscreen\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"none\"}]},{\"id\":64,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Trevor witt\"},{\"columnId\":38,\"value\":\"Tiffany Witt\"},{\"columnId\":39,\"value\":\"2010-07-15\"},{\"columnId\":40,\"value\":\"2104 1300th Rd\"},{\"columnId\":41,\"value\":\"Oberlin\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":44,\"value\":\"7854701684\"},{\"columnId\":45,\"value\":\"7854701684\"},{\"columnId\":46,\"value\":\"Tyler Witt 7854754666\"},{\"columnId\":47,\"value\":\"Blomstedt \"},{\"columnId\":48,\"value\":\"McCook \"},{\"columnId\":49,\"value\":\"3083444110\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbsks\"},{\"columnId\":52,\"value\":\"XSB839863157\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":65,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Ayla Moses\"},{\"columnId\":38,\"value\":\"Michelle Moses\"},{\"columnId\":39,\"value\":\"2010-08-29\"},{\"columnId\":40,\"value\":\"505 E Hill Dr\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"(785) 626-0892\"},{\"columnId\":45,\"value\":\"(785) 626-0892\"},{\"columnId\":46,\"value\":\"Ken Moses (785) 626-0891\"},{\"columnId\":47,\"value\":\"RCHC\"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"(785) 626-3241\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Medishare\"},{\"columnId\":52,\"value\":\"15318M26547\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":66,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Connor Engelke\"},{\"columnId\":38,\"value\":\"Carmen Engelke\"},{\"columnId\":39,\"value\":\"2008-12-05\"},{\"columnId\":40,\"value\":\"22092 E Rd\"},{\"columnId\":41,\"value\":\"Cedar\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67628\"},{\"columnId\":44,\"value\":\"7855438559\"},{\"columnId\":46,\"value\":\"Trevor Engelke 785-476-5352\"},{\"columnId\":47,\"value\":\"Jennifer Hamons\"},{\"columnId\":48,\"value\":\"Phillipsburg\"},{\"columnId\":49,\"value\":\"785-543-5211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"WPPA ProvidrsCare\"},{\"columnId\":52,\"value\":\"T17700052\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin\"},{\"columnId\":57,\"value\":\"None\"},{\"columnId\":58,\"value\":\"Absense Epilepsy- self administers medication\"},{\"columnId\":59,\"value\":\"2020-05-26\"},{\"columnId\":60,\"value\":\"Depakote 2 tabs in AM, 2 at bedtime Absence Epilepsy\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":67,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Ella Horinek\"},{\"columnId\":38,\"value\":\"Heather Horinek\"},{\"columnId\":39,\"value\":\"2005-12-19\"},{\"columnId\":40,\"value\":\"603 Sherman Street\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"(308) 340-1587\"},{\"columnId\":45,\"value\":\"(308) 340-1587\"},{\"columnId\":46,\"value\":\"William Horinek (308) 340-3286\"},{\"columnId\":47,\"value\":\"Rawlins County Health Center \"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"(7856263241\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"William Horinek \"},{\"columnId\":52,\"value\":\"Xst870861790\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other Milk, caffeine \"},{\"columnId\":57,\"value\":\"Lactide \"},{\"columnId\":59,\"value\":\"2022-07-17\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":68,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Kallan Rothchild\"},{\"columnId\":38,\"value\":\"Kasiah Rothchild\"},{\"columnId\":39,\"value\":\"2007-08-29\"},{\"columnId\":40,\"value\":\"732 N 3rd\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67662\"},{\"columnId\":44,\"value\":\"7856560020\"},{\"columnId\":45,\"value\":\"7856560020\"},{\"columnId\":46,\"value\":\"Shea Rothchild 7856948859\"},{\"columnId\":47,\"value\":\"Bluestem Medical\"},{\"columnId\":48,\"value\":\"Quinter \"},{\"columnId\":49,\"value\":\"7857543333\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue cross blue shield\"},{\"columnId\":52,\"value\":\"KSE875541078\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-06-29\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":69,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Kenadie Rothchild\"},{\"columnId\":38,\"value\":\"Shea and Kasiah Rothchild\"},{\"columnId\":39,\"value\":\"2010-10-29\"},{\"columnId\":40,\"value\":\"732 N 3rd\"},{\"columnId\":41,\"value\":\"WaKeeney \"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7856560020\"},{\"columnId\":45,\"value\":\"7856948859\"},{\"columnId\":46,\"value\":\"Glenda Rothchild 7855456859\"},{\"columnId\":47,\"value\":\"Bluestem Medical\"},{\"columnId\":48,\"value\":\"Quinter\"},{\"columnId\":49,\"value\":\"7857543333\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"KSE875541078\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-06-29\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":70,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Camden Franklin\"},{\"columnId\":38,\"value\":\"Amanda Franklin\"},{\"columnId\":39,\"value\":\"2008-10-25\"},{\"columnId\":40,\"value\":\"22074 Road 23\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7856262600\"},{\"columnId\":46,\"value\":\"Nathan Franklin 7856260065\"},{\"columnId\":47,\"value\":\"Sarah Gabel\"},{\"columnId\":48,\"value\":\"Colby, Kansas\"},{\"columnId\":49,\"value\":\"785-462-6184\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield Kansas\"},{\"columnId\":52,\"value\":\"XSA801335656\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2021-08-16\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":71,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe Henry\"},{\"columnId\":38,\"value\":\"Stacey Henry\"},{\"columnId\":39,\"value\":\"2010-06-04\"},{\"columnId\":40,\"value\":\"209 west Cambridge St\"},{\"columnId\":41,\"value\":\"Oxford\"},{\"columnId\":42,\"value\":\"Nebraska\"},{\"columnId\":43,\"value\":\"68967\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":48,\"value\":\"Oxford\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Cigna\"},{\"columnId\":52,\"value\":\"U80047075\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other \"},{\"columnId\":56,\"value\":\"Latex\"},{\"columnId\":57,\"value\":\"Benadryl\"},{\"columnId\":59,\"value\":\"2022-08-30\"},{\"columnId\":60,\"value\":\"Trazadone, before bed, 2, insomnia\\nQuelbree, before bed, 2, ADHD\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":72,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe Henry\"},{\"columnId\":38,\"value\":\"Stacey Henry\"},{\"columnId\":39,\"value\":\"2010-06-04\"},{\"columnId\":40,\"value\":\"209 west Cambridge St\"},{\"columnId\":41,\"value\":\"Oxford\"},{\"columnId\":42,\"value\":\"Nebraska\"},{\"columnId\":43,\"value\":\"68967\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":48,\"value\":\"Oxford\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Cigna\"},{\"columnId\":52,\"value\":\"U80047075\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":73,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Khloe Reimer\"},{\"columnId\":38,\"value\":\"Kraig and Staci Reimer\"},{\"columnId\":39,\"value\":\"2008-03-06\"},{\"columnId\":40,\"value\":\"874 W 400 Rd\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7852080073\"},{\"columnId\":46,\"value\":\"Kraig Reimer 7855437656\"},{\"columnId\":47,\"value\":\"Dr. Wisinger\"},{\"columnId\":48,\"value\":\"Phillipsburg \"},{\"columnId\":49,\"value\":\"7855435211\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-09-01\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":74,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Tessa Witt\"},{\"columnId\":38,\"value\":\"Tiffany Witt\"},{\"columnId\":39,\"value\":\"2012-07-02\"},{\"columnId\":40,\"value\":\"2104 1300th Rd\"},{\"columnId\":41,\"value\":\"Oberlin\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":44,\"value\":\"7854701684\"},{\"columnId\":45,\"value\":\"7854701684\"},{\"columnId\":46,\"value\":\"Tyler Witt 7854754666\"},{\"columnId\":47,\"value\":\"Blomstedt \"},{\"columnId\":48,\"value\":\"Mccook\"},{\"columnId\":49,\"value\":\"3083444110\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbsks\"},{\"columnId\":52,\"value\":\"Xsb839863157\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":75,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Tessa Witt\"},{\"columnId\":38,\"value\":\"Tiffany Witt\"},{\"columnId\":39,\"value\":\"2012-07-02\"},{\"columnId\":40,\"value\":\"2104 1300th Rd\"},{\"columnId\":41,\"value\":\"Oberlin\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":44,\"value\":\"7854701684\"},{\"columnId\":45,\"value\":\"7854701684\"},{\"columnId\":46,\"value\":\"Tyler Witt 7854754666\"},{\"columnId\":47,\"value\":\"Blomstedt \"},{\"columnId\":48,\"value\":\"Mccook\"},{\"columnId\":49,\"value\":\"3083444110\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbsks\"},{\"columnId\":52,\"value\":\"Xsb839863157\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other Sun screen\"},{\"columnId\":56,\"value\":\"She can only use Walmart brand sun screen\"},{\"columnId\":59,\"value\":\"2019-03-31\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":76,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Trevor Witt\"},{\"columnId\":38,\"value\":\"Tiffany Witt\"},{\"columnId\":39,\"value\":\"2010-07-15\"},{\"columnId\":40,\"value\":\"2104 1300th Rd\"},{\"columnId\":41,\"value\":\"Oberlin\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":44,\"value\":\"7854701684\"},{\"columnId\":46,\"value\":\"Tyler Witt 7854754666\"},{\"columnId\":47,\"value\":\"Blomstedt \"},{\"columnId\":48,\"value\":\"Mccook\"},{\"columnId\":49,\"value\":\"3083444110\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbsks\"},{\"columnId\":52,\"value\":\"XSB839863157\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":77,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Trevor Witt\"},{\"columnId\":38,\"value\":\"Tiffany Witt\"},{\"columnId\":39,\"value\":\"2010-07-15\"},{\"columnId\":40,\"value\":\"2104 1300th Rd\"},{\"columnId\":41,\"value\":\"Oberlin\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":44,\"value\":\"7854701684\"},{\"columnId\":46,\"value\":\"Tyler Witt 7854754666\"},{\"columnId\":47,\"value\":\"Blomstedt \"},{\"columnId\":48,\"value\":\"Mccook\"},{\"columnId\":49,\"value\":\"3083444110\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbsks\"},{\"columnId\":52,\"value\":\"XSB839863157\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":78,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Trevor Witt\"},{\"columnId\":38,\"value\":\"Tiffany Witt\"},{\"columnId\":39,\"value\":\"2010-07-15\"},{\"columnId\":40,\"value\":\"2104 1300th Rd\"},{\"columnId\":41,\"value\":\"Oberlin\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":44,\"value\":\"7854701684\"},{\"columnId\":46,\"value\":\"Tyler Witt 7854754666\"},{\"columnId\":47,\"value\":\"Blomstedt \"},{\"columnId\":48,\"value\":\"Mccook\"},{\"columnId\":49,\"value\":\"3083444110\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbsks\"},{\"columnId\":52,\"value\":\"XSB839863157\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":79,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Camryn Timm\"},{\"columnId\":38,\"value\":\"Shanna Carroll\"},{\"columnId\":39,\"value\":\"2009-04-20\"},{\"columnId\":40,\"value\":\"620 S Railroad Ave\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7854430172\"},{\"columnId\":46,\"value\":\"Jason Carroll 7856260231\"},{\"columnId\":47,\"value\":\"Jennifer Mackley\"},{\"columnId\":48,\"value\":\"Colby,KS\"},{\"columnId\":49,\"value\":\"785460\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbs of ks\"},{\"columnId\":52,\"value\":\"Xsb874485807\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":80,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Camryn Timm\"},{\"columnId\":38,\"value\":\"Shanna Carroll\"},{\"columnId\":39,\"value\":\"2009-04-20\"},{\"columnId\":40,\"value\":\"620 S Railroad Ave\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7854430172\"},{\"columnId\":46,\"value\":\"Jason Carroll 7856260231\"},{\"columnId\":47,\"value\":\"Jennifer Mackley\"},{\"columnId\":48,\"value\":\"Colby,KS\"},{\"columnId\":49,\"value\":\"785460\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Bcbs of ks\"},{\"columnId\":52,\"value\":\"Xsb874485807\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":81,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe VanDerVeen\"},{\"columnId\":38,\"value\":\"Tiffany VanDerVeen\"},{\"columnId\":39,\"value\":\"2008-06-02\"},{\"columnId\":40,\"value\":\"21 East Limestone Road\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7853020114\"},{\"columnId\":46,\"value\":\"Curtis VanDerVeen 7855434358\"},{\"columnId\":47,\"value\":\"Glenda Maurer\"},{\"columnId\":48,\"value\":\"Norton\"},{\"columnId\":49,\"value\":\"7858773305\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"R60598540\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-07-02\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":82,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe VanDerVeen\"},{\"columnId\":38,\"value\":\"Tiffany VanDerVeen\"},{\"columnId\":39,\"value\":\"2008-06-02\"},{\"columnId\":40,\"value\":\"21 East Limestone Road\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7853020114\"},{\"columnId\":46,\"value\":\"Curtis VanDerVeen 7855434358\"},{\"columnId\":47,\"value\":\"Glenda Maurer\"},{\"columnId\":48,\"value\":\"Norton\"},{\"columnId\":49,\"value\":\"7858773305\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"R60598540\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":83,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe VanDerVeen\"},{\"columnId\":38,\"value\":\"Tiffany VanDerVeen\"},{\"columnId\":39,\"value\":\"2008-06-02\"},{\"columnId\":40,\"value\":\"21 East Limestone Road\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7853020114\"},{\"columnId\":46,\"value\":\"Curtis VanDerVeen 7855434358\"},{\"columnId\":47,\"value\":\"Glenda Maurer\"},{\"columnId\":48,\"value\":\"Norton\"},{\"columnId\":49,\"value\":\"7858773305\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"R60598540\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":84,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe VanDerVeen\"},{\"columnId\":38,\"value\":\"Tiffany VanDerVeen\"},{\"columnId\":39,\"value\":\"2008-06-02\"},{\"columnId\":40,\"value\":\"21 East Limestone Road\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7853020114\"},{\"columnId\":46,\"value\":\"Curtis VanDerVeen 7855434358\"},{\"columnId\":47,\"value\":\"Glenda Maurer\"},{\"columnId\":48,\"value\":\"Norton\"},{\"columnId\":49,\"value\":\"7858773305\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"R60598540\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":85,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe VanDerVeen\"},{\"columnId\":38,\"value\":\"Tiffany VanDerVeen\"},{\"columnId\":39,\"value\":\"2008-06-02\"},{\"columnId\":40,\"value\":\"21 East Limestone Road\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7853020114\"},{\"columnId\":46,\"value\":\"Curtis VanDerVeen 7855434358\"},{\"columnId\":47,\"value\":\"Glenda Maurer\"},{\"columnId\":48,\"value\":\"Norton\"},{\"columnId\":49,\"value\":\"7858773305\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"R60598540\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":86,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Chloe VanDerVeen\"},{\"columnId\":38,\"value\":\"Tiffany VanDerVeen\"},{\"columnId\":39,\"value\":\"2008-06-02\"},{\"columnId\":40,\"value\":\"21 East Limestone Road\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7853020114\"},{\"columnId\":46,\"value\":\"Curtis VanDerVeen 7855434358\"},{\"columnId\":47,\"value\":\"Glenda Maurer\"},{\"columnId\":48,\"value\":\"Norton\"},{\"columnId\":49,\"value\":\"7858773305\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"R60598540\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":87,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"McKylie Carlson\"},{\"columnId\":38,\"value\":\"Jody Ward\"},{\"columnId\":39,\"value\":\"2006-09-05\"},{\"columnId\":40,\"value\":\"207 Page st\"},{\"columnId\":41,\"value\":\"Atwood \"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7855130188\"},{\"columnId\":46,\"value\":\"Shane Carlson 7856266283\"},{\"columnId\":47,\"value\":\"Rchc\"},{\"columnId\":48,\"value\":\"Atwood\"},{\"columnId\":49,\"value\":\"7856263211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield \"},{\"columnId\":52,\"value\":\"XSB81386958\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":88,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Acelyn Wynn\"},{\"columnId\":38,\"value\":\"Tammi Wynn\"},{\"columnId\":39,\"value\":\"2010-07-28\"},{\"columnId\":40,\"value\":\"203 Caroline Ave.\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-216-0251\"},{\"columnId\":46,\"value\":\"Daniel Wynn 785-216-0250\"},{\"columnId\":47,\"value\":\"Sarah Gibbs\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"AFG19K147428\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2021-08-04\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":89,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Jillian Samson\"},{\"columnId\":38,\"value\":\"Bethany Samson\"},{\"columnId\":39,\"value\":\"2010-11-24\"},{\"columnId\":40,\"value\":\"202 Easter Ave\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7857438534\"},{\"columnId\":46,\"value\":\"Jeremy Samson 7858211115\"},{\"columnId\":47,\"value\":\"Sarah Gibbs, APRN\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"7857432124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"GPHA\"},{\"columnId\":52,\"value\":\"G20800184\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2022-05-23\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":90,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Breckyn McDowell\"},{\"columnId\":38,\"value\":\"Brooke McDowell\"},{\"columnId\":39,\"value\":\"2011-05-26\"},{\"columnId\":40,\"value\":\"211 S Adams Street\"},{\"columnId\":41,\"value\":\"Kensington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"7854766191\"},{\"columnId\":45,\"value\":\"7854766191\"},{\"columnId\":46,\"value\":\"Darin McDowell (dad) 4025871159\"},{\"columnId\":47,\"value\":\"Dr. Overmiller\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"7854766834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross- Blue Shield of KS\"},{\"columnId\":52,\"value\":\"xsb874047907\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other mild peanut allergy (peanut butter mainly) \"},{\"columnId\":57,\"value\":\"Benadryl\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":91,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Brillon Mcdowell\"},{\"columnId\":38,\"value\":\"Brooke McDowell\"},{\"columnId\":39,\"value\":\"2008-05-14\"},{\"columnId\":40,\"value\":\"211 S Adams\"},{\"columnId\":41,\"value\":\"Kensington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66951\"},{\"columnId\":44,\"value\":\"7854766191\"},{\"columnId\":45,\"value\":\"7854766191\"},{\"columnId\":46,\"value\":\"Darin McDowell (dad) 4025871159\"},{\"columnId\":47,\"value\":\"Dr. Overmiller\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"7852826834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross- Blue Shield of KS\"},{\"columnId\":52,\"value\":\"xsb874047907\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":92,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Clancy Cummings\"},{\"columnId\":38,\"value\":\"Jessica Cummings\"},{\"columnId\":39,\"value\":\"2007-02-28\"},{\"columnId\":40,\"value\":\"1147 Oxen\"},{\"columnId\":41,\"value\":\"Howard\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67349\"},{\"columnId\":44,\"value\":\"620-515-4434\"},{\"columnId\":46,\"value\":\"Ron Cummings 620-330-3165\"},{\"columnId\":47,\"value\":\"Carey Hurt\"},{\"columnId\":48,\"value\":\"Moline, KS\"},{\"columnId\":49,\"value\":\"620-647-8109\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Aetna Better Health of Kansas\"},{\"columnId\":52,\"value\":\"00110158599\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2021-03-18\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":93,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Emma Deines \"},{\"columnId\":38,\"value\":\"Amber Shrader \"},{\"columnId\":39,\"value\":\"2009-04-22\"},{\"columnId\":40,\"value\":\"875 Nebraska Ave \"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7855331584\"},{\"columnId\":45,\"value\":\"7855331584\"},{\"columnId\":46,\"value\":\"Brian Shrader 7855333333\"},{\"columnId\":47,\"value\":\"Overmiller \"},{\"columnId\":48,\"value\":\"Smith Center \"},{\"columnId\":49,\"value\":\"7852826384\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Health \"},{\"columnId\":52,\"value\":\"997294059\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Sulfa \"},{\"columnId\":59,\"value\":\"2018-04-10\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":94,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Ryan DeBuhr\"},{\"columnId\":38,\"value\":\"Tracy Terhune-DeBuhr\"},{\"columnId\":39,\"value\":\"2007-05-20\"},{\"columnId\":40,\"value\":\"620 N Woodlawn Blvd\"},{\"columnId\":41,\"value\":\"DERBY\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67037\"},{\"columnId\":44,\"value\":\"3168077770\"},{\"columnId\":46,\"value\":\"Bryan DeBuhr 3164093447\"},{\"columnId\":47,\"value\":\"Dr. Neideree\"},{\"columnId\":48,\"value\":\"Derby\"},{\"columnId\":49,\"value\":\"3167886963\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare\"},{\"columnId\":52,\"value\":\"911-87726-04\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Give *****NO ANECTINE*****\\nGenetic defect father's family medical history.\"},{\"columnId\":57,\"value\":\"NONE. ***RESULT in COMA or DEATH\"},{\"columnId\":58,\"value\":\"N\\/A\"},{\"columnId\":59,\"value\":\"2018-02-07\"},{\"columnId\":60,\"value\":\"N\\/A\"},{\"columnId\":61,\"value\":\"I sent 4 children to TFC camp last year (week 1) and all 4 of my kids were stolen from. (I was tempted to not send any if them this year)\\nTheft of cash is a problem at the camp that I would like the staff to address.\\n\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":95,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Hannah Rothchild\"},{\"columnId\":38,\"value\":\"Shannon Rothchild\"},{\"columnId\":39,\"value\":\"2005-06-01\"},{\"columnId\":40,\"value\":\"18041 M Rd\"},{\"columnId\":41,\"value\":\"Smith Center\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66967\"},{\"columnId\":44,\"value\":\"785.620.7979\"},{\"columnId\":45,\"value\":\"785.282.6777\"},{\"columnId\":46,\"value\":\"Kristi Rothchild 785.282.6777\"},{\"columnId\":47,\"value\":\"Dr. Hannah Hack\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"785.282.6845\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"XSB820582735\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"None\"},{\"columnId\":61,\"value\":\"Hannah is looking forward to playing the piano this summer!\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":96,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Braden Harkness\"},{\"columnId\":38,\"value\":\"Trisha Harkness\"},{\"columnId\":39,\"value\":\"2005-09-28\"},{\"columnId\":40,\"value\":\"1018 Jackson Street\"},{\"columnId\":41,\"value\":\"Scott City\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67871\"},{\"columnId\":44,\"value\":\"620-874-8034\"},{\"columnId\":46,\"value\":\"Warren Harkness (Father) 620-874-8052\"},{\"columnId\":47,\"value\":\"Christian Cupp\"},{\"columnId\":48,\"value\":\"Scott City, KS\"},{\"columnId\":49,\"value\":\"620-872-2187\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield of Kansas\"},{\"columnId\":52,\"value\":\"XSB880047923\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Augmentin. Also, seasonal allergies\"},{\"columnId\":57,\"value\":\"Do not administer Augmentin; it causes GI upset. He will have Xyzal to mitigate his allergies.\"},{\"columnId\":58,\"value\":\"Crohn's disease (currently in remission), depression, and anxiety. Date of last tetanus shot is unknown.\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"I will send a list with him. His medications and supplements change periodically.\"},{\"columnId\":61,\"value\":\"He's looking forward to camp and spending time with his friend, Noah Carver. On a separate note, please keep the $25 (I think) application fee for the 2023 mission trip as a donation.\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":97,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Lily Parker\"},{\"columnId\":38,\"value\":\"Crystal Parker\"},{\"columnId\":39,\"value\":\"2012-08-16\"},{\"columnId\":40,\"value\":\"537 N. 8th St.\"},{\"columnId\":41,\"value\":\"Wakeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7857438388\"},{\"columnId\":45,\"value\":\"7853030420\"},{\"columnId\":46,\"value\":\"Jimmie Parker 7853030420\"},{\"columnId\":47,\"value\":\"Dr. Chelsea Powell\"},{\"columnId\":48,\"value\":\"Hays\"},{\"columnId\":49,\"value\":\"7856232360\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Cigna\"},{\"columnId\":52,\"value\":\"779588983322\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin\"},{\"columnId\":58,\"value\":\"None\"},{\"columnId\":59,\"value\":\"2023-04-24\"},{\"columnId\":60,\"value\":\"None\"},{\"columnId\":61,\"value\":\"None\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":98,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Lily Parker\"},{\"columnId\":38,\"value\":\"Crystal Parker\"},{\"columnId\":39,\"value\":\"2012-08-16\"},{\"columnId\":40,\"value\":\"537 N. 8th St.\"},{\"columnId\":41,\"value\":\"Wakeeney\"},{\"columnId\":42,\"value\":\"Ks\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7857438388\"},{\"columnId\":46,\"value\":\"Jimmie Parker 7853030420\"},{\"columnId\":47,\"value\":\"Dr. Chelsea Powell\"},{\"columnId\":48,\"value\":\"Hays, KS\"},{\"columnId\":49,\"value\":\"7856232360\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Cigna\"},{\"columnId\":52,\"value\":\"779588983322\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin\"},{\"columnId\":59,\"value\":\"2016-08-18\"},{\"columnId\":60,\"value\":\"None\"},{\"columnId\":61,\"value\":\"None\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":99,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Lorelai Murphy\"},{\"columnId\":38,\"value\":\"Stacy Murphy\"},{\"columnId\":39,\"value\":\"2006-06-29\"},{\"columnId\":40,\"value\":\"701 S 10th St.\"},{\"columnId\":41,\"value\":\"Canon City\"},{\"columnId\":42,\"value\":\"Colorado\"},{\"columnId\":43,\"value\":\"81212\"},{\"columnId\":44,\"value\":\"7193710708\"},{\"columnId\":45,\"value\":\"7193710708\"},{\"columnId\":46,\"value\":\"Sean Murphy 7193712661\"},{\"columnId\":47,\"value\":\"Marc Sindler\"},{\"columnId\":48,\"value\":\"Canon City, CO\"},{\"columnId\":49,\"value\":\"7192754137\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":51,\"value\":\"Cash Pay\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin \"},{\"columnId\":57,\"value\":\"Benadryl\"},{\"columnId\":58,\"value\":\"Anxiety and Depression-is well controlled with medications, therapy, and walking with God.\"},{\"columnId\":59,\"value\":\"2011-08-23\"},{\"columnId\":60,\"value\":\"Buproprion 150mg, AM and PM, 1 tablet by mouth, depression\\nMirtazapine 30mg, PM (at bedtime), 0.5 tablet by mouth, anxiety\\nBirth Control Pills, AM, different colored and mg strength based on the day and week, cycle regulation\"},{\"columnId\":61,\"value\":\"Last summer was a life changing experience for her. We are so happy to have her attending again this year.\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":100,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Kaelyn Wells\"},{\"columnId\":38,\"value\":\"Jessica Wells\"},{\"columnId\":39,\"value\":\"2005-09-13\"},{\"columnId\":40,\"value\":\"18265 Road W\"},{\"columnId\":41,\"value\":\"Atwood\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67730\"},{\"columnId\":44,\"value\":\"7856266500\"},{\"columnId\":45,\"value\":\"7856266500\"},{\"columnId\":46,\"value\":\"Shannon Wells 7856267735\"},{\"columnId\":47,\"value\":\"Paul Young\"},{\"columnId\":48,\"value\":\"Atwood, KS\"},{\"columnId\":49,\"value\":\"7856263211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield of Kansas\"},{\"columnId\":52,\"value\":\"XSB841268482\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin & Oral Steroids\"},{\"columnId\":59,\"value\":\"2017-06-26\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":101,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Sarah Wright\"},{\"columnId\":38,\"value\":\"Steven Wright\"},{\"columnId\":39,\"value\":\"2009-09-07\"},{\"columnId\":40,\"value\":\"306 W Oak St.\"},{\"columnId\":41,\"value\":\"Oberlin \"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"67749\"},{\"columnId\":44,\"value\":\"7853419565\"},{\"columnId\":45,\"value\":\"7853419565\"},{\"columnId\":46,\"value\":\"Jordan McHugh 7854707736\"},{\"columnId\":47,\"value\":\"Decatur county health\"},{\"columnId\":48,\"value\":\"Oberlin \"},{\"columnId\":49,\"value\":\"7854752015\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue shield\"},{\"columnId\":52,\"value\":\"XSB877851083\"},{\"columnId\":55,\"value\":\" \"}]},{\"id\":102,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Kristen Ruggles\"},{\"columnId\":38,\"value\":\"Hailey Ruggles\"},{\"columnId\":39,\"value\":\"2008-11-21\"},{\"columnId\":40,\"value\":\"613 N 4th Street\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"3083501836\"},{\"columnId\":46,\"value\":\"Landon Ruggles 3083500836\"},{\"columnId\":47,\"value\":\"WaKeeney Family Care\"},{\"columnId\":48,\"value\":\"WaKeeney, KS\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS\"},{\"columnId\":52,\"value\":\"XSB861410505\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin\"},{\"columnId\":57,\"value\":\"Avoid antibiotics that contain penicillin\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"Allergy Medication - At bed time - 1 pill - Seasonal Allergies\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":103,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Lily Parker\"},{\"columnId\":38,\"value\":\"Crystal Parker\"},{\"columnId\":39,\"value\":\"2012-08-16\"},{\"columnId\":40,\"value\":\"537 N. 8th St.\"},{\"columnId\":41,\"value\":\"Wakeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-743-8388\"},{\"columnId\":46,\"value\":\"Jimmie Parker 785-303-0420\"},{\"columnId\":47,\"value\":\"Dr. Chelsea Powell\"},{\"columnId\":48,\"value\":\"Hays, KS\"},{\"columnId\":49,\"value\":\"785-623-2360\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Cigna\"},{\"columnId\":52,\"value\":\"7795889883322\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Penicillin\"},{\"columnId\":57,\"value\":\"Benadryl\"},{\"columnId\":58,\"value\":\"None\"},{\"columnId\":59,\"value\":\"2016-08-17\"},{\"columnId\":60,\"value\":\"None\"},{\"columnId\":61,\"value\":\"She would like to room with Aven Morales, from Wakeeney, KS.\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":104,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Kaci Dirks\"},{\"columnId\":38,\"value\":\"Brandon & Kristi Dirks\"},{\"columnId\":39,\"value\":\"2005-09-25\"},{\"columnId\":40,\"value\":\"25307 Rd 28\"},{\"columnId\":41,\"value\":\"Ludell\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67744\"},{\"columnId\":44,\"value\":\"7856264026\"},{\"columnId\":45,\"value\":\"7856269205\"},{\"columnId\":46,\"value\":\"Kristi Dirks 7856266254\"},{\"columnId\":50,\"value\":\"\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":105,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Reagan Daubert\"},{\"columnId\":38,\"value\":\"Nikki Daubert\"},{\"columnId\":39,\"value\":\"2008-11-14\"},{\"columnId\":40,\"value\":\"224 Earle Ave\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-769-4702\"},{\"columnId\":46,\"value\":\"Ryan Daubert 785-731-5104\"},{\"columnId\":47,\"value\":\"Dr. Paritz\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"DMMM07501212\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"Acid Reflux\"},{\"columnId\":59,\"value\":\"2020-07-21\"},{\"columnId\":60,\"value\":\"Pepcid, 30 min after each meal, 1, acid reflux\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":106,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Madilyn Daubert\"},{\"columnId\":38,\"value\":\"Nikki Daubert\"},{\"columnId\":39,\"value\":\"2008-11-14\"},{\"columnId\":40,\"value\":\"224 Earle Ave\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-769-4702\"},{\"columnId\":45,\"value\":\"Same\"},{\"columnId\":46,\"value\":\"Ryan Daubert 785-731-5104\"},{\"columnId\":47,\"value\":\"Dr. Paritz\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"DMMM07501212\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2020-07-21\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":107,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Noah Carver\"},{\"columnId\":38,\"value\":\"Heather & Adam Carver\"},{\"columnId\":39,\"value\":\"2007-05-10\"},{\"columnId\":40,\"value\":\"501 Heather Street\"},{\"columnId\":41,\"value\":\"Burlington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66839\"},{\"columnId\":44,\"value\":\"6203646713\"},{\"columnId\":46,\"value\":\"Marcia Taylor-Trump 6203307721\"},{\"columnId\":47,\"value\":\"Dr. Chris Cupp\"},{\"columnId\":48,\"value\":\"Scott City, KS\"},{\"columnId\":49,\"value\":\"6208722187\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Providrs Care Network\"},{\"columnId\":52,\"value\":\"T11100203\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2021-04-15\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":108,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Karys Carver\"},{\"columnId\":38,\"value\":\"Adam & Heather Carver\"},{\"columnId\":39,\"value\":\"2011-02-11\"},{\"columnId\":40,\"value\":\"501 Heather Street\"},{\"columnId\":41,\"value\":\"Burlington\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"66839\"},{\"columnId\":44,\"value\":\"6203646713\"},{\"columnId\":46,\"value\":\"Marcia Taylor-Trump 6203307721\"},{\"columnId\":47,\"value\":\"Dr. Chris Cupp\"},{\"columnId\":48,\"value\":\"Scott City, KS\"},{\"columnId\":49,\"value\":\"6208722187\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Providrs Care Network\"},{\"columnId\":52,\"value\":\"T11100203\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"Amoxicillin\"},{\"columnId\":57,\"value\":\"Do not give amoxicillin\"},{\"columnId\":59,\"value\":\"2018-04-15\"},{\"columnId\":61,\"value\":\"This is Karys' first experience with TFC camp and without her parents. She will be fine with grandparents there.\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":109,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Zachary Vaughn\"},{\"columnId\":38,\"value\":\"Becky Vaughn\"},{\"columnId\":39,\"value\":\"2005-05-29\"},{\"columnId\":40,\"value\":\"103 10Th Street Apartment 2B\"},{\"columnId\":41,\"value\":\"Beaver City\"},{\"columnId\":42,\"value\":\"NEBRASKA \"},{\"columnId\":43,\"value\":\"68926\"},{\"columnId\":46,\"value\":\" \"},{\"columnId\":47,\"value\":\"Cheryl Muse\"},{\"columnId\":48,\"value\":\"Beaver City\"},{\"columnId\":49,\"value\":\"9709014098\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Anthem BcBs\"},{\"columnId\":52,\"value\":\"MGU070W12631\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-12-26\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":110,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Tristin Vaughn\"},{\"columnId\":38,\"value\":\"Becky Vaughn\"},{\"columnId\":39,\"value\":\"2008-02-14\"},{\"columnId\":40,\"value\":\"103 10Th Street Apartment 2B\"},{\"columnId\":41,\"value\":\"Beaver City\"},{\"columnId\":42,\"value\":\"NEBRASKA \"},{\"columnId\":43,\"value\":\"68926\"},{\"columnId\":44,\"value\":\"9709014098\"},{\"columnId\":45,\"value\":\"9709014098\"},{\"columnId\":46,\"value\":\"Mike kelly 3086551648\"},{\"columnId\":47,\"value\":\"Cheryl Muse\"},{\"columnId\":48,\"value\":\"Arapahoe, Nebraska \"},{\"columnId\":49,\"value\":\"3086973317\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Anthem BcBs\"},{\"columnId\":52,\"value\":\"MGU070W12631\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2018-08-14\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":111,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Cenley Ziegler\"},{\"columnId\":38,\"value\":\"Libby Ziegler\"},{\"columnId\":39,\"value\":\"2012-01-02\"},{\"columnId\":40,\"value\":\"137 N 8th\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7856507340\"},{\"columnId\":45,\"value\":\"7856507340\"},{\"columnId\":46,\"value\":\"Lance Ziegler 7857693089\"},{\"columnId\":47,\"value\":\"David Day, PA\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"7857432124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"ProviDRs Care\"},{\"columnId\":52,\"value\":\"G20800024\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2020-04-26\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":112,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Bailey Ziegler\"},{\"columnId\":38,\"value\":\"Libby Ziegler\"},{\"columnId\":39,\"value\":\"2008-09-25\"},{\"columnId\":40,\"value\":\"137 N 8th\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7856507340\"},{\"columnId\":45,\"value\":\"7856507340\"},{\"columnId\":46,\"value\":\"Lance Ziegler 7857693089\"},{\"columnId\":47,\"value\":\"David Day, PA\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"7857432124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"ProviDRs Care\"},{\"columnId\":52,\"value\":\"G20800024\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2018-04-26\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":113,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Miley Moffatt\"},{\"columnId\":38,\"value\":\"Kelly Moffatt\"},{\"columnId\":39,\"value\":\"2008-10-29\"},{\"columnId\":40,\"value\":\"380 Fischer Drive\"},{\"columnId\":41,\"value\":\"Phillipsburg\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7855331308\"},{\"columnId\":45,\"value\":\"7855331396\"},{\"columnId\":46,\"value\":\"Ryan Moffatt 7855331396\"},{\"columnId\":47,\"value\":\"Tyson Wisinger\"},{\"columnId\":48,\"value\":\"Phillipsburg\"},{\"columnId\":49,\"value\":\"7855438211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield \"},{\"columnId\":52,\"value\":\"004009954\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other Seasonal \"},{\"columnId\":57,\"value\":\"Claritin once daily \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"Claritin once daily. Morning is fine. \\nIbuprofen if needed. \"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":114,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Raegan Kastle\"},{\"columnId\":38,\"value\":\"Seth Kastle\"},{\"columnId\":39,\"value\":\"2009-01-26\"},{\"columnId\":40,\"value\":\"700 Easter Ave\"},{\"columnId\":41,\"value\":\"Wakeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7857438655\"},{\"columnId\":45,\"value\":\"7857438656\"},{\"columnId\":46,\"value\":\"Julia Kastle 7857438656\"},{\"columnId\":47,\"value\":\"Dr Canty\"},{\"columnId\":48,\"value\":\"Kansas City\"},{\"columnId\":49,\"value\":\"8169604051\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS OF KS\"},{\"columnId\":52,\"value\":\"KSE865710381\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"Exercise Asthma, history of concussion, overheats easily\"},{\"columnId\":59,\"value\":\"2015-06-15\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":115,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Gabby Poels\"},{\"columnId\":38,\"value\":\"Nick and Tami Poels\"},{\"columnId\":39,\"value\":\"2008-04-19\"},{\"columnId\":40,\"value\":\"50 Sunset Dr\"},{\"columnId\":41,\"value\":\"Phillipsburg \"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"9139612415\"},{\"columnId\":45,\"value\":\"9139612415\"},{\"columnId\":46,\"value\":\"Nick Poels 7853020512\"},{\"columnId\":47,\"value\":\"Dr Wisinger \"},{\"columnId\":48,\"value\":\"Phillipsburg \"},{\"columnId\":49,\"value\":\"'+1 (785) 543-5211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS of Vermont\"},{\"columnId\":52,\"value\":\"HX4D30558\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"Vesicourteral reflux\"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":60,\"value\":\"Ex lax breakfast and supper 1 digestion\\nProbiotic breakfast 1 digestion\\nAlbuterol (as needed) \"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":116,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Alexander Skinner\"},{\"columnId\":38,\"value\":\"Jason Skinner\"},{\"columnId\":39,\"value\":\"2003-10-22\"},{\"columnId\":40,\"value\":\"202 S Colorado\"},{\"columnId\":41,\"value\":\"ORLEANS\"},{\"columnId\":42,\"value\":\"NE\"},{\"columnId\":43,\"value\":\"68966\"},{\"columnId\":44,\"value\":\"3087468139\"},{\"columnId\":45,\"value\":\"3082172429\"},{\"columnId\":46,\"value\":\"Melissa Engleman 3082172429\"},{\"columnId\":47,\"value\":\"Jennifer Taylor\"},{\"columnId\":48,\"value\":\"Alma\"},{\"columnId\":49,\"value\":\"3089282103\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Medicaid\"},{\"columnId\":52,\"value\":\"01335122605\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":58,\"value\":\"High functioning ADHD\"},{\"columnId\":59,\"value\":\"2021-04-01\"},{\"columnId\":60,\"value\":\"Vyvanse, once daily in am, 1 pill, ADHD\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":117,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"DELANA BROWN\"},{\"columnId\":38,\"value\":\"NATE-SARA BROWN\"},{\"columnId\":39,\"value\":\"2010-07-12\"},{\"columnId\":40,\"value\":\"412 Easter Ave\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"785-769-4265\"},{\"columnId\":45,\"value\":\"785-650-1773\"},{\"columnId\":46,\"value\":\"BOB MCCOY 785-743-8092\"},{\"columnId\":47,\"value\":\"DAY\"},{\"columnId\":48,\"value\":\"WAKEENEY\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BLUE CROSS BLUE SHIELD\"},{\"columnId\":52,\"value\":\"XSB826610094\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2021-07-07\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":118,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Katherine-Ann Eakin\"},{\"columnId\":38,\"value\":\"Teresa Youngquist\"},{\"columnId\":39,\"value\":\"2007-06-10\"},{\"columnId\":40,\"value\":\"631 Middle Drive\"},{\"columnId\":41,\"value\":\"Phillipsburg\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"3089957580\"},{\"columnId\":46,\"value\":\"Christopher Eakin 785-533-1605\"},{\"columnId\":47,\"value\":\"Dr. Overmiller\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":49,\"value\":\"785-282-6834\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross Blue Shield\"},{\"columnId\":52,\"value\":\"YNN100163936\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":119,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Avery Ziegler\"},{\"columnId\":38,\"value\":\"Libby Ziegler\"},{\"columnId\":39,\"value\":\"2005-11-03\"},{\"columnId\":40,\"value\":\"137 N. 8th\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7856507340\"},{\"columnId\":45,\"value\":\"7856507340\"},{\"columnId\":46,\"value\":\"Lance Ziegler 7857693089\"},{\"columnId\":47,\"value\":\"David Day PA\"},{\"columnId\":48,\"value\":\"WaKeeney\"},{\"columnId\":49,\"value\":\"7857432124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"ProviDRs Care Network\"},{\"columnId\":52,\"value\":\"GPHA208\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2019-06-03\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":120,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Savannah Bretton\"},{\"columnId\":38,\"value\":\"JACQUE BRETTON\"},{\"columnId\":39,\"value\":\"2009-06-15\"},{\"columnId\":40,\"value\":\"224 W G Street\"},{\"columnId\":41,\"value\":\"Phillipsburg\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7855438272\"},{\"columnId\":46,\"value\":\"Falon Bretton 7853020015\"},{\"columnId\":47,\"value\":\"Genny Rahjes\"},{\"columnId\":48,\"value\":\"Phillipsburg\"},{\"columnId\":49,\"value\":\"7855436850\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Sunflower\"},{\"columnId\":52,\"value\":\"00103056757\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2017-01-10\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":121,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Jerry Carver\"},{\"columnId\":38,\"value\":\"Amber Carver\"},{\"columnId\":39,\"value\":\"2004-09-09\"},{\"columnId\":40,\"value\":\"4th street\"},{\"columnId\":41,\"value\":\"Phillipsburg\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67661\"},{\"columnId\":44,\"value\":\"7853020392\"},{\"columnId\":46,\"value\":\"Nancy Caver 7853020185\"},{\"columnId\":47,\"value\":\"Jennifer \"},{\"columnId\":48,\"value\":\"Phillipsburg \"},{\"columnId\":49,\"value\":\"7585435211\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Sunflower insurance \"},{\"columnId\":52,\"value\":\"00102073573\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"other Dyes and perfumes \"},{\"columnId\":56,\"value\":\"Dyes and perfumes that touch the skin. Breaks out into hives.\"},{\"columnId\":57,\"value\":\"Benedryl\"},{\"columnId\":58,\"value\":\"Moderate anxiety\"},{\"columnId\":59,\"value\":\"2017-08-08\"},{\"columnId\":62,\"value\":\"fair\"}]},{\"id\":122,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Josephine Nech\"},{\"columnId\":38,\"value\":\"Benjamin Nech\"},{\"columnId\":39,\"value\":\"2009-08-29\"},{\"columnId\":40,\"value\":\"453 Washington Ave\"},{\"columnId\":41,\"value\":\"Long Island\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67647\"},{\"columnId\":44,\"value\":\"620-789-1227\"},{\"columnId\":46,\"value\":\"Sheila Nech 620-428-1369\"},{\"columnId\":47,\"value\":\"Overmiller\"},{\"columnId\":48,\"value\":\"Smith Center\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Blue Cross and Blue Shield Kansas\"},{\"columnId\":52,\"value\":\"XSN897166592\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"medication \"},{\"columnId\":56,\"value\":\"She is allergic to trees, grass, paint, glitter, dust, mold, penicillin... she knows most of them. :)\"},{\"columnId\":57,\"value\":\"She will bring a list of medicine and how to treat them at camp. \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":123,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Maddie Pollan\"},{\"columnId\":38,\"value\":\" Melanie Pollan\"},{\"columnId\":39,\"value\":\"2008-09-15\"},{\"columnId\":40,\"value\":\"1222 Easter Avenue\"},{\"columnId\":41,\"value\":\"Wakeeney\"},{\"columnId\":42,\"value\":\"KS\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"706-612-3287\"},{\"columnId\":45,\"value\":\"706-524-5602\"},{\"columnId\":46,\"value\":\"Gayden Pollan 7066123294\"},{\"columnId\":47,\"value\":\"Katie Bailey\"},{\"columnId\":48,\"value\":\"Wakeeney\"},{\"columnId\":49,\"value\":\"785-743-2124\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"United Healthcare\"},{\"columnId\":52,\"value\":\"994189218\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"1111-11-11\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":124,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Mary Baird\"},{\"columnId\":38,\"value\":\"Doyle Baird\"},{\"columnId\":39,\"value\":\"2005-09-26\"},{\"columnId\":40,\"value\":\"703 Cleveland Street\"},{\"columnId\":41,\"value\":\"Almena \"},{\"columnId\":42,\"value\":\"Kansas \"},{\"columnId\":43,\"value\":\"67622\"},{\"columnId\":44,\"value\":\"7856648526\"},{\"columnId\":45,\"value\":\"7856648526\"},{\"columnId\":46,\"value\":\"Kathy Donaldson 7856648095\"},{\"columnId\":47,\"value\":\"Dr. Gaede\"},{\"columnId\":48,\"value\":\"Norton Kansas \"},{\"columnId\":49,\"value\":\"7858773305\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"Ambetter \"},{\"columnId\":52,\"value\":\"U95569492\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2020-04-17\"},{\"columnId\":62,\"value\":\"good\"}]},{\"id\":125,\"tableId\":4,\"createdBy\":\"chris\",\"createdAt\":\"2023-06-14 12:32:12\",\"lastEditBy\":\"chris\",\"lastEditAt\":\"2023-06-14 12:32:12\",\"data\":[{\"columnId\":37,\"value\":\"Annabelle Malsam\"},{\"columnId\":38,\"value\":\"Stacey Malsam\"},{\"columnId\":39,\"value\":\"2006-01-26\"},{\"columnId\":40,\"value\":\"123 S 10th St\"},{\"columnId\":41,\"value\":\"WaKeeney\"},{\"columnId\":42,\"value\":\"Kansas\"},{\"columnId\":43,\"value\":\"67672\"},{\"columnId\":44,\"value\":\"7857438279\"},{\"columnId\":46,\"value\":\"Craig Malsam 7857438269\"},{\"columnId\":47,\"value\":\"Kate Bailey\"},{\"columnId\":48,\"value\":\"WaKeeney KS\"},{\"columnId\":49,\"value\":\"3166190197\"},{\"columnId\":50,\"value\":\"1\"},{\"columnId\":51,\"value\":\"BCBS of KS\"},{\"columnId\":52,\"value\":\"XSB870941670\"},{\"columnId\":54,\"value\":\"1\"},{\"columnId\":55,\"value\":\"none \"},{\"columnId\":59,\"value\":\"2017-10-13\"},{\"columnId\":60,\"value\":\"100 mg spironolactone Morning 1 Acne\\nMultivitamin Morning 1 General health\"},{\"columnId\":62,\"value\":\"good\"}]}]" diff --git a/static/css/main.css b/static/css/main.css index b51b833..e9cd8f0 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -998,6 +998,10 @@ --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } + .ring { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } .ring-1 { --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); @@ -1016,6 +1020,9 @@ --tw-blur: blur(8px); filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } .transition { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); diff --git a/templates/shortcodes/disciplemaking.html b/templates/shortcodes/disciplemaking.html index 9c65dc4..f43f235 100644 --- a/templates/shortcodes/disciplemaking.html +++ b/templates/shortcodes/disciplemaking.html @@ -4,35 +4,35 @@
-
Lost and Seeking
+
Lost and Seeking
    -
  • The World
  • -
  • Outreach
  • -
  • Relationship Building
  • +
  • The World
  • +
  • Outreach
  • +
  • Relationship Building
-
Come and Grow
+
Come and Grow
    -
  • Growing Believers
  • -
  • Building Faith
  • -
  • Jesus Started Here
  • +
  • Growing Believers
  • +
  • Building Faith
  • +
  • Jesus Started Here
-
Come and Follow
+
Come and Follow
    -
  • Workers
  • -
  • Equipping
  • -
  • Jesus Invited Some
  • +
  • Workers
  • +
  • Equipping
  • +
  • Jesus Invited Some
-
Come and Go
+
Come and Go
    -
  • Leadership
  • -
  • Multiplication
  • -
  • Jesus Sent Some
  • +
  • Leadership
  • +
  • Multiplication
  • +
  • Jesus Sent Some