@@ -60,7 +60,10 @@ defmodule Sobelow do
6060 libroot_meta_files = if ! phx_post_1_2? , do: get_meta_files ( lib_root ) , else: [ ]
6161
6262 default_router = get_router ( app_name , web_root )
63- routers = get_routers ( root_meta_files ++ libroot_meta_files , default_router )
63+
64+ { routers , endpoints } =
65+ get_phoenix_files ( root_meta_files ++ libroot_meta_files , default_router )
66+
6467 if Enum . empty? ( routers ) , do: no_router ( )
6568
6669 FindingLog . start_link ( )
@@ -78,7 +81,7 @@ defmodule Sobelow do
7881 if not ( format ( ) in [ "quiet" , "compact" , "json" ] ) , do: IO . puts ( :stderr , print_banner ( ) )
7982 Application . put_env ( :sobelow , :app_name , app_name )
8083
81- if Enum . member? ( allowed , Config ) , do: Config . fetch ( project_root , routers )
84+ if Enum . member? ( allowed , Config ) , do: Config . fetch ( project_root , routers , endpoints )
8285 if Enum . member? ( allowed , Vuln ) , do: Vuln . get_vulns ( project_root )
8386
8487 allowed = allowed -- [ Config , Vuln ]
@@ -271,20 +274,31 @@ defmodule Sobelow do
271274 |> Path . expand ( )
272275 end
273276
274- defp get_routers ( meta_files , router ) do
275- routers =
276- Enum . flat_map ( meta_files , fn meta_file ->
277- case meta_file . is_router? do
278- true -> [ meta_file . file_path ]
279- _ -> [ ]
277+ defp get_phoenix_files ( meta_files , router ) do
278+ phoenix_files =
279+ Enum . reduce ( meta_files , % { routers: [ ] , endpoints: [ ] } , fn meta_file , acc ->
280+ cond do
281+ meta_file . is_router? ->
282+ Map . update! ( acc , :routers , & [ meta_file . file_path | & 1 ] )
283+
284+ meta_file . is_endpoint? ->
285+ Map . update! ( acc , :endpoints , & [ meta_file . file_path | & 1 ] )
286+
287+ true ->
288+ acc
280289 end
281290 end )
282291
283- if File . exists? ( router ) do
284- Enum . uniq ( routers ++ [ router ] )
285- else
286- routers
287- end
292+ uniq_phoenix_files =
293+ if File . exists? ( router ) do
294+ Map . update! ( phoenix_files , :routers , fn routers ->
295+ Enum . uniq ( routers ++ [ router ] )
296+ end )
297+ else
298+ phoenix_files
299+ end
300+
301+ { uniq_phoenix_files . routers , uniq_phoenix_files . endpoints }
288302 end
289303
290304 defp get_meta_templates ( root ) do
@@ -332,7 +346,8 @@ defmodule Sobelow do
332346 file_path: Path . expand ( filename ) ,
333347 def_funs: def_funs ,
334348 is_controller?: Utils . is_controller? ( use_funs ) ,
335- is_router?: Utils . is_router? ( use_funs )
349+ is_router?: Utils . is_router? ( use_funs ) ,
350+ is_endpoint?: Utils . is_endpoint? ( use_funs )
336351 }
337352 end
338353
@@ -478,6 +493,7 @@ defmodule Sobelow do
478493 "Config.Secrets" -> Sobelow.Config.Secrets
479494 "Config.HTTPS" -> Sobelow.Config.HTTPS
480495 "Config.HSTS" -> Sobelow.Config.HSTS
496+ "Config.CSWH" -> Sobelow.Config.CSWH
481497 "Vuln" -> Sobelow.Vuln
482498 "Vuln.CookieRCE" -> Sobelow.Vuln.CookieRCE
483499 "Vuln.HeaderInject" -> Sobelow.Vuln.HeaderInject
0 commit comments