@@ -456,6 +456,40 @@ def unset_login_banner(self):
456456 mgr .set_store ('custom_login_banner' , None )
457457 return HandleCommandResult (stdout = 'Login banner removed' )
458458
459+ # allow cors by setting cross_origin_url
460+ # the value is a comma separated list of URLs
461+ @CLIWriteCommand ("dashboard set-cross-origin-url" )
462+ def set_cross_origin_url (self , value : str ):
463+ cross_origin_urls = self .get_module_option ('cross_origin_url' , '' )
464+ cross_origin_urls_list = [url .strip ()
465+ for url in cross_origin_urls .split (',' )] # type: ignore
466+ urls = [v .strip () for v in value .split (',' )]
467+ for url in urls :
468+ if url in cross_origin_urls_list :
469+ return - errno .EINVAL , '' , 'Cross-origin URL already set'
470+ cross_origin_urls_list .append (url )
471+ self .set_module_option ('cross_origin_url' , ',' .join (cross_origin_urls_list ))
472+ configure_cors ()
473+ return 0 , 'Cross-origin URL set' , ''
474+
475+ @CLIReadCommand ("dashboard get-cross-origin-url" )
476+ def get_cross_origin_url (self ):
477+ urls = self .get_module_option ('cross_origin_url' , '' )
478+ if urls :
479+ return HandleCommandResult (stdout = urls ) # type: ignore
480+ return HandleCommandResult (stdout = 'No cross-origin URL set' )
481+
482+ @CLIReadCommand ("dashboard rm-cross-origin-url" )
483+ def rm_cross_origin_url (self , value : str ):
484+ urls = self .get_module_option ('cross_origin_url' , '' )
485+ urls_list = [url .strip () for url in urls .split (',' )] # type: ignore
486+ if value not in urls_list :
487+ return - errno .EINVAL , '' , 'Cross-origin URL not set'
488+ urls_list .remove (value )
489+ self .set_module_option ('cross_origin_url' , ',' .join (urls_list ))
490+ configure_cors ()
491+ return 0 , 'Cross-origin URL removed' , ''
492+
459493 def handle_command (self , inbuf , cmd ):
460494 # pylint: disable=too-many-return-statements
461495 res = handle_option_command (cmd , inbuf )
0 commit comments