1414require_once 'openid.lib.php ' ;
1515require_once 'xrds.lib.php ' ;
1616
17- function openid_form ()
17+ function openid_form (): FormValidator
1818{
1919 $ form = new FormValidator (
2020 'openid_login ' ,
@@ -25,8 +25,10 @@ function openid_form()
2525 );
2626 $ form -> addElement ('text ' , 'openid_url ' , array (get_lang ('OpenIDURL ' ), Display::url (get_lang ('OpenIDWhatIs ' ), 'main/auth/openid/whatis.php ' )), array ('class ' => 'openid_input ' ));
2727 $ form -> addElement ('button ' , 'submit ' , get_lang ('Login ' ));
28+ $ form ->applyFilter ('openid_url ' , 'trim ' );
29+ $ form ->protect ();
2830
29- return $ form-> returnForm () ;
31+ return $ form ;
3032}
3133
3234/**
@@ -459,3 +461,30 @@ function openid_http_request($url, $headers = array(), $method = 'GET', $data =
459461 $ result ->code = $ code ;
460462 return $ result ;
461463}
464+
465+ function openid_is_allowed_provider ($ identityUrl ): bool
466+ {
467+ $ allowedProviders = api_get_configuration_value ('auth_openid_allowed_providers ' );
468+
469+ if (false === $ allowedProviders ) {
470+ return true ;
471+ }
472+
473+ $ host = parse_url ($ identityUrl , PHP_URL_HOST ) ?: $ identityUrl ;
474+
475+ foreach ($ allowedProviders as $ provider ) {
476+ if (strpos ($ provider , '* ' ) !== false ) {
477+ $ regex = '/^ ' . str_replace ('\* ' , '.* ' , preg_quote ($ provider , '/ ' )) . '$/ ' ;
478+
479+ if (preg_match ($ regex , $ host )) {
480+ return true ;
481+ }
482+ } else {
483+ if ($ host === $ provider ) {
484+ return true ;
485+ }
486+ }
487+ }
488+
489+ return false ;
490+ }
0 commit comments