Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/oauthlib/oauth2/rfc6749/utils.py: 29%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

41 statements  

1""" 

2oauthlib.utils 

3~~~~~~~~~~~~~~ 

4 

5This module contains utility methods used by various parts of the OAuth 2 spec. 

6""" 

7import datetime 

8import os 

9from urllib.parse import quote, urlparse 

10 

11from oauthlib.common import urldecode 

12 

13 

14def list_to_scope(scope): 

15 """Convert a list of scopes to a space separated string.""" 

16 if isinstance(scope, str) or scope is None: 

17 return scope 

18 elif isinstance(scope, (set, tuple, list)): 

19 return " ".join([str(s) for s in scope]) 

20 else: 

21 raise ValueError("Invalid scope (%s), must be string, tuple, set, or list." % scope) 

22 

23 

24def scope_to_list(scope): 

25 """Convert a space separated string to a list of scopes.""" 

26 if isinstance(scope, (tuple, list, set)): 

27 return [str(s) for s in scope] 

28 elif scope is None: 

29 return None 

30 else: 

31 return scope.strip().split(" ") 

32 

33 

34def params_from_uri(uri): 

35 params = dict(urldecode(urlparse(uri).query)) 

36 if 'scope' in params: 

37 params['scope'] = scope_to_list(params['scope']) 

38 return params 

39 

40 

41def host_from_uri(uri): 

42 """Extract hostname and port from URI. 

43 

44 Will use default port for HTTP and HTTPS if none is present in the URI. 

45 """ 

46 default_ports = { 

47 'HTTP': '80', 

48 'HTTPS': '443', 

49 } 

50 

51 sch, netloc, path, par, query, fra = urlparse(uri) 

52 if ':' in netloc: 

53 netloc, port = netloc.split(':', 1) 

54 else: 

55 port = default_ports.get(sch.upper()) 

56 

57 return netloc, port 

58 

59 

60def escape(u): 

61 """Escape a string in an OAuth-compatible fashion. 

62 

63 TODO: verify whether this can in fact be used for OAuth 2 

64 

65 """ 

66 if not isinstance(u, str): 

67 raise ValueError('Only unicode objects are escapable.') 

68 return quote(u.encode('utf-8'), safe=b'~') 

69 

70 

71def generate_age(issue_time): 

72 """Generate a age parameter for MAC authentication draft 00.""" 

73 td = datetime.datetime.now() - issue_time 

74 age = (td.microseconds + (td.seconds + td.days * 24 * 3600) 

75 * 10 ** 6) / 10 ** 6 

76 return str(age) 

77 

78 

79def is_secure_transport(uri): 

80 """Check if the uri is over ssl.""" 

81 if os.environ.get('OAUTHLIB_INSECURE_TRANSPORT'): 

82 return True 

83 return uri.lower().startswith('https://')