diff --git a/database/.env b/.env similarity index 100% rename from database/.env rename to .env diff --git a/Cargo.lock b/Cargo.lock index c5e95a1..f6e5c6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -361,12 +361,44 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" +[[package]] +name = "bcrypt" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6378bd17c4830c1b7ed644dde88f247b1560d46c68ff3da1b788984b09c0df31" +dependencies = [ + "base64 0.12.3", + "blowfish", + "byteorder", + "getrandom", +] + [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "block-cipher" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blowfish" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d01392750dd899a2528948d6b856afe2df508d627fc7c339868c0bd0141b4b" +dependencies = [ + "block-cipher", + "byteorder", + "opaque-debug", +] + [[package]] name = "brotli-sys" version = "0.3.2" @@ -475,6 +507,34 @@ dependencies = [ "syn", ] +[[package]] +name = "diesel" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2de9deab977a153492a1468d1b1c0662c1cf39e5ea87d0c060ecd59ef18d8c" +dependencies = [ + "byteorder", + "diesel_derives", + "libsqlite3-sys", +] + +[[package]] +name = "diesel_derives" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + [[package]] name = "dtoa" version = "0.4.6" @@ -681,6 +741,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "generic-array" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac746a5f3bbfdadd6106868134545e684693d54d9d44f6e9588a7d54af0bf980" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.1.14" @@ -780,6 +850,9 @@ version = "0.1.0" dependencies = [ "actix-rt", "actix-web", + "bcrypt", + "diesel", + "dotenv", "futures", "jsonwebtoken", "serde", @@ -873,6 +946,16 @@ version = "0.2.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49" +[[package]] +name = "libsqlite3-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e704a02bcaecd4a08b93a23f6be59d0bd79cd161e0963e9499165a0a35df7bd" +dependencies = [ + "pkg-config", + "vcpkg", +] + [[package]] name = "linked-hash-map" version = "0.5.3" @@ -1064,6 +1147,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + [[package]] name = "parking_lot" version = "0.10.2" @@ -1137,6 +1226,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" + [[package]] name = "ppv-lite86" version = "0.2.8" @@ -1561,6 +1656,12 @@ dependencies = [ "trust-dns-proto", ] +[[package]] +name = "typenum" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" + [[package]] name = "unicode-bidi" version = "0.3.4" @@ -1608,6 +1709,18 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "vcpkg" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index 32f85d3..3b955e0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,6 @@ futures = "0.3.5" jsonwebtoken = "7.2.0" serde = "1.0" serde_json = "1.0" +diesel = { version = "1.4.4", features = ["sqlite"] } +dotenv = "0.15" +bcrypt = "0.8.1" diff --git a/database/Cargo.lock b/database/Cargo.lock deleted file mode 100644 index ec7b5d3..0000000 --- a/database/Cargo.lock +++ /dev/null @@ -1,196 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - -[[package]] -name = "bcrypt" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6378bd17c4830c1b7ed644dde88f247b1560d46c68ff3da1b788984b09c0df31" -dependencies = [ - "base64", - "blowfish", - "byteorder", - "getrandom", -] - -[[package]] -name = "block-cipher" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" -dependencies = [ - "generic-array", -] - -[[package]] -name = "blowfish" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d01392750dd899a2528948d6b856afe2df508d627fc7c339868c0bd0141b4b" -dependencies = [ - "block-cipher", - "byteorder", - "opaque-debug", -] - -[[package]] -name = "byteorder" -version = "1.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "database" -version = "0.1.0" -dependencies = [ - "bcrypt", - "diesel", - "dotenv", -] - -[[package]] -name = "diesel" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2de9deab977a153492a1468d1b1c0662c1cf39e5ea87d0c060ecd59ef18d8c" -dependencies = [ - "byteorder", - "diesel_derives", - "libsqlite3-sys", -] - -[[package]] -name = "diesel_derives" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - -[[package]] -name = "generic-array" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac746a5f3bbfdadd6106868134545e684693d54d9d44f6e9588a7d54af0bf980" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "libc" -version = "0.2.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f8082297d534141b30c8d39e9b1773713ab50fdbe4ff30f750d063b3bfd701" - -[[package]] -name = "libsqlite3-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e704a02bcaecd4a08b93a23f6be59d0bd79cd161e0963e9499165a0a35df7bd" -dependencies = [ - "pkg-config", - "vcpkg", -] - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "pkg-config" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" - -[[package]] -name = "proc-macro2" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quote" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "typenum" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "vcpkg" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" - -[[package]] -name = "version_check" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" diff --git a/database/Cargo.toml b/database/Cargo.toml deleted file mode 100644 index d491efe..0000000 --- a/database/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "database" -version = "0.1.0" -authors = ["Cameron Cordes "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -diesel = { version = "1.4.4", features = ["sqlite"] } -dotenv = "0.15" -bcrypt = "0.8.1" diff --git a/database/diesel.toml b/diesel.toml similarity index 77% rename from database/diesel.toml rename to diesel.toml index 92267c8..bfb01bc 100644 --- a/database/diesel.toml +++ b/diesel.toml @@ -2,4 +2,4 @@ # see diesel.rs/guides/configuring-diesel-cli [print_schema] -file = "src/schema.rs" +file = "src/database/schema.rs" diff --git a/database/migrations/.gitkeep b/migrations/.gitkeep similarity index 100% rename from database/migrations/.gitkeep rename to migrations/.gitkeep diff --git a/database/migrations/2020-07-08-000046_setup_auth/down.sql b/migrations/2020-07-08-000046_setup_auth/down.sql similarity index 100% rename from database/migrations/2020-07-08-000046_setup_auth/down.sql rename to migrations/2020-07-08-000046_setup_auth/down.sql diff --git a/database/migrations/2020-07-08-000046_setup_auth/up.sql b/migrations/2020-07-08-000046_setup_auth/up.sql similarity index 67% rename from database/migrations/2020-07-08-000046_setup_auth/up.sql rename to migrations/2020-07-08-000046_setup_auth/up.sql index f81a069..133d6ce 100644 --- a/database/migrations/2020-07-08-000046_setup_auth/up.sql +++ b/migrations/2020-07-08-000046_setup_auth/up.sql @@ -1,5 +1,5 @@ CREATE TABLE users ( - id INT PRIMARY KEY AUTOINCREMENT, + id INTEGER PRIMARY KEY NOT NULL, username TEXT NOT NULL, password TEXT NOT NULL ) diff --git a/database/src/lib.rs b/src/database/mod.rs similarity index 92% rename from database/src/lib.rs rename to src/database/mod.rs index 83c5fc6..e8c5cbe 100644 --- a/database/src/lib.rs +++ b/src/database/mod.rs @@ -1,15 +1,12 @@ -#[macro_use] -extern crate diesel; - use bcrypt::{hash, verify, DEFAULT_COST}; use diesel::prelude::*; use diesel::sqlite::SqliteConnection; use dotenv::dotenv; -use crate::models::{InsertUser, User}; +use crate::database::models::{InsertUser, User}; -pub mod models; -pub mod schema; +mod models; +mod schema; fn connect() -> SqliteConnection { dotenv().ok(); diff --git a/database/src/models.rs b/src/database/models.rs similarity index 62% rename from database/src/models.rs rename to src/database/models.rs index 241831c..5e22d11 100644 --- a/database/src/models.rs +++ b/src/database/models.rs @@ -1,4 +1,5 @@ -use crate::schema::users; +use crate::database::schema::users; +use serde::Serialize; #[derive(Insertable)] #[table_name = "users"] @@ -7,9 +8,10 @@ pub struct InsertUser<'a> { pub password: &'a str, } -#[derive(Queryable, Clone)] +#[derive(Serialize, Queryable, Clone, Debug)] pub struct User { pub id: i32, pub username: String, + #[serde(skip_serializing)] pub password: String, } diff --git a/database/src/schema.rs b/src/database/schema.rs similarity index 100% rename from database/src/schema.rs rename to src/database/schema.rs diff --git a/src/main.rs b/src/main.rs index 6030c6d..2d6f04c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,32 @@ +#[macro_use] +extern crate diesel; + use actix_web::web::{HttpResponse, Json}; use actix_web::{get, post, App, HttpServer, Responder}; use data::{LoginRequest, ThumbnailRequest}; use std::path::PathBuf; use crate::files::list_files; +use crate::database::{create_user, get_user}; mod data; +mod database; mod files; #[post("/register")] async fn register() -> impl Responder { + create_user("u", "p"); + println!("{:?}", get_user("u", "p")); "".to_owned() } #[post("/login")] -async fn login(_creds: Json) -> impl Responder { - "".to_owned() +async fn login(creds: Json) -> impl Responder { + if let Some(user) = get_user(&creds.username, &creds.password) { + HttpResponse::Ok().json(user) + } else { + HttpResponse::NotFound().finish() + } } #[get("/photos")] @@ -43,7 +54,7 @@ async fn list_photos(req: Json) -> impl Responder { #[actix_rt::main] async fn main() -> std::io::Result<()> { - HttpServer::new(|| App::new().service(login).service(list_photos)) + HttpServer::new(|| App::new().service(login).service(list_photos).service(register)) .bind("127.0.0.1:8088")? .run() .await