Files
project_v19/project_dashboard_advanced/models/dashboard_api_key.py
T

41 lines
1.5 KiB
Python
Raw Normal View History

2026-07-01 14:41:49 +07:00
# -*- 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