interactive intro to open social
at-me.zzstoatzz.io
1use actix_session::{SessionMiddleware, config::PersistentSession, storage::CookieSessionStore};
2use actix_web::{App, HttpServer, cookie::{Key, time::Duration}, middleware, web};
3
4mod oauth;
5mod routes;
6mod templates;
7
8#[actix_web::main]
9async fn main() -> std::io::Result<()> {
10 env_logger::init();
11
12 let client = oauth::create_oauth_client();
13
14 println!("starting server at http://localhost:8080");
15
16 HttpServer::new(move || {
17 App::new()
18 .wrap(middleware::Logger::default())
19 .wrap(
20 SessionMiddleware::builder(
21 CookieSessionStore::default(),
22 Key::from(&[0; 64]),
23 )
24 .cookie_secure(false)
25 .session_lifecycle(
26 PersistentSession::default()
27 .session_ttl(Duration::days(30))
28 )
29 .build(),
30 )
31 .app_data(web::Data::new(client.clone()))
32 .service(routes::index)
33 .service(routes::login)
34 .service(routes::callback)
35 .service(routes::client_metadata)
36 .service(routes::logout)
37 .service(routes::restore_session)
38 .service(routes::favicon)
39 })
40 .bind(("0.0.0.0", 8080))?
41 .run()
42 .await
43}