diff options
author | Galen Guyer <galen@galenguyer.com> | 2022-04-15 23:12:31 -0400 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2022-04-15 23:14:09 -0400 |
commit | bba5bbcf7729b5fbdf45473921d517b93a97b95d (patch) | |
tree | 69daaf7162a57ef89edce760e13db376dea898bb | |
parent | 3d2681c140e6b2be39ad29a0a76f393d12eb30e1 (diff) |
use uuid for users
-rw-r--r-- | Cargo.lock | 149 | ||||
-rw-r--r-- | Cargo.toml | 3 | ||||
-rw-r--r-- | migrations/2022-04-09-create-schema.sql | 4 | ||||
-rw-r--r-- | src/db/models.rs | 3 | ||||
-rw-r--r-- | src/routes/v1/users.rs | 6 |
5 files changed, 62 insertions, 103 deletions
@@ -141,15 +141,6 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" @@ -292,16 +283,6 @@ dependencies = [ ] [[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] name = "darling" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -338,20 +319,11 @@ dependencies = [ [[package]] name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "digest" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ - "block-buffer 0.10.2", + "block-buffer", "crypto-common", "subtle", ] @@ -407,6 +379,12 @@ dependencies = [ ] [[package]] +name = "event-listener" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" + +[[package]] name = "fastrand" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -424,7 +402,7 @@ dependencies = [ "bcrypt", "chrono", "dotenvy", - "hmac 0.12.1", + "hmac", "jwt", "lazy_static", "log", @@ -433,13 +411,14 @@ dependencies = [ "rand", "serde", "serde_json", - "sha2 0.10.2", + "sha2", "sqlx", "tokio", "totp-rs", "tower", "tower-http", "tracing-subscriber", + "uuid", ] [[package]] @@ -585,9 +564,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" dependencies = [ "unicode-segmentation", ] @@ -608,13 +587,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "hmac" -version = "0.11.0" +name = "hkdf" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "crypto-mac", - "digest 0.9.0", + "hmac", ] [[package]] @@ -623,7 +601,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.3", + "digest", ] [[package]] @@ -786,11 +764,11 @@ checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f" dependencies = [ "base64", "crypto-common", - "digest 0.10.3", - "hmac 0.12.1", + "digest", + "hmac", "serde", "serde_json", - "sha2 0.10.2", + "sha2", ] [[package]] @@ -838,13 +816,11 @@ checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" [[package]] name = "md-5" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" +checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582" dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] @@ -961,12 +937,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" [[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] name = "openssl" version = "0.10.38" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1399,39 +1369,13 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha-1" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] @@ -1442,7 +1386,7 @@ checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.3", + "digest", ] [[package]] @@ -1504,9 +1448,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc15591eb44ffb5816a4a70a7efd5dd87bfd3aa84c4c200401c4396140525826" +checksum = "551873805652ba0d912fec5bbb0f8b4cdd96baf8e2ebf5970e5671092966019b" dependencies = [ "sqlx-core", "sqlx-macros", @@ -1514,9 +1458,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195183bf6ff8328bb82c0511a83faf60aacf75840103388851db61d7a9854ae3" +checksum = "e48c61941ccf5ddcada342cd59e3e5173b007c509e1e8e990dafc830294d9dc5" dependencies = [ "ahash", "atoi", @@ -1529,13 +1473,15 @@ dependencies = [ "crossbeam-queue", "dirs", "either", + "event-listener", "futures-channel", "futures-core", "futures-intrusive", "futures-util", "hashlink", "hex", - "hmac 0.11.0", + "hkdf", + "hmac", "indexmap", "itoa", "libc", @@ -1549,8 +1495,8 @@ dependencies = [ "rustls", "serde", "serde_json", - "sha-1 0.9.8", - "sha2 0.9.9", + "sha-1", + "sha2", "smallvec", "sqlformat", "sqlx-rt", @@ -1558,6 +1504,7 @@ dependencies = [ "thiserror", "tokio-stream", "url", + "uuid", "webpki", "webpki-roots", "whoami", @@ -1565,9 +1512,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee35713129561f5e55c554bba1c378e2a7e67f81257b7311183de98c50e6f94" +checksum = "bc0fba2b0cae21fc00fe6046f8baa4c7fcb49e379f0f592b04696607f69ed2e1" dependencies = [ "dotenv", "either", @@ -1575,7 +1522,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "sha2 0.9.9", + "sha2", "sqlx-core", "sqlx-rt", "syn", @@ -1584,9 +1531,9 @@ dependencies = [ [[package]] name = "sqlx-rt" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b555e70fbbf84e269ec3858b7a6515bcfe7a166a7cc9c636dd6efd20431678b6" +checksum = "4db708cd3e459078f85f39f96a00960bd841f66ee2a669e90bf36907f5a79aae" dependencies = [ "once_cell", "tokio", @@ -1784,9 +1731,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d09dc5fcc745500594f90020fdbcbbff029d1ca1f08f2940617f7ab697c17729" dependencies = [ "base32", - "hmac 0.12.1", - "sha-1 0.10.0", - "sha2 0.10.2", + "hmac", + "sha-1", + "sha2", ] [[package]] @@ -1961,6 +1908,16 @@ dependencies = [ ] [[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -22,11 +22,12 @@ rand = "0.8.5" serde = { version = "1.0.136", features = ["derive"] } serde_json = "1.0.79" sha2 = "0.10.2" -sqlx = { version = "0.5.11", features = ["postgres", "runtime-tokio-rustls", "chrono"] } +sqlx = { version = "0.5.13", features = ["postgres", "runtime-tokio-rustls", "chrono", "uuid"] } tokio = { version = "1.17.0", features = ["full"] } totp-rs = "0.7.4" tower = "0.4.12" tower-http = { version = "0.2.5", features = ["cors", "trace"] } tracing-subscriber = "0.3.11" +uuid = { version = "0.8.2", features = ["serde", "v4"] } [features] diff --git a/migrations/2022-04-09-create-schema.sql b/migrations/2022-04-09-create-schema.sql index 238020f..720f3fa 100644 --- a/migrations/2022-04-09-create-schema.sql +++ b/migrations/2022-04-09-create-schema.sql @@ -1,7 +1,7 @@ CREATE extension IF NOT EXISTS "uuid-ossp"; CREATE TABLE users ( - id varchar(64) PRIMARY KEY DEFAULT uuid_generate_v4(), + id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), email varchar(255) NOT NULL UNIQUE, password varchar(255) NOT NULL, display_name varchar(255), @@ -16,7 +16,7 @@ CREATE TABLE zones ( id varchar(255) NOT NULL UNIQUE PRIMARY KEY, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT (now() AT TIME ZONE 'UTC'), modified_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT (now() AT TIME ZONE 'UTC'), - owner_uuid varchar(64) NOT NULL, + owner_uuid uuid NOT NULL, constraint owner_uuid_fk foreign key (owner_uuid) references users (id) ); diff --git a/src/db/models.rs b/src/db/models.rs index 6e2e50a..eec5a41 100644 --- a/src/db/models.rs +++ b/src/db/models.rs @@ -1,10 +1,11 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; +use sqlx::types::Uuid; use sqlx::FromRow; #[derive(Serialize, Deserialize, FromRow, Debug)] pub struct User { - pub id: String, + pub id: Uuid, pub email: String, #[serde(skip_serializing)] pub password: String, diff --git a/src/routes/v1/users.rs b/src/routes/v1/users.rs index 0046b61..52e86f4 100644 --- a/src/routes/v1/users.rs +++ b/src/routes/v1/users.rs @@ -11,8 +11,7 @@ use lazy_static::lazy_static; use serde_json::json; use sha2::Sha256; use sqlx::{Error, Pool, Postgres}; -use std::collections::BTreeMap; -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; use std::env; use std::sync::Arc; @@ -122,10 +121,11 @@ pub async fn login( .to_string(); let dn = user.display_name.unwrap_or_else(|| "".to_string()); let admin = user.admin.to_string(); + let sub = user.id.to_string(); // https://www.iana.org/assignments/jwt/jwt.xhtml claims.insert("iss", "fdns"); - claims.insert("sub", &user.id); + claims.insert("sub", &sub); claims.insert("iat", &iat); claims.insert("exp", &exp); claims.insert("dn", &dn); |