mirror of
				https://github.com/veops/cmdb.git
				synced 2025-11-04 21:56:16 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# -*- coding:utf-8 -*-
 | 
						|
 | 
						|
"""
 | 
						|
flask_cas.cas_urls
 | 
						|
 | 
						|
Functions for creating urls to access CAS.
 | 
						|
"""
 | 
						|
from six.moves.urllib.parse import quote
 | 
						|
from six.moves.urllib.parse import urlencode
 | 
						|
from six.moves.urllib.parse import urljoin
 | 
						|
 | 
						|
 | 
						|
def create_url(base, path=None, *query):
 | 
						|
    """ Create a url.
 | 
						|
 | 
						|
    Creates a url by combining base, path, and the query's list of
 | 
						|
    key/value pairs. Escaping is handled automatically. Any
 | 
						|
    key/value pair with a value that is None is ignored.
 | 
						|
 | 
						|
    Keyword arguments:
 | 
						|
    base -- The left most part of the url (ex. http://localhost:5000).
 | 
						|
    path -- The path after the base (ex. /foo/bar).
 | 
						|
    query -- A list of key value pairs (ex. [('key', 'value')]).
 | 
						|
 | 
						|
    Example usage:
 | 
						|
    >>> create_url(
 | 
						|
    ...     'http://localhost:5000',
 | 
						|
    ...     'foo/bar',
 | 
						|
    ...     ('key1', 'value'),
 | 
						|
    ...     ('key2', None),     # Will not include None
 | 
						|
    ...     ('url', 'http://example.com'),
 | 
						|
    ... )
 | 
						|
    'http://localhost:5000/foo/bar?key1=value&url=http%3A%2F%2Fexample.com'
 | 
						|
    """
 | 
						|
    url = base
 | 
						|
    # Add the path to the url if it's not None.
 | 
						|
    if path is not None:
 | 
						|
        url = urljoin(url, quote(path))
 | 
						|
        # Remove key/value pairs with None values.
 | 
						|
    query = filter(lambda pair: pair[1] is not None, query)
 | 
						|
    # Add the query string to the url
 | 
						|
    url = urljoin(url, '?{0}'.format(urlencode(list(query))))
 | 
						|
    return url
 | 
						|
 | 
						|
 | 
						|
def create_cas_login_url(cas_url, cas_route, service,
 | 
						|
                         renew=None, gateway=None):
 | 
						|
    """ Create a CAS login URL .
 | 
						|
 | 
						|
    Keyword arguments:
 | 
						|
    cas_url -- The url to the CAS (ex. http://sso.pdx.edu)
 | 
						|
    cas_route -- The route where the CAS lives on server (ex. /cas)
 | 
						|
    service -- (ex.  http://localhost:5000/login)
 | 
						|
    renew -- "true" or "false"
 | 
						|
    gateway -- "true" or "false"
 | 
						|
 | 
						|
    Example usage:
 | 
						|
    >>> create_cas_login_url(
 | 
						|
    ...     'http://sso.pdx.edu',
 | 
						|
    ...     '/cas',
 | 
						|
    ...     'http://localhost:5000',
 | 
						|
    ... )
 | 
						|
    'http://sso.pdx.edu/cas?service=http%3A%2F%2Flocalhost%3A5000'
 | 
						|
    """
 | 
						|
    return create_url(
 | 
						|
        cas_url,
 | 
						|
        cas_route,
 | 
						|
        ('service', service),
 | 
						|
        ('renew', renew),
 | 
						|
        ('gateway', gateway),
 | 
						|
        )
 | 
						|
 | 
						|
 | 
						|
def create_cas_logout_url(cas_url, cas_route, url=None):
 | 
						|
    """ Create a CAS logout URL.
 | 
						|
 | 
						|
    Keyword arguments:
 | 
						|
    cas_url -- The url to the CAS (ex. http://sso.pdx.edu)
 | 
						|
    cas_route -- The route where the CAS lives on server (ex. /cas/logout)
 | 
						|
    url -- (ex.  http://localhost:5000/login)
 | 
						|
 | 
						|
    Example usage:
 | 
						|
    >>> create_cas_logout_url(
 | 
						|
    ...     'http://sso.pdx.edu',
 | 
						|
    ...     '/cas/logout',
 | 
						|
    ...     'http://localhost:5000',
 | 
						|
    ... )
 | 
						|
    'http://sso.pdx.edu/cas/logout?url=http%3A%2F%2Flocalhost%3A5000'
 | 
						|
    """
 | 
						|
    return create_url(
 | 
						|
        cas_url,
 | 
						|
        cas_route,
 | 
						|
        ('service', url),
 | 
						|
        )
 | 
						|
 | 
						|
 | 
						|
def create_cas_validate_url(cas_url, cas_route, service, ticket,
 | 
						|
                            renew=None):
 | 
						|
    """ Create a CAS validate URL.
 | 
						|
 | 
						|
    Keyword arguments:
 | 
						|
    cas_url -- The url to the CAS (ex. http://sso.pdx.edu)
 | 
						|
    cas_route -- The route where the CAS lives on server (ex. /cas/validate)
 | 
						|
    service -- (ex.  http://localhost:5000/login)
 | 
						|
    ticket -- (ex. 'ST-58274-x839euFek492ou832Eena7ee-cas')
 | 
						|
    renew -- "true" or "false"
 | 
						|
 | 
						|
    Example usage:
 | 
						|
    >>> create_cas_validate_url(
 | 
						|
    ...     'http://sso.pdx.edu',
 | 
						|
    ...     '/cas/validate',
 | 
						|
    ...     'http://localhost:5000/login',
 | 
						|
    ...     'ST-58274-x839euFek492ou832Eena7ee-cas'
 | 
						|
    ... )
 | 
						|
    """
 | 
						|
    return create_url(
 | 
						|
        cas_url,
 | 
						|
        cas_route,
 | 
						|
        ('service', service),
 | 
						|
        ('ticket', ticket),
 | 
						|
        ('renew', renew),
 | 
						|
        )
 |