# -*- coding: utf-8 -*- from odoo import models, fields, api import secrets class DashboardAPIKey(models.Model): _name = 'dashboard.api.key' _description = 'Dashboard API Key for External Access' _order = 'create_date desc' name = fields.Char(string='Name', required=True) api_key = fields.Char(string='API Key', readonly=True, copy=False, index=True) company_id = fields.Many2one('res.company', string='Company', required=True, default=lambda self: self.env.company) user_id = fields.Many2one('res.users', string='User', required=True, default=lambda self: self.env.user) active = fields.Boolean(default=True) description = fields.Text(string='Description') last_used = fields.Datetime(string='Last Used', readonly=True) expiry_date = fields.Datetime(string='Expiry Date') @api.model def create(self, vals): # Generate API key if not provided if not vals.get('api_key'): vals['api_key'] = f"pda_{secrets.token_urlsafe(32)}" return super().create(vals) def action_regenerate_key(self): """Regenerate API key""" self.ensure_one() self.write({'api_key': f"pda_{secrets.token_urlsafe(32)}"}) return True def action_check_validity(self): """Check if API key is still valid""" self.ensure_one() if not self.active: return False if self.expiry_date and fields.Datetime.now() > self.expiry_date: return False return True