@@ -13,6 +13,7 @@ defmodule Samly.IdpData do
1313 defstruct id: "" ,
1414 sp_id: "" ,
1515 base_url: nil ,
16+ metadata: nil ,
1617 metadata_file: nil ,
1718 pre_session_create_pipeline: nil ,
1819 use_redirect_for_req: false ,
@@ -39,6 +40,7 @@ defmodule Samly.IdpData do
3940 id: binary ( ) ,
4041 sp_id: binary ( ) ,
4142 base_url: nil | binary ( ) ,
43+ metadata: nil | binary ( ) ,
4244 metadata_file: nil | binary ( ) ,
4345 pre_session_create_pipeline: nil | module ( ) ,
4446 use_redirect_for_req: boolean ( ) ,
@@ -108,7 +110,13 @@ defmodule Samly.IdpData do
108110 @ spec save_idp_config ( % IdpData { } , map ( ) ) :: % IdpData { }
109111 defp save_idp_config ( idp_data , % { id: id , sp_id: sp_id } = opts_map )
110112 when is_binary ( id ) and is_binary ( sp_id ) do
111- % IdpData { idp_data | id: id , sp_id: sp_id , base_url: Map . get ( opts_map , :base_url ) }
113+ % IdpData {
114+ idp_data
115+ | id: id ,
116+ sp_id: sp_id ,
117+ base_url: Map . get ( opts_map , :base_url ) ,
118+ metadata: Map . get ( opts_map , :metadata )
119+ }
112120 |> set_metadata_file ( opts_map )
113121 |> set_pipeline ( opts_map )
114122 |> set_allowed_target_urls ( opts_map )
@@ -121,20 +129,10 @@ defmodule Samly.IdpData do
121129 end
122130
123131 @ spec load_metadata ( % IdpData { } , map ( ) ) :: % IdpData { }
124- defp load_metadata ( idp_data , _opts_map ) do
125- with { :reading , { :ok , raw_xml } } <- { :reading , File . read ( idp_data . metadata_file ) } ,
126- { :parsing , { :ok , idp_data } } <- { :parsing , from_xml ( raw_xml , idp_data ) } do
132+ defp load_metadata ( % IdpData { metadata: raw_xml } = idp_data , _opts_map ) when is_binary ( raw_xml ) do
133+ with { :parsing , { :ok , idp_data } } <- { :parsing , from_xml ( raw_xml , idp_data ) } do
127134 idp_data
128135 else
129- { :reading , { :error , reason } } ->
130- Logger . error (
131- "[Samly] Failed to read metadata_file [#{ inspect ( idp_data . metadata_file ) } ]: #{
132- inspect ( reason )
133- } "
134- )
135-
136- idp_data
137-
138136 { :parsing , { :error , reason } } ->
139137 Logger . error (
140138 "[Samly] Invalid metadata_file content [#{ inspect ( idp_data . metadata_file ) } ]: #{
@@ -146,6 +144,17 @@ defmodule Samly.IdpData do
146144 end
147145 end
148146
147+ @ spec load_metadata ( % IdpData { } , map ( ) ) :: % IdpData { }
148+ defp load_metadata ( idp_data , opts_map ) do
149+ with { :reading , { :ok , raw_xml } } <- { :reading , File . read ( idp_data . metadata_file ) } do
150+ % IdpData { idp_data | metadata: raw_xml } |> load_metadata ( opts_map )
151+ else
152+ { :reading , { :error , reason } } ->
153+ Logger . error ( "[Samly] Failed to read metadata_file: #{ inspect ( reason ) } " )
154+ idp_data
155+ end
156+ end
157+
149158 @ spec update_esaml_recs ( % IdpData { } , % { required ( id ( ) ) => % SpData { } } , map ( ) ) :: % IdpData { }
150159 defp update_esaml_recs ( idp_data , service_providers , opts_map ) do
151160 case Map . get ( service_providers , idp_data . sp_id ) do
@@ -182,6 +191,12 @@ defmodule Samly.IdpData do
182191
183192 @ default_metadata_file "idp_metadata.xml"
184193
194+ @ spec set_metadata_file ( % IdpData { } , map ( ) ) :: % IdpData { }
195+ defp set_metadata_file ( % IdpData { metadata: metadata } = idp_data , _opts_map )
196+ when is_binary ( metadata ) do
197+ % IdpData { idp_data | metadata_file: nil }
198+ end
199+
185200 @ spec set_metadata_file ( % IdpData { } , map ( ) ) :: % IdpData { }
186201 defp set_metadata_file ( % IdpData { } = idp_data , % { } = opts_map ) do
187202 % IdpData { idp_data | metadata_file: Map . get ( opts_map , :metadata_file , @ default_metadata_file ) }
0 commit comments