WIP: feat: add user details update
This commit is contained in:
parent
8285ca230c
commit
d908586dfa
27 changed files with 871 additions and 38 deletions
149
Cargo.lock
generated
149
Cargo.lock
generated
|
@ -209,6 +209,7 @@ dependencies = [
|
|||
"matchit",
|
||||
"memchr",
|
||||
"mime",
|
||||
"multer",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"rustversion",
|
||||
|
@ -291,6 +292,39 @@ dependencies = [
|
|||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum_typed_multipart"
|
||||
version = "0.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0412547e063ce471a3f5ccf8a5129ae5ff64c63e40ee1bf1079dec3fcede4e7"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"axum",
|
||||
"axum_typed_multipart_macros",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
"tempfile",
|
||||
"thiserror",
|
||||
"tokio",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum_typed_multipart_macros"
|
||||
version = "0.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bbb13e6a88be66ca8a226e4cee4d60eea0245bbdd4f22a95dfb90cbcf6be4b3"
|
||||
dependencies = [
|
||||
"darling",
|
||||
"heck 0.5.0",
|
||||
"proc-macro-error2",
|
||||
"quote",
|
||||
"syn 2.0.79",
|
||||
"ubyte",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.74"
|
||||
|
@ -505,6 +539,41 @@ dependencies = [
|
|||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.20.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"darling_macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_core"
|
||||
version = "0.20.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"strsim",
|
||||
"syn 2.0.79",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.20.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
"syn 2.0.79",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "der"
|
||||
version = "0.7.9"
|
||||
|
@ -552,6 +621,15 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding_rs"
|
||||
version = "0.8.34"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "env_filter"
|
||||
version = "0.1.2"
|
||||
|
@ -721,6 +799,17 @@ version = "0.3.31"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
|
||||
|
||||
[[package]]
|
||||
name = "futures-macro"
|
||||
version = "0.3.31"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.79",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "futures-sink"
|
||||
version = "0.3.31"
|
||||
|
@ -741,6 +830,7 @@ checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
|
|||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"futures-macro",
|
||||
"futures-sink",
|
||||
"futures-task",
|
||||
"memchr",
|
||||
|
@ -973,6 +1063,12 @@ dependencies = [
|
|||
"cc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ident_case"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.5.0"
|
||||
|
@ -1147,6 +1243,8 @@ dependencies = [
|
|||
"axum-extra",
|
||||
"axum-macros",
|
||||
"axum-template",
|
||||
"axum_typed_multipart",
|
||||
"base64 0.22.1",
|
||||
"chrono",
|
||||
"dotenvy",
|
||||
"env_logger",
|
||||
|
@ -1212,6 +1310,23 @@ dependencies = [
|
|||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "multer"
|
||||
version = "3.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"encoding_rs",
|
||||
"futures-util",
|
||||
"http",
|
||||
"httparse",
|
||||
"memchr",
|
||||
"mime",
|
||||
"spin",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "7.1.3"
|
||||
|
@ -1457,6 +1572,28 @@ dependencies = [
|
|||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr2"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error2"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr2",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.79",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.87"
|
||||
|
@ -2010,6 +2147,12 @@ dependencies = [
|
|||
"unicode-properties",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||
|
||||
[[package]]
|
||||
name = "strum_macros"
|
||||
version = "0.26.4"
|
||||
|
@ -2331,6 +2474,12 @@ version = "1.17.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
||||
|
||||
[[package]]
|
||||
name = "ubyte"
|
||||
version = "0.10.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f720def6ce1ee2fc44d40ac9ed6d3a59c361c80a75a7aa8e75bb9baed31cf2ea"
|
||||
|
||||
[[package]]
|
||||
name = "unicase"
|
||||
version = "2.7.0"
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
cargo-features = ["codegen-backend"]
|
||||
|
||||
[profile.dev]
|
||||
codegen-backend = "cranelift"
|
||||
|
||||
[package]
|
||||
name = "minauthator"
|
||||
description = "Identity provider and OAuth2 server for an small-scale organization."
|
||||
|
@ -32,7 +37,7 @@ sqlx = { version = "0.7.4", features = ["sqlite", "runtime-tokio", "chrono", "uu
|
|||
redis = { version = "0.27.3", default-features = false, features = ["acl"] }
|
||||
|
||||
# Web
|
||||
axum = { version = "0.7.7", features = ["json"] }
|
||||
axum = { version = "0.7.7", features = ["json", "multipart"] }
|
||||
axum-template = { version = "2.4.0", features = ["minijinja"] }
|
||||
minijinja = { version = "2.1", features = ["builtins"] }
|
||||
# to make work the static assets server
|
||||
|
@ -48,6 +53,8 @@ dotenvy = "0.15.7"
|
|||
frank_jwt = "3.1.3"
|
||||
jsonwebtoken = "9.3.0"
|
||||
axum-extra = { version = "0.9.4", features = ["cookie"] }
|
||||
axum_typed_multipart = "0.13.1"
|
||||
base64 = "0.22.1"
|
||||
|
||||
[build-dependencies]
|
||||
minijinja-embed = "2.3.1"
|
||||
|
|
|
@ -5,3 +5,8 @@
|
|||
- [x] register
|
||||
- [x] login
|
||||
- [ ] authorize
|
||||
|
||||
## Deps
|
||||
|
||||
- <https://github.com/murar8/axum_typed_multipart>
|
||||
|
||||
|
|
11
TODO.md
Normal file
11
TODO.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
# TODO
|
||||
|
||||
- [x] Login form
|
||||
- [x] Register form
|
||||
- [x] Generate JWT
|
||||
- Redirect to login form if unauthenticated
|
||||
- Authorize form
|
||||
- Select by app client id
|
||||
- Verify authorize
|
||||
- Select by app client secret
|
||||
- Upload picture
|
3
assets/style/app.css
Normal file
3
assets/style/app.css
Normal file
|
@ -0,0 +1,3 @@
|
|||
main {
|
||||
margin-top: 2rem;
|
||||
}
|
9
docs/API.md
Normal file
9
docs/API.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# API
|
||||
|
||||
## authorize
|
||||
|
||||
response_type=code
|
||||
client_id=XXXX
|
||||
redirect_uri=
|
||||
scope=
|
||||
state=
|
3
docs/draft.md
Normal file
3
docs/draft.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# OAuth2 spec
|
||||
|
||||
https://datatracker.ietf.org/doc/html/rfc6749
|
3
justfile
3
justfile
|
@ -16,3 +16,6 @@ docker-init-db:
|
|||
docker-build:
|
||||
docker build -t minauth .
|
||||
|
||||
init-db:
|
||||
sqlite3 -echo tmp/dbs/minauth.db < migrations/all.sql
|
||||
|
||||
|
|
0
locales/en.toml
Normal file
0
locales/en.toml
Normal file
0
locales/fr.toml
Normal file
0
locales/fr.toml
Normal file
|
@ -1,9 +1,9 @@
|
|||
DROP TABLE IF EXISTS users;
|
||||
CREATE TABLE users (
|
||||
id TEXT PRIMARY KEY,
|
||||
handle TEXT NOT NULL,
|
||||
handle TEXT NOT NULL UNIQUE,
|
||||
full_name TEXT,
|
||||
email TEXT,
|
||||
email TEXT UNIQUE,
|
||||
website TEXT,
|
||||
picture BLOB,
|
||||
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
use axum::{extract::State, http::HeaderMap, response::{Html, IntoResponse}};
|
||||
use axum::{extract::State, http::HeaderMap, response::{Html, IntoResponse}, Extension};
|
||||
use minijinja::context;
|
||||
|
||||
use crate::server::AppState;
|
||||
use crate::{server::AppState, services::session::TokenClaims};
|
||||
|
||||
|
||||
|
||||
pub async fn authorize_form(
|
||||
State(app_state): State<AppState>
|
||||
State(app_state): State<AppState>,
|
||||
Extension(token_claims): Extension<TokenClaims>
|
||||
) -> impl IntoResponse {
|
||||
// 1. Verify if login
|
||||
|
||||
// 1. Check if the app is already authorized
|
||||
// 2. Query the app details
|
||||
|
||||
Html(
|
||||
app_state.templating_env.get_template("pages/authorize.html").unwrap()
|
||||
|
|
|
@ -1,18 +1,118 @@
|
|||
use axum::{extract::State, response::{Html, IntoResponse}, Extension};
|
||||
use axum::{body::Bytes, extract::State, http::StatusCode, response::{Html, IntoResponse}, Extension};
|
||||
use axum_typed_multipart::{FieldData, TryFromMultipart, TypedMultipart};
|
||||
use base64::prelude::{Engine, BASE64_STANDARD};
|
||||
use fully_pub::fully_pub;
|
||||
use minijinja::context;
|
||||
|
||||
use crate::{server::AppState, services::session::TokenClaims};
|
||||
use crate::{models::user::User, server::AppState, services::session::TokenClaims};
|
||||
|
||||
pub async fn me_page(
|
||||
State(app_state): State<AppState>,
|
||||
Extension(token_claims): Extension<TokenClaims>
|
||||
) -> impl IntoResponse {
|
||||
|
||||
let user_res = sqlx::query_as::<_, User>("SELECT * FROM users WHERE id = $1")
|
||||
.bind(&token_claims.sub)
|
||||
.fetch_one(&app_state.db)
|
||||
.await
|
||||
.expect("To get user from claim");
|
||||
|
||||
Html(
|
||||
app_state.templating_env.get_template("pages/me.html").unwrap()
|
||||
app_state.templating_env.get_template("pages/me/index.html").unwrap()
|
||||
.render(context!(
|
||||
token_claims => token_claims
|
||||
user => user_res,
|
||||
user_picture => user_res.picture.map(|x| BASE64_STANDARD.encode(x))
|
||||
))
|
||||
.unwrap()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
pub async fn me_update_details_form(
|
||||
State(app_state): State<AppState>,
|
||||
Extension(token_claims): Extension<TokenClaims>
|
||||
) -> impl IntoResponse {
|
||||
|
||||
let user_res = sqlx::query_as::<_, User>("SELECT * FROM users WHERE id = $1")
|
||||
.bind(&token_claims.sub)
|
||||
.fetch_one(&app_state.db)
|
||||
.await
|
||||
.expect("To get user from claim");
|
||||
|
||||
Html(
|
||||
app_state.templating_env.get_template("pages/me/details-form.html").unwrap()
|
||||
.render(context!(
|
||||
user => user_res
|
||||
))
|
||||
.unwrap()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
#[fully_pub]
|
||||
#[derive(Debug, TryFromMultipart)]
|
||||
struct UserDetailsUpdateForm {
|
||||
handle: String,
|
||||
email: String,
|
||||
full_name: String,
|
||||
website: String,
|
||||
|
||||
#[form_data(limit = "5MiB")]
|
||||
picture: FieldData<Bytes>
|
||||
}
|
||||
|
||||
|
||||
pub async fn me_perform_update_details(
|
||||
State(app_state): State<AppState>,
|
||||
Extension(token_claims): Extension<TokenClaims>,
|
||||
TypedMultipart(details_update): TypedMultipart<UserDetailsUpdateForm>
|
||||
) -> impl IntoResponse {
|
||||
let template = app_state.templating_env.get_template("pages/me/details-form.html").unwrap();
|
||||
|
||||
let update_res = sqlx::query("UPDATE users SET handle = $2, email = $3, full_name = $4, website = $5, picture = $6 WHERE id = $1")
|
||||
.bind(&token_claims.sub)
|
||||
.bind(details_update.handle)
|
||||
.bind(details_update.email)
|
||||
.bind(details_update.full_name)
|
||||
.bind(details_update.website)
|
||||
.bind(details_update.picture.contents.to_vec())
|
||||
.execute(&app_state.db)
|
||||
.await;
|
||||
|
||||
dbg!(&update_res);
|
||||
|
||||
let user_res = sqlx::query_as::<_, User>("SELECT * FROM users WHERE id = $1")
|
||||
.bind(&token_claims.sub)
|
||||
.fetch_one(&app_state.db)
|
||||
.await
|
||||
.expect("To get user from claim");
|
||||
|
||||
match update_res {
|
||||
Ok(_) => {
|
||||
(
|
||||
StatusCode::OK,
|
||||
Html(
|
||||
template.render(context!(
|
||||
success => true,
|
||||
user => user_res
|
||||
))
|
||||
.unwrap()
|
||||
)
|
||||
).into_response()
|
||||
},
|
||||
Err(err) => {
|
||||
dbg!(&err);
|
||||
(
|
||||
StatusCode::BAD_REQUEST,
|
||||
Html(
|
||||
template.render(context!(
|
||||
error => Some("Cannot update user details".to_string()),
|
||||
user => user_res
|
||||
)).unwrap()
|
||||
)
|
||||
).into_response()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use axum::{extract::{Request, State}, http::{HeaderMap, StatusCode}, middleware::Next, response::{Response, Html, IntoResponse}};
|
||||
use axum::{extract::{Request, State}, http::StatusCode, middleware::Next, response::Response};
|
||||
use axum_extra::extract::CookieJar;
|
||||
|
||||
use crate::{server::AppState, services::session::verify_token};
|
||||
|
|
22
src/models/authorization.rs
Normal file
22
src/models/authorization.rs
Normal file
|
@ -0,0 +1,22 @@
|
|||
use fully_pub::fully_pub;
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
enum Permissions {
|
||||
ReadBasics
|
||||
}
|
||||
|
||||
#[derive(sqlx::FromRow, Deserialize, Serialize, Debug)]
|
||||
#[fully_pub]
|
||||
struct Authorization {
|
||||
/// uuid
|
||||
id: String,
|
||||
user_id: String,
|
||||
app_id: String,
|
||||
permissions: Vec<Permissions>,
|
||||
|
||||
last_used_at: Option<DateTime<Utc>>,
|
||||
created_at: DateTime<Utc>
|
||||
}
|
||||
|
|
@ -19,7 +19,7 @@ struct User {
|
|||
full_name: Option<String>,
|
||||
email: Option<String>,
|
||||
website: Option<String>,
|
||||
picture: Option<String>, // embeded blob to store profile pic
|
||||
picture: Option<Vec<u8>>, // embeded blob to store profile pic
|
||||
password_hash: Option<String>, // argon2 password hash
|
||||
status: UserStatus,
|
||||
activation_token: Option<String>,
|
||||
|
|
|
@ -13,6 +13,8 @@ pub fn build_router(server_config: &ServerConfig, app_state: AppState) -> Router
|
|||
|
||||
let user_routes = Router::new()
|
||||
.route("/me", get(ui::me::me_page))
|
||||
.route("/me/details-form", get(ui::me::me_update_details_form))
|
||||
.route("/me/details-form", post(ui::me::me_perform_update_details))
|
||||
.route("/logout", get(ui::logout::perform_logout))
|
||||
.route("/authorize", get(ui::authorize::authorize_form))
|
||||
.layer(middleware::from_fn_with_state(app_state, auth_middleware));
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
use fully_pub::fully_pub;
|
||||
use tower_http::services::ServeDir;
|
||||
use anyhow::{Result, Context, anyhow};
|
||||
use anyhow::{Result, Context};
|
||||
use log::info;
|
||||
use minijinja::{context, Environment};
|
||||
use sqlx::{Pool, Sqlite};
|
||||
|
|
|
@ -9,7 +9,8 @@ use crate::models::{config::AppSecrets, user::User};
|
|||
#[derive(Serialize, Deserialize, Clone)]
|
||||
#[fully_pub]
|
||||
struct TokenClaims {
|
||||
sub: String, // user id
|
||||
/// user id
|
||||
sub: String,
|
||||
exp: u64
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<footer class="d-flex flex-wrap justify-content-between align-items-center py-3 my-4 border-top">
|
||||
<p class="col-md-4 mb-0 text-muted">© 2022 Company, Inc</p>
|
||||
<div class="container-fluid">
|
||||
<p class="col-md-4 mb-0 text-muted">Minauth</p>
|
||||
|
||||
<a href="/" class="col-md-4 d-flex align-items-center justify-content-center mb-3 mb-md-0 me-md-auto link-dark text-decoration-none">
|
||||
<svg class="bi me-2" width="40" height="32"><use xlink:href="#bootstrap"></use></svg>
|
||||
</a>
|
||||
|
||||
<ul class="nav col-md-4 justify-content-end">
|
||||
<li class="nav-item"><a href="#" class="nav-link px-2 text-muted">Home</a></li>
|
||||
<li class="nav-item"><a href="#" class="nav-link px-2 text-muted">Features</a></li>
|
||||
<li class="nav-item"><a href="#" class="nav-link px-2 text-muted">Pricing</a></li>
|
||||
<li class="nav-item"><a href="#" class="nav-link px-2 text-muted">FAQs</a></li>
|
||||
<li class="nav-item"><a href="#" class="nav-link px-2 text-muted">About</a></li>
|
||||
<li class="nav-item"><a href="/" class="nav-link px-2 text-muted">Home</a></li>
|
||||
<li class="nav-item"><a href="/about" class="nav-link px-2 text-muted">About</a></li>
|
||||
<li class="nav-item"><a href="/help" class="nav-link px-2 text-muted">Help</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</footer>
|
||||
|
|
|
@ -1,21 +1,24 @@
|
|||
<header>
|
||||
<nav class="navbar navbar-expand-lg bg-body-tertiary">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">Minauth</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
<a class="navbar-brand" href="/">Minauth</a>
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="navbar-nav me-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" aria-current="page" href="#">Home</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="navbar-nav">
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/login">Login</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/register">Register</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/me">Me</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/logout">Logout</a>
|
||||
</li>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Minauth</title>
|
||||
<link href="/assets/node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="/assets/style/app.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
{% include "components/header.html" %}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<h1>Login</h1>
|
||||
<!-- Login form -->
|
||||
{% if error %}
|
||||
<div>
|
||||
<div class="alert alert-danger">
|
||||
Error: {{ error }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
{% extends "layouts/base.html" %}
|
||||
{% block body %}
|
||||
<h1>Me page</h1>
|
||||
|
||||
<p>
|
||||
{{ token_claims.sub }}
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
72
src/templates/pages/me/details-form.html
Normal file
72
src/templates/pages/me/details-form.html
Normal file
|
@ -0,0 +1,72 @@
|
|||
{% extends "layouts/base.html" %}
|
||||
{% block body %}
|
||||
<h1>Update your user details</h1>
|
||||
{% if error %}
|
||||
<div class="alert alert-danger">
|
||||
Error: {{ error }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if success %}
|
||||
<div class="alert alert-success">
|
||||
Your details have been updated.
|
||||
</div>
|
||||
{% endif %}
|
||||
<form
|
||||
id="register-form"
|
||||
enctype="multipart/form-data"
|
||||
method="post"
|
||||
>
|
||||
<div class="mb-3">
|
||||
<label for="handle" class="form-label">Handle</label>
|
||||
<input
|
||||
id="handle" name="handle" type="text"
|
||||
minlength="2"
|
||||
maxlength="255"
|
||||
required
|
||||
class="form-control"
|
||||
value="{{ user.handle }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="email">Email</label>
|
||||
<input
|
||||
id="email" name="email" type="email"
|
||||
required
|
||||
class="form-control"
|
||||
value="{{ user.email }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="full_name">Full name</label>
|
||||
<input
|
||||
id="full_name" name="full_name" type="text"
|
||||
maxlength="255"
|
||||
class="form-control"
|
||||
value="{{ user.full_name or '' }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="website">Public website</label>
|
||||
<input
|
||||
id="website" name="website" type="url"
|
||||
maxlength="512"
|
||||
class="form-control"
|
||||
value="{{ user.website or '' }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="picture">Profile picture</label>
|
||||
<!-- for now, no JPEG -->
|
||||
<input
|
||||
id="picture" name="picture"
|
||||
type="file"
|
||||
accept="image/gif, image/png, image/jpeg"
|
||||
class="form-control"
|
||||
>
|
||||
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">
|
||||
Update details
|
||||
</button>
|
||||
</form>
|
||||
{% endblock %}
|
27
src/templates/pages/me/index.html
Normal file
27
src/templates/pages/me/index.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
{% extends "layouts/base.html" %}
|
||||
{% block body %}
|
||||
<h1>Welcome {{ user.full_name or user.handle }}!</h1>
|
||||
|
||||
<a href="/me/details-form">Update details</a>
|
||||
|
||||
<p>
|
||||
{% if user_picture %}
|
||||
<img src="data:image/*;base64,{{ user_picture }}" style="width: 150px; height: 150px; object-fit: contain">
|
||||
{% endif %}
|
||||
<ul>
|
||||
<li>
|
||||
My user id: {{ user.id }}
|
||||
</li>
|
||||
<li>
|
||||
My handle: {{ user.handle }}
|
||||
</li>
|
||||
<li>
|
||||
My full name: {{ user.full_name }}
|
||||
</li>
|
||||
<li>
|
||||
My email: {{ user.email }}
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
422
tmp/dbs/test.csv
Normal file
422
tmp/dbs/test.csv
Normal file
|
@ -0,0 +1,422 @@
|
|||
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
|
||||
|
|
Loading…
Reference in a new issue