diff --git a/example/satosa/disco.html b/example/satosa/disco.html
index 4f7be81f..391cf5dd 100644
--- a/example/satosa/disco.html
+++ b/example/satosa/disco.html
@@ -183,7 +183,7 @@
-
+
Entra con IT-Wallet
diff --git a/example/satosa/pyeudiw_backend.yaml b/example/satosa/pyeudiw_backend.yaml
index 7493da52..38582e9c 100644
--- a/example/satosa/pyeudiw_backend.yaml
+++ b/example/satosa/pyeudiw_backend.yaml
@@ -3,14 +3,16 @@ name: OpenID4VP
config:
#Those are the endpoints listed on eudi wallet backend
- pre_request_endpoint: '/
/show_qrcode'
- redirect_endpoint: '//redirect_uri'
- request_endpoint: '//request_uri'
- entity_configuration_endpoint: '//entity_configuration'
+
+ endpoints:
+ pre_request: '//pre-request'
+ redirect: '//redirect_uri'
+ request: '//request_uri'
+ entity_configuration: '//entity_configuration'
error_url: "https://localhost:9999/error_page.html"
- qr_code_settings:
+ qrcode_settings:
size: 100
color: '#2B4375'
logo_path:
diff --git a/pyeudiw/satosa/backend.py b/pyeudiw/satosa/backend.py
index 33f04444..af84d3d2 100644
--- a/pyeudiw/satosa/backend.py
+++ b/pyeudiw/satosa/backend.py
@@ -19,20 +19,34 @@ class OpenID4VPBackend(BackendModule):
"""
def __init__(self, auth_callback_func, internal_attributes, config, base_url, name):
- super().__init__(auth_callback_func, internal_attributes, base_url, name)
-
- self.entity_configuration_url = config['entity_configuration_endpoint']
- self.pre_request_url = config['pre_request_endpoint']
- self.redirect_url = config['redirect_endpoint']
- self.request_url = config['request_endpoint']
- self.error_url = config['error_url']
+ """
+ OpenID4VP backend module.
+ :param auth_callback_func: Callback should be called by the module after the authorization
+ in the backend is done.
+ :param internal_attributes: Mapping dictionary between SATOSA internal attribute names and
+ the names returned by underlying IdP's/OP's as well as what attributes the calling SP's and
+ RP's expects namevice.
+ :param config: Configuration parameters for the module.
+ :param base_url: base url of the service
+ :param name: name of the plugin
+ :type auth_callback_func:
+ (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response
+ :type internal_attributes: dict[string, dict[str, str | list[str]]]
+ :type config: dict[str, dict[str, str] | list[str]]
+ :type base_url: str
+ :type name: str
+ """
+ super().__init__(auth_callback_func, internal_attributes, base_url, name)
self.client_id = config['wallet_relying_party']['client_id']
- self.complete_redirect_url = config['wallet_relying_party']['redirect_uris'][0]
- self.complete_request_url = config['wallet_relying_party']['request_uris'][0]
+
+ self.absolute_redirect_url = config['wallet_relying_party']['redirect_uris'][0]
+ self.absolute_request_url = config['wallet_relying_party']['request_uris'][0]
- self.qr_settings = config['qr_code_settings']
+ self.qrcode_settings = config['qrcode_settings']
self.config = config
+
+ logger.debug(f"Loaded configuration:\n{json.dumps(config)}")
def register_endpoints(self):
"""
@@ -43,17 +57,30 @@ def register_endpoints(self):
:return: A list that can be used to map the request to SATOSA to this endpoint.
"""
url_map = []
- url_map.append(
- (f"^{self.entity_configuration_url.lstrip('/')}$", self.entity_configuration))
- url_map.append(
- (f"^{self.pre_request_url.lstrip('/')}$", self.pre_request_endpoint))
- url_map.append(
- (f"^{self.redirect_url.lstrip('/')}$", self.redirect_endpoint))
- url_map.append(
- (f"^{self.request_url.lstrip('/')}$", self.request_endpoint))
+ for k, v in self.config['endpoints'].items():
+ url_map.append(
+ (
+ f"^{v.lstrip('/')}$", getattr(self, f"{k}_endpoint")
+ )
+ )
+ logger.info(f"[OpenID4VP] Loaded endpoint: '{k}'")
return url_map
- def entity_configuration(self, context, *args):
+ def start_auth(self, context, internal_request):
+ """
+ This is the start up function of the backend authorization.
+
+ :type context: satosa.context.Context
+ :type internal_request: satosa.internal.InternalData
+ :rtype satosa.response.Response
+
+ :param context: the request context
+ :param internal_request: Information about the authorization request
+ :return: response
+ """
+ raise NotImplementedError()
+
+ def entity_configuration_endpoint(self, context, *args):
jwk = JWK()
data = {
@@ -166,7 +193,10 @@ def authn_request(self, context, entity_id):
:param entity_id: Target IDP entity id
:return: response to the user agent
"""
-
+ breakpoint()
+ pass
+
+
def handle_error(
self,
message: str,