Tower: upload cetmix_tower_server 16.0.3.0.1 (via marketplace)
This commit is contained in:
70
addons/cetmix_tower_server/models/cx_tower_key_mixin.py
Normal file
70
addons/cetmix_tower_server/models/cx_tower_key_mixin.py
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class CxTowerKeyMixin(models.AbstractModel):
|
||||||
|
"""Mixin for managing secrets and SSH keys"""
|
||||||
|
|
||||||
|
_name = "cx.tower.key.mixin"
|
||||||
|
_description = "Cetmix Tower Key/Secret Mixin"
|
||||||
|
|
||||||
|
secret_ids = fields.Many2many(
|
||||||
|
comodel_name="cx.tower.key",
|
||||||
|
compute="_compute_secret_ids",
|
||||||
|
compute_sudo=True,
|
||||||
|
readonly=True,
|
||||||
|
store=True,
|
||||||
|
string="Secrets",
|
||||||
|
)
|
||||||
|
|
||||||
|
@api.depends("code")
|
||||||
|
def _compute_secret_ids(self):
|
||||||
|
"""
|
||||||
|
Compute the secret IDs based on the references found in the code field.
|
||||||
|
|
||||||
|
This method updates the secret_ids Many2many field by extracting secret
|
||||||
|
references from the code field. If no code is present, the field is cleared.
|
||||||
|
It ensures updates are only triggered when there are differences between
|
||||||
|
the current and new secret IDs.
|
||||||
|
"""
|
||||||
|
for record in self:
|
||||||
|
if record.code:
|
||||||
|
new_secrets = self._extract_secret_ids(record.code)
|
||||||
|
|
||||||
|
# This will create a recordset that contains the difference
|
||||||
|
if record.secret_ids != new_secrets:
|
||||||
|
record.secret_ids = new_secrets
|
||||||
|
else:
|
||||||
|
record.secret_ids = [(5, 0, 0)]
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _extract_secret_ids(self, code):
|
||||||
|
"""
|
||||||
|
Extract secret IDs based on references found in the given `code`.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
code: Text containing potential secret references.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: List of secret IDs corresponding to the references in `code`.
|
||||||
|
"""
|
||||||
|
key_model = self.env["cx.tower.key"]
|
||||||
|
key_strings = key_model._extract_key_strings(code)
|
||||||
|
|
||||||
|
key_refs = []
|
||||||
|
for key_string in key_strings:
|
||||||
|
key_parts = key_model._extract_key_parts(key_string)
|
||||||
|
if key_parts:
|
||||||
|
key_refs.append(key_parts[1])
|
||||||
|
|
||||||
|
return key_model.search(self._compose_secret_search_domain(key_refs))
|
||||||
|
|
||||||
|
def _compose_secret_search_domain(self, key_refs):
|
||||||
|
"""Compose domain for searching secrets by references.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
key_refs (List[str]): List of secret references.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List: final domain for searching secrets.
|
||||||
|
"""
|
||||||
|
return [("reference", "in", key_refs)]
|
||||||
Reference in New Issue
Block a user