summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalen Guyer <galen@galenguyer.com>2022-04-15 23:12:31 -0400
committerGalen Guyer <galen@galenguyer.com>2022-04-15 23:14:09 -0400
commitbba5bbcf7729b5fbdf45473921d517b93a97b95d (patch)
tree69daaf7162a57ef89edce760e13db376dea898bb
parent3d2681c140e6b2be39ad29a0a76f393d12eb30e1 (diff)
use uuid for users
-rw-r--r--Cargo.lock149
-rw-r--r--Cargo.toml3
-rw-r--r--migrations/2022-04-09-create-schema.sql4
-rw-r--r--src/db/models.rs3
-rw-r--r--src/routes/v1/users.rs6
5 files changed, 62 insertions, 103 deletions
diff --git a/Cargo.lock b/Cargo.lock
index d6d00af..bfd4877 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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"
diff --git a/Cargo.toml b/Cargo.toml
index 09b74c9..a025ab3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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);