1+ mod api;
12mod app;
23mod home;
34
@@ -13,84 +14,76 @@ fn main() {
1314}
1415
1516#[ cfg( feature = "server" ) ]
16- # [ tokio :: main]
17- async fn main ( ) {
18- use std:: sync:: Arc ;
17+ fn main ( ) {
18+ dioxus :: serve ( || async move {
19+ use std:: sync:: Arc ;
1920
20- use axum:: { Extension , Router } ;
21- use dioxus:: {
22- cli_config:: fullstack_address_or_localhost,
23- prelude:: { DioxusRouterExt , * } ,
24- } ;
25- use shield:: { Shield , ShieldOptions } ;
26- use shield_bootstrap:: BootstrapDioxusStyle ;
27- use shield_dioxus_axum:: { AuthRoutes , AxumDioxusIntegration , ShieldLayer } ;
28- use shield_email:: { EmailMethod , EmailOptions , TracingSender } ;
29- use shield_memory:: { MemoryStorage , User } ;
30- use shield_oidc:: { Keycloak , OidcMethod } ;
31- use tokio:: net:: TcpListener ;
32- use tower_sessions:: { Expiry , MemoryStore , SessionManagerLayer , cookie:: time:: Duration } ;
33- use tracing:: { Level , info} ;
21+ use axum:: { Extension , Router } ;
22+ use dioxus:: {
23+ cli_config:: fullstack_address_or_localhost,
24+ prelude:: { DioxusRouterExt , * } ,
25+ } ;
26+ use shield:: { Shield , ShieldOptions } ;
27+ use shield_bootstrap:: BootstrapDioxusStyle ;
28+ use shield_dioxus_axum:: { AuthRoutes , AxumDioxusIntegration , ShieldLayer } ;
29+ use shield_email:: { EmailMethod , EmailOptions , TracingSender } ;
30+ use shield_memory:: { MemoryStorage , User } ;
31+ use shield_oidc:: { Keycloak , OidcMethod } ;
32+ use tower_sessions:: { Expiry , MemoryStore , SessionManagerLayer , cookie:: time:: Duration } ;
3433
35- // Initialize Dioxus
36- dioxus:: logger:: init ( Level :: DEBUG ) . unwrap ( ) ;
37- let addr = fullstack_address_or_localhost ( ) ;
34+ let addr = fullstack_address_or_localhost ( ) ;
3835
39- // Initialize sessions
40- let session_store = MemoryStore :: default ( ) ;
41- let session_layer = SessionManagerLayer :: new ( session_store)
42- . with_secure ( false )
43- . with_expiry ( Expiry :: OnInactivity ( Duration :: minutes ( 10 ) ) ) ;
36+ // Initialize sessions
37+ let session_store = MemoryStore :: default ( ) ;
38+ let session_layer = SessionManagerLayer :: new ( session_store)
39+ . with_secure ( false )
40+ . with_expiry ( Expiry :: OnInactivity ( Duration :: minutes ( 10 ) ) ) ;
4441
45- // Initialize Shield
46- let storage = MemoryStorage :: new ( ) ;
47- let shield = Shield :: new (
48- storage. clone ( ) ,
49- vec ! [
50- Arc :: new( EmailMethod :: new(
51- EmailOptions :: builder( )
52- . secret( "secret" )
53- . sender( TracingSender )
54- . build( ) ,
55- storage. clone( ) ,
56- ) ) ,
57- Arc :: new(
58- OidcMethod :: new( storage) . with_providers( [ Keycloak :: builder(
59- "keycloak" ,
60- "http://localhost:18080/realms/Shield" ,
61- "client1" ,
62- )
63- . client_secret( "xcpQsaGbRILTljPtX4npjmYMBjKrariJ" )
64- . redirect_url( format!(
65- "http://localhost:{}/api/auth/oidc/sign-in-callback/keycloak" ,
66- dioxus:: cli_config:: devserver_raw_addr( )
67- . map( |addr| addr. port( ) )
68- . unwrap_or_else( || addr. port( ) )
69- ) )
70- . build( ) ] ) ,
71- ) ,
72- ] ,
73- ShieldOptions :: default ( ) ,
74- ) ;
75- let shield_layer = ShieldLayer :: new ( shield. clone ( ) ) ;
42+ // Initialize Shield
43+ let storage = MemoryStorage :: new ( ) ;
44+ let shield = Shield :: new (
45+ storage. clone ( ) ,
46+ vec ! [
47+ Arc :: new( EmailMethod :: new(
48+ EmailOptions :: builder( )
49+ . secret( "secret" )
50+ . sender( TracingSender )
51+ . build( ) ,
52+ storage. clone( ) ,
53+ ) ) ,
54+ Arc :: new(
55+ OidcMethod :: new( storage) . with_providers( [ Keycloak :: builder(
56+ "keycloak" ,
57+ "http://localhost:18080/realms/Shield" ,
58+ "client1" ,
59+ )
60+ . client_secret( "xcpQsaGbRILTljPtX4npjmYMBjKrariJ" )
61+ . redirect_url( format!(
62+ "http://localhost:{}/api/auth/oidc/sign-in-callback/keycloak" ,
63+ dioxus:: cli_config:: devserver_raw_addr( )
64+ . map( |addr| addr. port( ) )
65+ . unwrap_or_else( || addr. port( ) )
66+ ) )
67+ . build( ) ] ) ,
68+ ) ,
69+ ] ,
70+ ShieldOptions :: default ( ) ,
71+ ) ;
72+ let shield_layer = ShieldLayer :: new ( shield. clone ( ) ) ;
7673
77- // Initialize router
78- let router = Router :: new ( )
79- . nest ( "/api/auth" , AuthRoutes :: new ( shield) . router ( ) )
80- . serve_dioxus_application (
81- ServeConfig :: new ( ) . context ( BootstrapDioxusStyle :: default ( ) . context ( ) ) ,
82- App ,
83- )
84- . layer ( Extension (
85- AxumDioxusIntegration :: < User > :: default ( ) . context ( ) ,
86- ) )
87- . layer ( shield_layer)
88- . layer ( session_layer) ;
74+ // Initialize router
75+ let router = Router :: new ( )
76+ . nest ( "/api/auth" , AuthRoutes :: new ( shield) . router ( ) )
77+ . serve_dioxus_application (
78+ ServeConfig :: new ( ) . context ( BootstrapDioxusStyle :: default ( ) . context ( ) ) ,
79+ App ,
80+ )
81+ . layer ( Extension (
82+ AxumDioxusIntegration :: < User > :: default ( ) . context ( ) ,
83+ ) )
84+ . layer ( shield_layer)
85+ . layer ( session_layer) ;
8986
90- // Start app
91- info ! ( "listening on http://{}" , & addr) ;
92- let listener = TcpListener :: bind ( & addr) . await . unwrap ( ) ;
93- axum:: serve ( listener, router. into_make_service ( ) )
94- . await
95- . unwrap ( ) ;
87+ Ok ( router)
88+ } ) ;
9689}
0 commit comments