From 45505a4b58e9c49912c761cc1eb9d3450012f949 Mon Sep 17 00:00:00 2001 From: Justin Kilpatrick Date: Wed, 8 Nov 2023 14:27:45 -0500 Subject: [PATCH] Fix sms reg functions We switched to Telnyx for SMS registration functions a while ago, so we don't actually have api keys to run the previous code. Also the phone number parsing logic has been refined to be slightly less complicated. --- Cargo.lock | 230 ++++++++-------- integration_tests/Cargo.toml | 1 + integration_tests/src/registration_server.rs | 1 + integration_tests/src/utils.rs | 7 +- rita_client_registration/src/lib.rs | 274 +++++++++++-------- 5 files changed, 280 insertions(+), 233 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ebe65994..6a809fbc5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -55,7 +55,7 @@ dependencies = [ "actix-service", "actix-tls", "actix-utils", - "ahash 0.8.5", + "ahash 0.8.6", "base64 0.21.5", "bitflags 2.4.1", "brotli", @@ -91,7 +91,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -192,7 +192,7 @@ dependencies = [ "actix-service", "actix-tls", "actix-utils", - "ahash 0.8.5", + "ahash 0.8.6", "bytes", "bytestring", "cfg-if", @@ -239,7 +239,7 @@ checksum = "7c7db3d5a9718568e4cf4a537cfd7070e6e6ff7481510d0237fb529ac850f6d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -270,9 +270,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7d5a2cecb58716e47d67d5703a249964b14c7be1ec3cad3affc295b2d1c35d" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "getrandom", @@ -424,7 +424,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -435,7 +435,7 @@ checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -444,7 +444,7 @@ version = "0.1.5" dependencies = [ "actix", "clarity", - "futures 0.3.28", + "futures 0.3.29", "log", "num", "num256", @@ -711,9 +711,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.5.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -761,9 +761,9 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "bytestring" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae" +checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" dependencies = [ "bytes", ] @@ -832,7 +832,7 @@ dependencies = [ "awc", "backoff", "flate2", - "futures 0.3.28", + "futures 0.3.29", "lazy_static", "log", "serde", @@ -887,9 +887,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbc60abd742b35f2492f808e1abbb83d45f72db402e14c55057edc9c7b1e9e4" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1121,9 +1121,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" dependencies = [ "libc", "windows-sys", @@ -1204,9 +1204,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -1219,9 +1219,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -1229,15 +1229,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -1246,38 +1246,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures 0.1.31", "futures-channel", @@ -1332,9 +1332,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "libc", @@ -1401,7 +1401,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.5", + "ahash 0.8.6", ] [[package]] @@ -1575,9 +1575,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", "hashbrown 0.14.2", @@ -1612,7 +1612,7 @@ dependencies = [ "diesel_migrations", "docopt", "env_logger", - "futures 0.3.28", + "futures 0.3.29", "ipnetwork", "lazy_static", "log", @@ -1620,6 +1620,7 @@ dependencies = [ "num-traits", "num256", "petgraph", + "phonenumber", "rita_client", "rita_client_registration", "rita_common", @@ -1711,9 +1712,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" dependencies = [ "wasm-bindgen", ] @@ -1766,9 +1767,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.149" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libsodium-sys" @@ -1790,15 +1791,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "local-channel" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a493488de5f18c8ffcba89eebb8532ffc562dc400490eb65b84893fae0b178" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" dependencies = [ "futures-core", "futures-sink", @@ -1807,9 +1808,9 @@ dependencies = [ [[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" @@ -2144,9 +2145,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.57" +version = "0.10.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" dependencies = [ "bitflags 2.4.1", "cfg-if", @@ -2165,7 +2166,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2176,18 +2177,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.1.5+3.1.3" +version = "300.1.6+3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491" +checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.93" +version = "0.9.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" dependencies = [ "cc", "libc", @@ -2225,7 +2226,7 @@ checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", + "redox_syscall", "smallvec", "windows-targets", ] @@ -2283,7 +2284,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2304,7 +2305,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.2", + "indexmap 2.1.0", ] [[package]] @@ -2345,7 +2346,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2425,7 +2426,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2528,15 +2529,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -2717,7 +2709,7 @@ dependencies = [ "clarity", "clu", "compressed_log", - "futures 0.3.28", + "futures 0.3.29", "hex-literal", "ipnetwork", "lazy_static", @@ -2747,7 +2739,7 @@ dependencies = [ "althea_types", "awc", "clarity", - "futures 0.3.28", + "futures 0.3.29", "lazy_static", "log", "num-traits", @@ -2780,7 +2772,7 @@ dependencies = [ "deep_space", "env_logger", "flate2", - "futures 0.3.28", + "futures 0.3.29", "ipnetwork", "lazy_static", "log", @@ -2925,9 +2917,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.20" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ce50cb2e16c2903e30d1cbccfd8387a74b9d4c938b6a4c5ec6cc7556f7a8a0" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ "bitflags 2.4.1", "errno", @@ -3107,9 +3099,9 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.189" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] @@ -3126,20 +3118,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -3331,9 +3323,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", @@ -3375,13 +3367,13 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand 2.0.1", - "redox_syscall 0.3.5", + "redox_syscall", "rustix", "windows-sys", ] @@ -3409,7 +3401,7 @@ dependencies = [ "deep_space", "docopt", "env_logger", - "futures 0.3.28", + "futures 0.3.29", "integration_tests", "log", "rita_client_registration", @@ -3433,7 +3425,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3517,7 +3509,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3565,9 +3557,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -3670,7 +3662,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3786,9 +3778,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3796,24 +3788,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" dependencies = [ "cfg-if", "js-sys", @@ -3823,9 +3815,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3833,28 +3825,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" dependencies = [ "js-sys", "wasm-bindgen", @@ -3868,7 +3860,7 @@ checksum = "3419dff65e026307b5df735b38df61d590a0d57e8040e545d1d1f433cbd0b621" dependencies = [ "awc", "clarity", - "futures 0.3.28", + "futures 0.3.29", "lazy_static", "log", "num-traits", @@ -4003,22 +3995,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.12" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8db0ac2df3d060f81ec0380ccc5b71c2a7c092cfced671feeee1320e95559c87" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.12" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b6093bc6d5265ff40b479c834cdd25d8e20784781a2a29a8106327393d0a9ff" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] diff --git a/integration_tests/Cargo.toml b/integration_tests/Cargo.toml index 0280be4c1..7d2d17c0b 100644 --- a/integration_tests/Cargo.toml +++ b/integration_tests/Cargo.toml @@ -39,3 +39,4 @@ lazy_static = "1.4" actix-web = { version = "4.3", default_features = false, features = [ "openssl", ] } +phonenumber = "0.3" diff --git a/integration_tests/src/registration_server.rs b/integration_tests/src/registration_server.rs index 3c6df471b..f1cea6c1a 100644 --- a/integration_tests/src/registration_server.rs +++ b/integration_tests/src/registration_server.rs @@ -69,6 +69,7 @@ async fn register_router(client: Json) -> HttpResponse { handle_sms_registration( client, "dummy key".to_string(), + "dummy-id".to_string(), Some(get_test_runner_magic_phone()), ) .await, diff --git a/integration_tests/src/utils.rs b/integration_tests/src/utils.rs index 4529cbe60..f0855f8b1 100644 --- a/integration_tests/src/utils.rs +++ b/integration_tests/src/utils.rs @@ -30,6 +30,7 @@ use nix::{ sched::{setns, CloneFlags}, sys::stat::Mode, }; +use phonenumber::PhoneNumber; use rita_client_registration::client_db::{add_exit_admin, add_exit_to_exit_list}; use rita_common::{ debt_keeper::GetDebtsResult, @@ -145,8 +146,8 @@ pub fn get_eth_node() -> String { format!("http://{}:8545", NODE_IP) } -pub fn get_test_runner_magic_phone() -> String { - "+17040000000".to_string() +pub fn get_test_runner_magic_phone() -> PhoneNumber { + "+17040000000".parse().unwrap() } pub async fn deploy_contracts() -> Address { @@ -389,7 +390,7 @@ pub fn get_default_settings( let mut client = client.clone(); client.exit_client.contact_info = Some( ContactType::Both { - number: get_test_runner_magic_phone().parse().unwrap(), + number: get_test_runner_magic_phone(), email: "fake@fake.com".parse().unwrap(), sequence_number: Some(0), } diff --git a/rita_client_registration/src/lib.rs b/rita_client_registration/src/lib.rs index 19f768ad3..ce2ce192d 100644 --- a/rita_client_registration/src/lib.rs +++ b/rita_client_registration/src/lib.rs @@ -1,11 +1,14 @@ #![deny(unused_crate_dependencies)] use std::{ collections::{HashMap, HashSet}, + error::Error, + fmt::Display, sync::{Arc, RwLock}, time::Duration, }; use althea_types::{ExitClientIdentity, Identity, WgKey}; +use awc::error::SendRequestError; use phonenumber::PhoneNumber; use serde::{Deserialize, Serialize}; @@ -30,9 +33,29 @@ pub const TX_TIMEOUT: Duration = Duration::from_secs(60); /// Return struct from check_text and Send Text. Verified indicates status from api http req, /// bad phone number is an error parsing clients phone number /// Internal server error is an error while querying api endpoint -enum TextApiError { +#[derive(Debug)] +pub enum TextApiError { BadPhoneNumber, InternalServerError { error: String }, + SendRequestError { error: SendRequestError }, +} + +impl Display for TextApiError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + TextApiError::BadPhoneNumber => write!(f, "InvalidPhoneNumber"), + TextApiError::InternalServerError { error } => write!(f, "Internal error {}", error), + TextApiError::SendRequestError { error } => write!(f, "{}", error), + } + } +} + +impl Error for TextApiError {} + +impl From for TextApiError { + fn from(value: SendRequestError) -> Self { + TextApiError::SendRequestError { error: value } + } } /// Return struct from Registration server to exit @@ -94,7 +117,8 @@ pub struct SmsRequest { pub async fn handle_sms_registration( client: ExitClientIdentity, api_key: String, - magic_number: Option, + verify_profile_id: String, + magic_number: Option, ) -> ExitSignupReturn { info!( "Handling phone registration for {}", @@ -107,70 +131,92 @@ pub async fn handle_sms_registration( let text_num = get_texts_sent(client.global.wg_public_key); let sent_more_than_allowed_texts = text_num > 10; - match ( - client.reg_details.phone.clone(), - client.reg_details.phone_code.clone(), - sent_more_than_allowed_texts, - ) { - // all texts exhausted, but they can still submit the correct code - (Some(number), Some(code), true) => { - let is_magic = - magic_phone_number.is_some() && magic_phone_number.unwrap() == number.clone(); - let result = is_magic || { - match check_text(number.clone(), code, api_key).await { - Ok(a) => a, - Err(e) => return return_api_error(e), - } - }; - if result { - info!( - "Phone registration complete for {}", - client.global.wg_public_key - ); - - add_client_to_reg_batch(client.global); - reset_texts_sent(client.global.wg_public_key); - ExitSignupReturn::RegistrationOk - } else { - ExitSignupReturn::PendingRegistration - } - } - // user has exhausted attempts but is still not submitting code - (Some(_number), None, true) => ExitSignupReturn::PendingRegistration, - // user has attempts remaining and is requesting the code be resent - (Some(number), None, false) => { - if let Err(e) = send_text(number, api_key).await { - return return_api_error(e); - } - increment_texts_sent(client.global.wg_public_key); - ExitSignupReturn::PendingRegistration - } - // user has attempts remaining and is submitting a code - (Some(number), Some(code), false) => { - let is_magic = - magic_phone_number.is_some() && magic_phone_number.unwrap() == number.clone(); - - let result = is_magic || { - match check_text(number.clone(), code, api_key).await { - Ok(a) => a, - Err(e) => return return_api_error(e), + match client.reg_details.phone { + Some(number) => match number.parse() { + Ok(number) => { + let number: PhoneNumber = number; + match ( + client.reg_details.phone_code.clone(), + sent_more_than_allowed_texts, + ) { + // all texts exhausted, but they can still submit the correct code + (Some(code), true) => { + let is_magic = magic_phone_number.is_some() + && magic_phone_number.unwrap() == number.clone(); + let result = is_magic || { + match check_sms_auth_result( + number.clone(), + code, + api_key, + verify_profile_id, + ) + .await + { + Ok(a) => a, + Err(e) => return return_api_error(e), + } + }; + if result { + info!( + "Phone registration complete for {}", + client.global.wg_public_key + ); + + add_client_to_reg_batch(client.global); + reset_texts_sent(client.global.wg_public_key); + ExitSignupReturn::RegistrationOk + } else { + ExitSignupReturn::PendingRegistration + } + } + // user has exhausted attempts but is still not submitting code + (None, true) => ExitSignupReturn::PendingRegistration, + // user has attempts remaining and is requesting the code be resent + (None, false) => { + if let Err(e) = + start_sms_auth_flow(number, api_key, verify_profile_id).await + { + return return_api_error(e); + } + increment_texts_sent(client.global.wg_public_key); + ExitSignupReturn::PendingRegistration + } + // user has attempts remaining and is submitting a code + (Some(code), false) => { + let is_magic = magic_phone_number.is_some() + && magic_phone_number.unwrap() == number.clone(); + + let result = is_magic || { + match check_sms_auth_result( + number.clone(), + code, + api_key, + verify_profile_id, + ) + .await + { + Ok(a) => a, + Err(e) => return return_api_error(e), + } + }; + trace!("Check text returned {}", result); + if result { + info!( + "Phone registration complete for {}", + client.global.wg_public_key + ); + add_client_to_reg_batch(client.global); + reset_texts_sent(client.global.wg_public_key); + ExitSignupReturn::RegistrationOk + } else { + ExitSignupReturn::PendingRegistration + } + } } - }; - trace!("Check text returned {}", result); - if result { - info!( - "Phone registration complete for {}", - client.global.wg_public_key - ); - add_client_to_reg_batch(client.global); - reset_texts_sent(client.global.wg_public_key); - ExitSignupReturn::RegistrationOk - } else { - ExitSignupReturn::PendingRegistration } - } - // user did not submit a phonenumber - (None, _, _) => ExitSignupReturn::BadPhoneNumber, + Err(_) => ExitSignupReturn::BadPhoneNumber, + }, + None => ExitSignupReturn::BadPhoneNumber, } } @@ -180,74 +226,80 @@ fn return_api_error(e: TextApiError) -> ExitSignupReturn { TextApiError::InternalServerError { error } => { ExitSignupReturn::InternalServerError { e: error } } + TextApiError::SendRequestError { error } => ExitSignupReturn::InternalServerError { + e: error.to_string(), + }, } } +#[derive(Serialize)] +pub struct TelnyxSmsAuthCheck { + verify_profile_id: String, + code: String, +} + /// Posts to the validation endpoint with the code, will return success if the code /// is the same as the one sent to the user -async fn check_text(number: String, code: String, api_key: String) -> Result { - trace!("About to check text message status for {}", number); - let number: PhoneNumber = match number.parse() { - Ok(number) => number, - Err(e) => { - error!("Phone parse error: {}", e); - return Err(TextApiError::BadPhoneNumber); - } - }; - let url = "https://api.authy.com/protected/json/phones/verification/check"; +pub async fn check_sms_auth_result( + number: PhoneNumber, + code: String, + bearer_key: String, + verify_profile_id: String, +) -> Result { + info!("About to check text message status for {}", number); + + let check_url = format!( + "https://api.telnyx.com/v2/verifications/by_phone_number/{}/actions/verify", + number + ); let client = awc::Client::default(); - let response = match client - .get(url) - .send_form(&SmsCheck { - api_key, - verification_code: code, - phone_number: number.national().to_string(), - country_code: number.code().value().to_string(), + match client + .post(check_url) + .bearer_auth(bearer_key) + .send_json(&TelnyxSmsAuthCheck { + verify_profile_id, + code, }) .await { - Ok(a) => a, + Ok(a) => Ok(a.status().is_success()), Err(e) => { - return Err(TextApiError::InternalServerError { - error: e.to_string(), - }) + error!("Failed to verify code with {:?}", e); + Err(e.into()) } - }; - - trace!("Got {} back from check text", response.status()); - Ok(response.status().is_success()) + } } -/// Sends the authy verification text by hitting the api endpoint -async fn send_text(number: String, api_key: String) -> Result<(), TextApiError> { - info!("Sending message for {}", number); - let url = "https://api.authy.com/protected/json/phones/verification/start"; - let number: PhoneNumber = match number.parse() { - Ok(number) => number, - Err(e) => { - error!("Parse phone number error {}", e); - return Err(TextApiError::BadPhoneNumber); - } - }; +#[derive(Serialize)] +pub struct TelnyxAuthMessage { + /// user target number + pub phone_number: String, + pub verify_profile_id: String, +} +/// Url for sending auth code +const URL_START: &str = "https://api.telnyx.com/v2/verifications/sms"; +pub async fn start_sms_auth_flow( + phone_number: PhoneNumber, + bearer_key: String, + verify_profile_id: String, +) -> Result<(), TextApiError> { let client = awc::Client::default(); match client - .post(url) - .send_form(&SmsRequest { - api_key, - via: "sms".to_string(), - phone_number: number.national().to_string(), - country_code: number.code().value().to_string(), + .post(URL_START) + .bearer_auth(bearer_key) + .timeout(Duration::from_secs(1)) + .send_json(&TelnyxAuthMessage { + phone_number: phone_number.to_string(), + verify_profile_id, }) .await { - Ok(_a) => Ok(()), + Ok(_) => Ok(()), Err(e) => { - error!("Send text error! {}", e); - Err(TextApiError::InternalServerError { - error: e.to_string(), - }) + error!("auth text error {:?}", e); + Err(e.into()) } } }