@@ -551,47 +551,48 @@ <h1>Source code for litestar.middleware.allowed_hosts</h1><div class="highlight"
551551</ span > < span data-line ="38 "> < span class ="k "> return</ span >
552552</ span > < span data-line ="39 ">
553553</ span > < span data-line ="40 "> < span class ="n "> allowed_hosts</ span > < span class ="p "> :</ span > < span class ="nb "> set</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="p "> {</ span >
554- </ span > < span data-line ="41 "> < span class ="sa "> rf</ span > < span class ="s2 "> ".*\.</ span > < span class ="si "> {</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> replace</ span > < span class ="p "> (</ span > < span class ="s1 "> '*.'</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="s1 "> ''</ span > < span class ="p "> )</ span > < span class ="si "> }</ span > < span class ="s2 "> $"</ span > < span class ="k "> if</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> startswith</ span > < span class ="p "> (</ span > < span class ="s2 "> "*."</ span > < span class ="p "> )</ span > < span class ="k "> else</ span > < span class ="n "> host</ span > < span class ="k "> for</ span > < span class ="n "> host</ span > < span class ="ow "> in</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts</ span >
555- </ span > < span data-line ="42 "> < span class ="p "> }</ span >
556- </ span > < span data-line ="43 ">
557- </ span > < span data-line ="44 "> < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts_regex</ span > < span class ="o "> =</ span > < span class ="n "> re</ span > < span class ="o "> .</ span > < span class ="n "> compile</ span > < span class ="p "> (</ span > < span class ="s2 "> "|"</ span > < span class ="o "> .</ span > < span class ="n "> join</ span > < span class ="p "> (</ span > < span class ="nb "> sorted</ span > < span class ="p "> (</ span > < span class ="n "> allowed_hosts</ span > < span class ="p "> )))</ span > < span class ="c1 "> # pyright: ignore</ span >
558- </ span > < span data-line ="45 ">
559- </ span > < span data-line ="46 "> < span class ="k "> if</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> www_redirect</ span > < span class ="ow "> and</ span > < span class ="p "> (</ span >
560- </ span > < span data-line ="47 "> < span class ="n "> redirect_domains</ span > < span class ="o "> :=</ span > < span class ="p "> {</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> replace</ span > < span class ="p "> (</ span > < span class ="s2 "> "www."</ span > < span class ="p "> ,</ span > < span class ="s2 "> ""</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> host</ span > < span class ="ow "> in</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts</ span > < span class ="k "> if</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> startswith</ span > < span class ="p "> (</ span > < span class ="s2 "> "www."</ span > < span class ="p "> )}</ span >
561- </ span > < span data-line ="48 "> < span class ="p "> ):</ span >
562- </ span > < span data-line ="49 "> < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> redirect_domains</ span > < span class ="o "> =</ span > < span class ="n "> re</ span > < span class ="o "> .</ span > < span class ="n "> compile</ span > < span class ="p "> (</ span > < span class ="s2 "> "|"</ span > < span class ="o "> .</ span > < span class ="n "> join</ span > < span class ="p "> (</ span > < span class ="nb "> sorted</ span > < span class ="p "> (</ span > < span class ="n "> redirect_domains</ span > < span class ="p "> )))</ span > < span class ="c1 "> # pyright: ignore</ span > </ div >
554+ </ span > < span data-line ="41 "> < span class ="sa "> rf</ span > < span class ="s2 "> ".*\.</ span > < span class ="si "> {</ span > < span class ="n "> re</ span > < span class ="o "> .</ span > < span class ="n "> escape</ span > < span class ="p "> (</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> replace</ span > < span class ="p "> (</ span > < span class ="s1 "> '*.'</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="s1 "> ''</ span > < span class ="p "> ))</ span > < span class ="si "> }</ span > < span class ="s2 "> $"</ span > < span class ="k "> if</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> startswith</ span > < span class ="p "> (</ span > < span class ="s2 "> "*."</ span > < span class ="p "> )</ span > < span class ="k "> else</ span > < span class ="n "> re</ span > < span class ="o "> .</ span > < span class ="n "> escape</ span > < span class ="p "> (</ span > < span class ="n "> host</ span > < span class ="p "> )</ span >
555+ </ span > < span data-line ="42 "> < span class ="k "> for</ span > < span class ="n "> host</ span > < span class ="ow "> in</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts</ span >
556+ </ span > < span data-line ="43 "> < span class ="p "> }</ span >
557+ </ span > < span data-line ="44 ">
558+ </ span > < span data-line ="45 "> < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts_regex</ span > < span class ="o "> =</ span > < span class ="n "> re</ span > < span class ="o "> .</ span > < span class ="n "> compile</ span > < span class ="p "> (</ span > < span class ="s2 "> "|"</ span > < span class ="o "> .</ span > < span class ="n "> join</ span > < span class ="p "> (</ span > < span class ="nb "> sorted</ span > < span class ="p "> (</ span > < span class ="n "> allowed_hosts</ span > < span class ="p "> )))</ span > < span class ="c1 "> # pyright: ignore</ span >
559+ </ span > < span data-line ="46 ">
560+ </ span > < span data-line ="47 "> < span class ="k "> if</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> www_redirect</ span > < span class ="ow "> and</ span > < span class ="p "> (</ span >
561+ </ span > < span data-line ="48 "> < span class ="n "> redirect_domains</ span > < span class ="o "> :=</ span > < span class ="p "> {</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> replace</ span > < span class ="p "> (</ span > < span class ="s2 "> "www."</ span > < span class ="p "> ,</ span > < span class ="s2 "> ""</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> host</ span > < span class ="ow "> in</ span > < span class ="n "> config</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts</ span > < span class ="k "> if</ span > < span class ="n "> host</ span > < span class ="o "> .</ span > < span class ="n "> startswith</ span > < span class ="p "> (</ span > < span class ="s2 "> "www."</ span > < span class ="p "> )}</ span >
562+ </ span > < span data-line ="49 "> < span class ="p "> ):</ span >
563+ </ span > < span data-line ="50 "> < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> redirect_domains</ span > < span class ="o "> =</ span > < span class ="n "> re</ span > < span class ="o "> .</ span > < span class ="n "> compile</ span > < span class ="p "> (</ span > < span class ="s2 "> "|"</ span > < span class ="o "> .</ span > < span class ="n "> join</ span > < span class ="p "> (</ span > < span class ="nb "> sorted</ span > < span class ="p "> (</ span > < span class ="n "> redirect_domains</ span > < span class ="p "> )))</ span > < span class ="c1 "> # pyright: ignore</ span > </ div >
563564
564- </ span > < span data-line ="50 ">
565- </ span > < span data-line ="51 "> < span class ="k "> async</ span > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="fm "> __call__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> scope</ span > < span class ="p "> :</ span > < span class ="n "> Scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> :</ span > < span class ="n "> Receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> :</ span > < span class ="n "> Send</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
566- </ span > < span data-line ="52 "> < span class ="w "> </ span > < span class ="sd "> """ASGI callable.</ span >
567- </ span > < span data-line ="53 ">
568- </ span > < span data-line ="54 "> < span class ="sd "> Args:</ span >
569- </ span > < span data-line ="55 "> < span class ="sd "> scope: The ASGI connection scope.</ span >
570- </ span > < span data-line ="56 "> < span class ="sd "> receive: The ASGI receive function.</ span >
571- </ span > < span data-line ="57 "> < span class ="sd "> send: The ASGI send function.</ span >
572- </ span > < span data-line ="58 ">
573- </ span > < span data-line ="59 "> < span class ="sd "> Returns:</ span >
574- </ span > < span data-line ="60 "> < span class ="sd "> None</ span >
575- </ span > < span data-line ="61 "> < span class ="sd "> """</ span >
576- </ span > < span data-line ="62 "> < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts_regex</ span > < span class ="ow "> is</ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
577- </ span > < span data-line ="63 "> < span class ="k "> await</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> app</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span >
578- </ span > < span data-line ="64 "> < span class ="k "> return</ span >
579- </ span > < span data-line ="65 ">
580- </ span > < span data-line ="66 "> < span class ="n "> headers</ span > < span class ="o "> =</ span > < span class ="n "> MutableScopeHeaders</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="o "> =</ span > < span class ="n "> scope</ span > < span class ="p "> )</ span >
581- </ span > < span data-line ="67 "> < span class ="k "> if</ span > < span class ="n "> host</ span > < span class ="o "> :=</ span > < span class ="n "> headers</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "host"</ span > < span class ="p "> ,</ span > < span class ="n "> headers</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "x-forwarded-host"</ span > < span class ="p "> ,</ span > < span class ="s2 "> ""</ span > < span class ="p "> ))</ span > < span class ="o "> .</ span > < span class ="n "> split</ span > < span class ="p "> (</ span > < span class ="s2 "> ":"</ span > < span class ="p "> )[</ span > < span class ="mi "> 0</ span > < span class ="p "> ]:</ span >
582- </ span > < span data-line ="68 "> < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts_regex</ span > < span class ="o "> .</ span > < span class ="n "> fullmatch</ span > < span class ="p "> (</ span > < span class ="n "> host</ span > < span class ="p "> ):</ span >
583- </ span > < span data-line ="69 "> < span class ="k "> await</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> app</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span >
584- </ span > < span data-line ="70 "> < span class ="k "> return</ span >
585- </ span > < span data-line ="71 ">
586- </ span > < span data-line ="72 "> < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> redirect_domains</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="ow "> and</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> redirect_domains</ span > < span class ="o "> .</ span > < span class ="n "> fullmatch</ span > < span class ="p "> (</ span > < span class ="n "> host</ span > < span class ="p "> ):</ span >
587- </ span > < span data-line ="73 "> < span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="n "> URL</ span > < span class ="o "> .</ span > < span class ="n "> from_scope</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> )</ span >
588- </ span > < span data-line ="74 "> < span class ="n "> redirect_url</ span > < span class ="o "> =</ span > < span class ="n "> url</ span > < span class ="o "> .</ span > < span class ="n "> with_replacements</ span > < span class ="p "> (</ span > < span class ="n "> netloc</ span > < span class ="o "> =</ span > < span class ="sa "> f</ span > < span class ="s2 "> "www.</ span > < span class ="si "> {</ span > < span class ="n "> url</ span > < span class ="o "> .</ span > < span class ="n "> netloc</ span > < span class ="si "> }</ span > < span class ="s2 "> "</ span > < span class ="p "> )</ span >
589- </ span > < span data-line ="75 "> < span class ="n "> redirect_response</ span > < span class ="o "> =</ span > < span class ="n "> ASGIRedirectResponse</ span > < span class ="p "> (</ span > < span class ="n "> path</ span > < span class ="o "> =</ span > < span class ="nb "> str</ span > < span class ="p "> (</ span > < span class ="n "> redirect_url</ span > < span class ="p "> ))</ span >
590- </ span > < span data-line ="76 "> < span class ="k "> await</ span > < span class ="n "> redirect_response</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span >
591- </ span > < span data-line ="77 "> < span class ="k "> return</ span >
592- </ span > < span data-line ="78 ">
593- </ span > < span data-line ="79 "> < span class ="n "> response</ span > < span class ="o "> =</ span > < span class ="n "> ASGIResponse</ span > < span class ="p "> (</ span > < span class ="n "> body</ span > < span class ="o "> =</ span > < span class ="sa "> b</ span > < span class ="s1 "> '{"message":"invalid host header"}'</ span > < span class ="p "> ,</ span > < span class ="n "> status_code</ span > < span class ="o "> =</ span > < span class ="n "> HTTP_400_BAD_REQUEST</ span > < span class ="p "> )</ span >
594- </ span > < span data-line ="80 "> < span class ="k "> await</ span > < span class ="n "> response</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span > </ div >
565+ </ span > < span data-line ="51 ">
566+ </ span > < span data-line ="52 "> < span class ="k "> async</ span > < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="fm "> __call__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> scope</ span > < span class ="p "> :</ span > < span class ="n "> Scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> :</ span > < span class ="n "> Receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> :</ span > < span class ="n "> Send</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
567+ </ span > < span data-line ="53 "> < span class ="w "> </ span > < span class ="sd "> """ASGI callable.</ span >
568+ </ span > < span data-line ="54 ">
569+ </ span > < span data-line ="55 "> < span class ="sd "> Args:</ span >
570+ </ span > < span data-line ="56 "> < span class ="sd "> scope: The ASGI connection scope.</ span >
571+ </ span > < span data-line ="57 "> < span class ="sd "> receive: The ASGI receive function.</ span >
572+ </ span > < span data-line ="58 "> < span class ="sd "> send: The ASGI send function.</ span >
573+ </ span > < span data-line ="59 ">
574+ </ span > < span data-line ="60 "> < span class ="sd "> Returns:</ span >
575+ </ span > < span data-line ="61 "> < span class ="sd "> None</ span >
576+ </ span > < span data-line ="62 "> < span class ="sd "> """</ span >
577+ </ span > < span data-line ="63 "> < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts_regex</ span > < span class ="ow "> is</ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
578+ </ span > < span data-line ="64 "> < span class ="k "> await</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> app</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span >
579+ </ span > < span data-line ="65 "> < span class ="k "> return</ span >
580+ </ span > < span data-line ="66 ">
581+ </ span > < span data-line ="67 "> < span class ="n "> headers</ span > < span class ="o "> =</ span > < span class ="n "> MutableScopeHeaders</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="o "> =</ span > < span class ="n "> scope</ span > < span class ="p "> )</ span >
582+ </ span > < span data-line ="68 "> < span class ="k "> if</ span > < span class ="n "> host</ span > < span class ="o "> :=</ span > < span class ="n "> headers</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "host"</ span > < span class ="p "> ,</ span > < span class ="n "> headers</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "x-forwarded-host"</ span > < span class ="p "> ,</ span > < span class ="s2 "> ""</ span > < span class ="p "> ))</ span > < span class ="o "> .</ span > < span class ="n "> split</ span > < span class ="p "> (</ span > < span class ="s2 "> ":"</ span > < span class ="p "> )[</ span > < span class ="mi "> 0</ span > < span class ="p "> ]:</ span >
583+ </ span > < span data-line ="69 "> < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> allowed_hosts_regex</ span > < span class ="o "> .</ span > < span class ="n "> fullmatch</ span > < span class ="p "> (</ span > < span class ="n "> host</ span > < span class ="p "> ):</ span >
584+ </ span > < span data-line ="70 "> < span class ="k "> await</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> app</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span >
585+ </ span > < span data-line ="71 "> < span class ="k "> return</ span >
586+ </ span > < span data-line ="72 ">
587+ </ span > < span data-line ="73 "> < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> redirect_domains</ span > < span class ="ow "> is</ span > < span class ="ow "> not</ span > < span class ="kc "> None</ span > < span class ="ow "> and</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> redirect_domains</ span > < span class ="o "> .</ span > < span class ="n "> fullmatch</ span > < span class ="p "> (</ span > < span class ="n "> host</ span > < span class ="p "> ):</ span >
588+ </ span > < span data-line ="74 "> < span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="n "> URL</ span > < span class ="o "> .</ span > < span class ="n "> from_scope</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> )</ span >
589+ </ span > < span data-line ="75 "> < span class ="n "> redirect_url</ span > < span class ="o "> =</ span > < span class ="n "> url</ span > < span class ="o "> .</ span > < span class ="n "> with_replacements</ span > < span class ="p "> (</ span > < span class ="n "> netloc</ span > < span class ="o "> =</ span > < span class ="sa "> f</ span > < span class ="s2 "> "www.</ span > < span class ="si "> {</ span > < span class ="n "> url</ span > < span class ="o "> .</ span > < span class ="n "> netloc</ span > < span class ="si "> }</ span > < span class ="s2 "> "</ span > < span class ="p "> )</ span >
590+ </ span > < span data-line ="76 "> < span class ="n "> redirect_response</ span > < span class ="o "> =</ span > < span class ="n "> ASGIRedirectResponse</ span > < span class ="p "> (</ span > < span class ="n "> path</ span > < span class ="o "> =</ span > < span class ="nb "> str</ span > < span class ="p "> (</ span > < span class ="n "> redirect_url</ span > < span class ="p "> ))</ span >
591+ </ span > < span data-line ="77 "> < span class ="k "> await</ span > < span class ="n "> redirect_response</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span >
592+ </ span > < span data-line ="78 "> < span class ="k "> return</ span >
593+ </ span > < span data-line ="79 ">
594+ </ span > < span data-line ="80 "> < span class ="n "> response</ span > < span class ="o "> =</ span > < span class ="n "> ASGIResponse</ span > < span class ="p "> (</ span > < span class ="n "> body</ span > < span class ="o "> =</ span > < span class ="sa "> b</ span > < span class ="s1 "> '{"message":"invalid host header"}'</ span > < span class ="p "> ,</ span > < span class ="n "> status_code</ span > < span class ="o "> =</ span > < span class ="n "> HTTP_400_BAD_REQUEST</ span > < span class ="p "> )</ span >
595+ </ span > < span data-line ="81 "> < span class ="k "> await</ span > < span class ="n "> response</ span > < span class ="p "> (</ span > < span class ="n "> scope</ span > < span class ="p "> ,</ span > < span class ="n "> receive</ span > < span class ="p "> ,</ span > < span class ="n "> send</ span > < span class ="p "> )</ span > </ div >
595596
596597</ span > </ pre > </ div >
597598 </ article > < button class ="back-to-top " type ="button ">
0 commit comments