123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import enum
- from typing import Set, Union
- import flask
- class ScopeE(enum.Enum):
- """ScopeE to distinguish with Scope model"""
- EMAIL = "email"
- NAME = "name"
- OPENID = "openid"
- class ResponseType(enum.Enum):
- CODE = "code"
- TOKEN = "token"
- ID_TOKEN = "id_token"
- def get_scopes(request: flask.Request) -> Set[ScopeE]:
- scope_strs = _split_arg(request.args.getlist("scope"))
- return set([ScopeE(scope_str) for scope_str in scope_strs])
- def get_response_types(request: flask.Request) -> Set[ResponseType]:
- response_type_strs = _split_arg(request.args.getlist("response_type"))
- return set([ResponseType(r) for r in response_type_strs])
- def _split_arg(arg_input: Union[str, list]) -> Set[str]:
- """convert input response_type/scope into a set of string.
- arg_input = request.args.getlist(response_type|scope)
- Take into account different variations and their combinations
- - the split character is " " or ","
- - the response_type/scope passed as a list ?scope=scope_1&scope=scope_2
- """
- res = set()
- if type(arg_input) is str:
- if " " in arg_input:
- for x in arg_input.split(" "):
- if x:
- res.add(x.lower())
- elif "," in arg_input:
- for x in arg_input.split(","):
- if x:
- res.add(x.lower())
- else:
- res.add(arg_input)
- else:
- for arg in arg_input:
- res = res.union(_split_arg(arg))
- return res
|