feat: start implementing register page
This commit is contained in:
parent
7c6485d459
commit
5807c00b2f
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
/target
|
||||
*.db
|
||||
*.db*
|
||||
|
89
Cargo.lock
generated
89
Cargo.lock
generated
@ -236,6 +236,12 @@ dependencies = [
|
||||
"alloc-no-stdlib",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.71"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
|
||||
|
||||
[[package]]
|
||||
name = "argon2"
|
||||
version = "0.5.0"
|
||||
@ -488,8 +494,10 @@ name = "brass"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"actix-web",
|
||||
"anyhow",
|
||||
"argon2",
|
||||
"askama",
|
||||
"dotenv",
|
||||
"serde",
|
||||
"sqlx",
|
||||
]
|
||||
@ -669,6 +677,12 @@ dependencies = [
|
||||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dotenv"
|
||||
version = "0.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
|
||||
|
||||
[[package]]
|
||||
name = "dotenvy"
|
||||
version = "0.15.7"
|
||||
@ -736,6 +750,18 @@ dependencies = [
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "flume"
|
||||
version = "0.10.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"pin-project",
|
||||
"spin 0.9.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
@ -767,6 +793,17 @@ version = "0.3.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
|
||||
|
||||
[[package]]
|
||||
name = "futures-executor"
|
||||
version = "0.3.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-task",
|
||||
"futures-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-intrusive"
|
||||
version = "0.4.2"
|
||||
@ -833,6 +870,7 @@ dependencies = [
|
||||
"futures-task",
|
||||
"pin-project-lite",
|
||||
"pin-utils",
|
||||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1073,6 +1111,17 @@ version = "0.2.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
|
||||
|
||||
[[package]]
|
||||
name = "libsqlite3-sys"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.3.8"
|
||||
@ -1277,6 +1326,26 @@ version = "2.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
|
||||
|
||||
[[package]]
|
||||
name = "pin-project"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
|
||||
dependencies = [
|
||||
"pin-project-internal",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-internal"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.9"
|
||||
@ -1409,7 +1478,7 @@ dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"spin",
|
||||
"spin 0.5.2",
|
||||
"untrusted",
|
||||
"web-sys",
|
||||
"winapi",
|
||||
@ -1602,6 +1671,15 @@ version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
|
||||
|
||||
[[package]]
|
||||
name = "spin"
|
||||
version = "0.9.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlformat"
|
||||
version = "0.2.1"
|
||||
@ -1639,8 +1717,10 @@ dependencies = [
|
||||
"dotenvy",
|
||||
"either",
|
||||
"event-listener",
|
||||
"flume",
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-executor",
|
||||
"futures-intrusive",
|
||||
"futures-util",
|
||||
"hashlink",
|
||||
@ -1648,6 +1728,7 @@ dependencies = [
|
||||
"indexmap",
|
||||
"itoa",
|
||||
"libc",
|
||||
"libsqlite3-sys",
|
||||
"log",
|
||||
"memchr",
|
||||
"once_cell",
|
||||
@ -1917,6 +1998,12 @@ version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4d330786735ea358f3bc09eea4caa098569c1c93f342d9aca0514915022fe7e"
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
|
@ -6,8 +6,10 @@ edition = "2021"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
sqlx = { version = "0.6", features = [ "runtime-async-std-rustls" ] }
|
||||
sqlx = { version = "0.6", features = [ "runtime-async-std-rustls", "sqlite" ] }
|
||||
actix-web = { version = "4" }
|
||||
askama = "0.12.0"
|
||||
serde = { version = "1.0.164", features = [ "derive"]}
|
||||
argon2 = "0.5.0"
|
||||
anyhow = "1.0.71"
|
||||
dotenv = "0.15.0"
|
||||
|
@ -1,6 +1,17 @@
|
||||
CREATE TABLE IF NOT EXISTS roles
|
||||
(
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
definition TEXT NOT NULL
|
||||
);
|
||||
|
||||
INSERT OR REPLACE INTO roles(id, definition) values(1, "Default");
|
||||
INSERT OR REPLACE INTO roles(id, definition) values(2, "Administrator");
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users
|
||||
(
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
password TEXT NOT NULL
|
||||
password TEXT NOT NULL,
|
||||
role INTEGER NOT NULL,
|
||||
FOREIGN KEY(role) REFERENCES roles(roleId)
|
||||
);
|
||||
|
@ -1,12 +1,16 @@
|
||||
use actix_web::{Responder, web, HttpResponse};
|
||||
use askama::Template;
|
||||
use serde::Deserialize;
|
||||
use sqlx::sqlite::SqlitePool;
|
||||
|
||||
use crate::auth::utils::hash_plain_password;
|
||||
use crate::models::Role;
|
||||
|
||||
pub fn init(cfg: &mut web::ServiceConfig) {
|
||||
cfg.service(get_login);
|
||||
cfg.service(post_login);
|
||||
cfg.service(get_register);
|
||||
cfg.service(post_register);
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
@ -20,6 +24,11 @@ struct LoginForm {
|
||||
struct LoginTemplate {
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "register.html")]
|
||||
struct RegisterTemplate {
|
||||
roles: Vec<Role>
|
||||
}
|
||||
|
||||
#[actix_web::get("/login")]
|
||||
async fn get_login() -> impl Responder {
|
||||
@ -39,3 +48,27 @@ async fn post_login(web::Form(form): web::Form<LoginForm>) -> impl Responder {
|
||||
|
||||
"dfgdg"
|
||||
}
|
||||
|
||||
#[actix_web::get("/register")]
|
||||
async fn get_register(pool: web::Data<SqlitePool>) -> impl Responder {
|
||||
let roles = match Role::GetAll(pool.get_ref()).await {
|
||||
Ok(value) => value,
|
||||
Err(error) => return HttpResponse::InternalServerError().body(error.to_string())
|
||||
};
|
||||
|
||||
let bla = RegisterTemplate { roles };
|
||||
|
||||
HttpResponse::Ok()
|
||||
.body(bla.render().unwrap())
|
||||
}
|
||||
|
||||
#[actix_web::post("/register")]
|
||||
async fn post_register(web::Form(form): web::Form<LoginForm>) -> impl Responder {
|
||||
println!("{} - {}", form.name, form.password);
|
||||
|
||||
let hash = hash_plain_password(&form.password);
|
||||
|
||||
println!("{hash}");
|
||||
|
||||
"dfgdg"
|
||||
}
|
||||
|
30
src/main.rs
30
src/main.rs
@ -1,23 +1,25 @@
|
||||
use actix_web::{web, App, HttpServer, Responder};
|
||||
use std::env;
|
||||
|
||||
use actix_web::{App, HttpServer, web};
|
||||
use sqlx::sqlite::SqlitePool;
|
||||
use dotenv::dotenv;
|
||||
|
||||
mod auth;
|
||||
|
||||
async fn index() -> impl Responder {
|
||||
"Hello world!"
|
||||
}
|
||||
mod models;
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
HttpServer::new(|| {
|
||||
App::new().service(
|
||||
// prefixes all resources and routes attached to it...
|
||||
web::scope("/app")
|
||||
// ...so this handles requests for `GET /app/index.html`
|
||||
.route("/index.html", web::get().to(index)),
|
||||
)
|
||||
async fn main() -> anyhow::Result<()> {
|
||||
dotenv()?;
|
||||
let pool = SqlitePool::connect(&env::var("DATABASE_URL")?).await?;
|
||||
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.app_data(web::Data::new(pool.clone()))
|
||||
.configure(auth::init)
|
||||
})
|
||||
.bind(("127.0.0.1", 8080))?
|
||||
.run()
|
||||
.await
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
32
src/models/mod.rs
Normal file
32
src/models/mod.rs
Normal file
@ -0,0 +1,32 @@
|
||||
use sqlx::sqlite::SqlitePool;
|
||||
|
||||
pub struct Role {
|
||||
pub id: u8,
|
||||
pub definition: String
|
||||
}
|
||||
|
||||
impl Role {
|
||||
pub async fn GetAll(pool: &SqlitePool) -> anyhow::Result<Vec<Role>> {
|
||||
let records = sqlx::query!(
|
||||
r#"
|
||||
SELECT id, definition
|
||||
FROM roles
|
||||
ORDER BY id
|
||||
"#
|
||||
)
|
||||
.fetch_all(pool)
|
||||
.await?;
|
||||
|
||||
let mut result = Vec::new();
|
||||
|
||||
for record in records {
|
||||
let role = Role {
|
||||
id: record.id as u8,
|
||||
definition: record.definition,
|
||||
};
|
||||
result.push(role);
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
}
|
25
templates/register.html
Normal file
25
templates/register.html
Normal file
@ -0,0 +1,25 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Brass - Register</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Brass - Registrierung</h1>
|
||||
<p>Gib dein Nutzernamen und das Passwort ein:</p>
|
||||
<form>
|
||||
<label for="name">Nutzername:</label>
|
||||
<input name="name" type="text">
|
||||
|
||||
<label for="password">Passwort:</label>
|
||||
<input name="password" type="password">
|
||||
|
||||
<label for="role">Rolle:</label>
|
||||
<select name="role">
|
||||
{% for role in roles %}
|
||||
<option value="{{ role.id }}">{{ role.definition }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<input type="submit" formmethod="post">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user