Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IMP] spp_idqueue: add a return statement #698

Open
wants to merge 6 commits into
base: 2-workflow-farmer-registry
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions spp_idqueue/views/id_queue_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
type="object"
icon="fa-check"
title="Approve Request"
help="Approve Request"
class="btn-success"
invisible="status != 'new' or batch_id"
groups="g2p_registry_base.group_g2p_admin,spp_idqueue.group_g2p_id_validator"
Expand All @@ -39,7 +38,6 @@
type="object"
icon="fa-download"
title="Generate Request"
help="Generate Request"
class="btn-primary"
invisible="status != 'approved' or batch_id"
groups="g2p_registry_base.group_g2p_admin,spp_idqueue.group_g2p_id_distributor"
Expand All @@ -49,7 +47,6 @@
type="object"
icon="fa-print"
title="Print Request"
help="Print Request"
class="btn-info"
invisible="status != 'generated' or batch_id"
groups="g2p_registry_base.group_g2p_admin,spp_idqueue.group_g2p_id_distributor"
Expand All @@ -59,7 +56,6 @@
type="object"
icon="fa-truck"
title="Distribute Request"
help="Distribute Request"
class="btn-info"
invisible="status != 'printed'"
groups="g2p_registry_base.group_g2p_admin,spp_idqueue.group_g2p_id_distributor"
Expand Down
2 changes: 1 addition & 1 deletion spp_idqueue/wizard/request_id_wizard.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def request_id(self):
"status": status,
"registrant_id": rec.registrant_id.id,
}
self.env["spp.print.queue.id"].create(vals)
return self.env["spp.print.queue.id"].create(vals)
else:
raise UserError(_("There are no selected Template!"))

Expand Down
1 change: 1 addition & 0 deletions spp_openid_vci/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from . import models
from . import wizard
from . import controllers
1 change: 1 addition & 0 deletions spp_openid_vci/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import controllers
47 changes: 47 additions & 0 deletions spp_openid_vci/controllers/controllers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import json
import logging

import werkzeug.wrappers

from odoo.http import Controller, request, route
from odoo.tools import date_utils

_logger = logging.getLogger(__name__)


class SppOpenIDVCIController(Controller):
def response_wrapper(self, status, data):
return werkzeug.wrappers.Response(
status=status,
content_type="application/json; charset=utf-8",
response=json.dumps(data, default=date_utils.json_default) if data else None,
)

def error_wrapper(self, code, message):
error = {"error": {"code": code, "message": message}}
return self.response_wrapper(code, error)

def verify_jws(self, jws):
enc = request.env.ref("g2p_encryption.encryption_provider_default")

verified, jwt = enc.jwt_verify_jwcrypto(jws)

if not verified:
return False
return jwt

@route("/verify/vc", type="http", auth="none", methods=["Post"], csrf=False)
def verify_vc(self):
data = request.httprequest.data or "{}"
data = json.loads(data)

jws = data.get("jws")

if not jws:
return self.error_wrapper(400, "No JWS provided.")

jwt = self.verify_jws(jws)
if jwt is False:
return self.error_wrapper(401, "Invalid JWS provided.")

return self.response_wrapper(200, {"verified": True, "jwt": jwt.serialize()})
22 changes: 22 additions & 0 deletions spp_openid_vci/models/vci_issuer.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import logging

from odoo import api, models

_logger = logging.getLogger(__name__)


class CustomOpenIDVCIssuer(models.Model):
_inherit = "g2p.openid.vci.issuers"
Expand Down Expand Up @@ -27,3 +31,21 @@ def sign_and_issue_credential(self, credential: dict) -> dict:
ret = dict(credential)
ret["proof"] = ld_proof
return ret

def get_auth_jwks(
self,
auth_issuer: str,
auth_allowed_issuers: list[str],
auth_allowed_jwks_urls: list[str],
):
# Override the method to get the JWKS from the encryption providers
self.ensure_one()
encryption_providers = self.env["g2p.encryption.provider"].sudo().search([])
jwks = []
for prov in encryption_providers:
try:
prov_jwks = prov.get_jwks()
jwks.extend(prov_jwks.get("keys", []) if prov_jwks else [])
except Exception:
_logger.exception("Unable to get JWKS from list of encryption providers")
return {"keys": jwks}