@@ -15,18 +15,19 @@ fn main() {
1515#[ cfg( feature = "server" ) ]
1616#[ tokio:: main]
1717async fn main ( ) {
18- use std:: sync:: Arc ;
18+ use std:: { env , sync:: Arc } ;
1919
2020 use axum:: Router ;
2121 use dioxus:: {
2222 cli_config:: fullstack_address_or_localhost,
2323 prelude:: { DioxusRouterExt , * } ,
2424 } ;
25- use shield:: { Shield , ShieldOptions } ;
25+ use shield:: { ErasedMethod , Method , Shield , ShieldOptions } ;
2626 use shield_bootstrap:: BootstrapDioxusStyle ;
2727 use shield_dioxus_axum:: { AxumDioxusIntegration , ShieldLayer } ;
2828 use shield_memory:: { MemoryStorage , User } ;
2929 use shield_oidc:: { Keycloak , OidcMethod } ;
30+ use shield_workos:: { WorkosMethod , WorkosOauthProvider , WorkosOptions } ;
3031 use tokio:: net:: TcpListener ;
3132 use tower_sessions:: { Expiry , MemoryStore , SessionManagerLayer , cookie:: time:: Duration } ;
3233 use tracing:: { Level , info} ;
@@ -45,21 +46,39 @@ async fn main() {
4546 let storage = MemoryStorage :: new ( ) ;
4647 let shield = Shield :: new (
4748 storage. clone ( ) ,
48- vec ! [ Arc :: new(
49- OidcMethod :: new( storage) . with_providers( [ Keycloak :: builder(
50- "keycloak" ,
51- "http://localhost:18080/realms/Shield" ,
52- "client1" ,
53- )
54- . client_secret( "xcpQsaGbRILTljPtX4npjmYMBjKrariJ" )
55- . redirect_url( format!(
56- "http://localhost:{}/api/auth/oidc/sign-in-callback/keycloak" ,
57- dioxus:: cli_config:: devserver_raw_addr( )
58- . map( |addr| addr. port( ) )
59- . unwrap_or_else( || addr. port( ) )
60- ) )
61- . build( ) ] ) ,
62- ) ] ,
49+ [
50+ Some ( Arc :: new (
51+ OidcMethod :: new ( storage) . with_providers ( [ Keycloak :: builder (
52+ "keycloak" ,
53+ "http://localhost:18080/realms/Shield" ,
54+ "client1" ,
55+ )
56+ . client_secret ( "xcpQsaGbRILTljPtX4npjmYMBjKrariJ" )
57+ . redirect_url ( format ! (
58+ "http://localhost:{}/api/auth/oidc/sign-in-callback/keycloak" ,
59+ dioxus:: cli_config:: devserver_raw_addr( )
60+ . map( |addr| addr. port( ) )
61+ . unwrap_or_else( || addr. port( ) )
62+ ) )
63+ . build ( ) ] ) ,
64+ ) as Arc < dyn ErasedMethod > ) ,
65+ env:: var ( "WORKOS_API_KEY" ) . ok ( ) . map ( |api_key| {
66+ Arc :: new (
67+ WorkosMethod :: from_api_key ( & api_key) . with_options (
68+ WorkosOptions :: builder ( )
69+ . oauth_providers ( vec ! [
70+ WorkosOauthProvider :: AppleOAuth ,
71+ WorkosOauthProvider :: GoogleOAuth ,
72+ WorkosOauthProvider :: MicrosoftOAuth ,
73+ ] )
74+ . build ( ) ,
75+ ) ,
76+ ) as Arc < dyn ErasedMethod >
77+ } ) ,
78+ ]
79+ . into_iter ( )
80+ . flatten ( )
81+ . collect ( ) ,
6382 ShieldOptions :: default ( ) ,
6483 ) ;
6584 let shield_layer = ShieldLayer :: new ( shield. clone ( ) ) ;
0 commit comments