Skip to content
This repository has been archived by the owner on Sep 12, 2024. It is now read-only.

Commit

Permalink
Added proper titles to fields. Added registry encryption settings
Browse files Browse the repository at this point in the history
Signed-off-by: Lalith Kota <[email protected]>
  • Loading branch information
lalithkota committed Mar 22, 2024
1 parent bfc38e1 commit a53761b
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 26 deletions.
28 changes: 21 additions & 7 deletions g2p_encryption_keymanager/models/encryption_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,20 +47,34 @@ def _km_random_secret(self):
def km_generate_current_time(self):
return f'{datetime.utcnow().isoformat(timespec = "milliseconds")}Z'

keymanager_api_base_url = fields.Char(default=KEYMANAGER_API_BASE_URL)
keymanager_auth_url = fields.Char(default=KEYMANAGER_AUTH_URL)
keymanager_auth_client_id = fields.Char(default=KEYMANAGER_AUTH_CLIENT_ID)
keymanager_api_base_url = fields.Char(
"Keymanager API Base URL", default=KEYMANAGER_API_BASE_URL
)
keymanager_auth_url = fields.Char(
"Keymanager Auth URL", default=KEYMANAGER_AUTH_URL
)
keymanager_auth_client_id = fields.Char(
"Keymanager Auth Client ID", default=KEYMANAGER_AUTH_CLIENT_ID
)
keymanager_auth_client_secret = fields.Char(default=KEYMANAGER_AUTH_CLIENT_SECRET)
keymanager_auth_grant_type = fields.Char(default=KEYMANAGER_AUTH_GRANT_TYPE)

keymanager_access_token = fields.Char()
keymanager_access_token_expiry = fields.Datetime()

keymanager_encrypt_application_id = fields.Char(default="REGISTRATION")
keymanager_encrypt_reference_id = fields.Char(default="ENCRYPT")
keymanager_encrypt_application_id = fields.Char(
"Keymanager Encrypt Application ID", default="REGISTRATION"
)
keymanager_encrypt_reference_id = fields.Char(
"Keymanager Encrypt Reference ID", default="ENCRYPT"
)

keymanager_sign_application_id = fields.Char(default="REGISTRATION")
keymanager_sign_reference_id = fields.Char(default="")
keymanager_sign_application_id = fields.Char(
"Keymanager Sign Application ID", default="ID_REPO"
)
keymanager_sign_reference_id = fields.Char(
"Keymanager Sign Reference ID", default=""
)

keymanager_encrypt_salt = fields.Char(default=_km_random_secret)
keymanager_encrypt_aad = fields.Char(default=_km_random_secret)
Expand Down
1 change: 1 addition & 0 deletions g2p_registry_encryption/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"data": [
"data/registry_encryption_provider.xml",
"views/decrypted_partner.xml",
"views/encryption_provider.xml",
"views/res_config_view.xml",
],
"assets": {
Expand Down
24 changes: 23 additions & 1 deletion g2p_registry_encryption/models/encryption_provider.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,31 @@
from odoo import api, models
from odoo import api, fields, models
from odoo.tools import safe_eval


class RegistryEncryptionProvider(models.Model):
_inherit = "g2p.encryption.provider"

registry_fields_to_enc = fields.Text(
"Registry Fields to Encrypt",
default="""[
"name",
"family_name",
"given_name",
"addl_name",
"display_name",
"address",
"birth_place",
]""",
)

registry_enc_field_placeholder = fields.Char(
"Registry Encrypted Field Placeholder", default="encrypted"
)

def get_registry_fields_set_to_enc(self):
self.ensure_one()
return set(safe_eval.safe_eval(self.registry_fields_to_enc))

@api.model
def set_registry_provider(self, provider_id, replace=True):
if provider_id and (
Expand Down
25 changes: 7 additions & 18 deletions g2p_registry_encryption/models/partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,19 @@ class EncryptedPartner(models.Model):
encrypted_val = fields.Binary("Encrypted value", attachment=False)
is_encrypted = fields.Boolean(default=False)

fields_list_to_enc = {
"name",
"family_name",
"given_name",
"addl_name",
"display_name",
"address",
"birth_place",
}

placeholder_to_encrypted_field = "encrypted"

@api.model
def gather_fields_to_be_enc_from_dict(
self,
fields_dict: dict,
prov,
replace=True,
):
to_be_enc = {}
for each in self.fields_list_to_enc:
for each in prov.get_registry_fields_set_to_enc():
if fields_dict.get(each, None):
to_be_enc[each] = fields_dict[each]
if replace:
fields_dict[each] = self.placeholder_to_encrypted_field
fields_dict[each] = prov.registry_enc_field_placeholder
return to_be_enc

def create(self, vals_list):
Expand All @@ -47,7 +36,7 @@ def create(self, vals_list):
prov = self.env["g2p.encryption.provider"].get_registry_provider()
for vals in vals_list:
if vals.get("is_registrant", False):
to_be_encrypted = self.gather_fields_to_be_enc_from_dict(vals)
to_be_encrypted = self.gather_fields_to_be_enc_from_dict(vals, prov)
vals["encrypted_val"] = prov.encrypt_data(
json.dumps(to_be_encrypted).encode()
)
Expand All @@ -69,7 +58,7 @@ def write(self, vals):
for rec, (is_encrypted, encrypted_val) in zip(self, encrypted_vals):
if rec.is_registrant or vals.get("is_registrant", False):
if not is_encrypted:
rec_values_list = rec.read(self.fields_list_to_enc)[0]
rec_values_list = rec.read(prov.get_registry_fields_set_to_enc())[0]
rec_values_list.update(vals)
rec_values_list["is_encrypted"] = True
vals = rec_values_list
Expand All @@ -88,7 +77,8 @@ def write(self, vals):
def _read(self, fields):
fields = set(fields)
res = super()._read(fields)
enc_fields_set = self.fields_list_to_enc.intersection(fields)
prov = self.env["g2p.encryption.provider"].get_registry_provider()
enc_fields_set = prov.get_registry_fields_set_to_enc().intersection(fields)
if not enc_fields_set:
return res
if len(fields) == 2 and "encrypted_val" in fields and "is_encrypted" in fields:
Expand All @@ -101,7 +91,6 @@ def _read(self, fields):
)
if not is_decrypt_fields:
return res
prov = self.env["g2p.encryption.provider"].get_registry_provider()
for record in self:
is_encrypted, encrypted_val = record.get_encrypted_val()[0]
if is_encrypted and encrypted_val:
Expand Down
20 changes: 20 additions & 0 deletions g2p_registry_encryption/views/encryption_provider.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Part of OpenG2P. See LICENSE file for full copyright and licensing details.
-->
<odoo>
<record id="view_registry_encryption_provider_form" model="ir.ui.view">
<field name="name">view_registry_encryption_provider_form</field>
<field name="model">g2p.encryption.provider</field>
<field name="inherit_id" ref="g2p_encryption.view_encryption_provider_form" />
<field name="priority">10</field>
<field name="arch" type="xml">
<form position="inside">
<group name="Registry Settings" string="Registry Settings">
<field name="registry_fields_to_enc" required="True" />
<field name="registry_enc_field_placeholder" required="True" />
</group>
</form>
</field>
</record>
</odoo>

0 comments on commit a53761b

Please sign in to comment.