Implement server #3
1197
Cargo.lock
generated
1197
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -9,4 +9,6 @@ edition = "2021"
|
||||
log = "0.4.17"
|
||||
env_logger = "0.10.0"
|
||||
clap = {version="4.2.4", features=["derive", "env"]}
|
||||
lazy_static = "1.4.0"
|
||||
lazy_static = "1.4.0"
|
||||
actix-web = "4.3.1"
|
||||
askama = "0.12.0"
|
6
assets/bootstrap.min.css
vendored
Normal file
6
assets/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
123
assets/cover.css
Normal file
123
assets/cover.css
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Globals
|
||||
*/
|
||||
|
||||
|
||||
/* Custom default button */
|
||||
.btn-light,
|
||||
.btn-light:hover,
|
||||
.btn-light:focus {
|
||||
color: #333;
|
||||
text-shadow: none; /* Prevent inheritance from `body` */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Base structure
|
||||
*/
|
||||
|
||||
body {
|
||||
text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5);
|
||||
box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5);
|
||||
}
|
||||
|
||||
.cover-container {
|
||||
max-width: 42em;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Header
|
||||
*/
|
||||
|
||||
.nav-masthead .nav-link {
|
||||
color: rgba(255, 255, 255, .5);
|
||||
border-bottom: .25rem solid transparent;
|
||||
}
|
||||
|
||||
.nav-masthead .nav-link:hover,
|
||||
.nav-masthead .nav-link:focus {
|
||||
border-bottom-color: rgba(255, 255, 255, .25);
|
||||
}
|
||||
|
||||
.nav-masthead .nav-link + .nav-link {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.nav-masthead .active {
|
||||
color: #fff;
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.bd-placeholder-img {
|
||||
font-size: 1.125rem;
|
||||
text-anchor: middle;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.bd-placeholder-img-lg {
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.b-example-divider {
|
||||
width: 100%;
|
||||
height: 3rem;
|
||||
background-color: rgba(0, 0, 0, .1);
|
||||
border: solid rgba(0, 0, 0, .15);
|
||||
border-width: 1px 0;
|
||||
box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.b-example-vr {
|
||||
flex-shrink: 0;
|
||||
width: 1.5rem;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.bi {
|
||||
vertical-align: -.125em;
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
.nav-scroller {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
height: 2.75rem;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.nav-scroller .nav {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
padding-bottom: 1rem;
|
||||
margin-top: -1px;
|
||||
overflow-x: auto;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
.btn-bd-primary {
|
||||
--bd-violet-bg: #712cf9;
|
||||
--bd-violet-rgb: 112.520718, 44.062154, 249.437846;
|
||||
|
||||
--bs-btn-font-weight: 600;
|
||||
--bs-btn-color: var(--bs-white);
|
||||
--bs-btn-bg: var(--bd-violet-bg);
|
||||
--bs-btn-border-color: var(--bd-violet-bg);
|
||||
--bs-btn-hover-color: var(--bs-white);
|
||||
--bs-btn-hover-bg: #6528e0;
|
||||
--bs-btn-hover-border-color: #6528e0;
|
||||
--bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
|
||||
--bs-btn-active-color: var(--bs-btn-hover-color);
|
||||
--bs-btn-active-bg: #5a23c8;
|
||||
--bs-btn-active-border-color: #5a23c8;
|
||||
}
|
||||
.bd-mode-toggle {
|
||||
z-index: 1500;
|
||||
}
|
49
src/main.rs
49
src/main.rs
@ -1,3 +1,5 @@
|
||||
use actix_web::{get, App, HttpResponse, HttpServer};
|
||||
use askama::Template;
|
||||
use clap::Parser;
|
||||
|
||||
/// Basic OpenID test client
|
||||
@ -24,18 +26,59 @@ struct AppConfig {
|
||||
client_secret: String,
|
||||
}
|
||||
|
||||
impl AppConfig {
|
||||
pub fn redirect_url(&self) -> String {
|
||||
format!("{}/redirect", self.public_url)
|
||||
}
|
||||
}
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
static ref CONF: AppConfig = {
|
||||
AppConfig::parse()
|
||||
};
|
||||
}
|
||||
|
||||
fn main() {
|
||||
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
|
||||
#[get("/assets/bootstrap.min.css")]
|
||||
async fn bootstrap() -> HttpResponse {
|
||||
HttpResponse::Ok()
|
||||
.content_type("text/css")
|
||||
.body(include_str!("../assets/bootstrap.min.css"))
|
||||
}
|
||||
|
||||
#[get("/assets/cover.css")]
|
||||
async fn cover() -> HttpResponse {
|
||||
HttpResponse::Ok()
|
||||
.content_type("text/css")
|
||||
.body(include_str!("../assets/cover.css"))
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "home.html")]
|
||||
struct HomeTemplate {
|
||||
redirect_url: String,
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
async fn home() -> HttpResponse {
|
||||
HttpResponse::Ok().content_type("text/html").body(
|
||||
HomeTemplate {
|
||||
redirect_url: CONF.redirect_url(),
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
|
||||
log::info!("Will listen on {}", CONF.listen_addr);
|
||||
|
||||
println!("Hello, world!");
|
||||
HttpServer::new(|| App::new().service(bootstrap).service(cover).service(home))
|
||||
.bind(&CONF.listen_addr)
|
||||
.expect("Failed to bind server!")
|
||||
.run()
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
44
templates/home.html
Normal file
44
templates/home.html
Normal file
@ -0,0 +1,44 @@
|
||||
<!doctype html>
|
||||
<html lang="en" class="h-100" data-bs-theme="auto">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="OIDC basic test client">
|
||||
<meta name="author" content="Pierre HUBERT">
|
||||
<title>OIDC Test client</title>
|
||||
|
||||
<link href="/assets/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
|
||||
<link href="/assets/cover.css" rel="stylesheet" />
|
||||
|
||||
<meta name="theme-color" content="#712cf9">
|
||||
|
||||
</head>
|
||||
<body class="d-flex h-100 text-center text-bg-dark">
|
||||
|
||||
|
||||
<div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column">
|
||||
<header class="mb-auto">
|
||||
<div>
|
||||
<h3 class="float-md-start mb-0">OIDC test client</h3>
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="px-3">
|
||||
<h1>Test OIDC Authentication flow.</h1>
|
||||
<p class="lead">Get started testing OIDC authentication flow</p>
|
||||
<p>Redirect URI: {{ redirect_url }}</p>
|
||||
<p class="lead">
|
||||
<a href="/start" class="btn btn-lg btn-light fw-bold border-white bg-white">Start</a>
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<footer class="mt-auto text-white-50">
|
||||
<p>© Pierre HUBERT</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user