You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
from odoo import models, fields, api
|
|
from .. import random_tokens
|
|
|
|
|
|
class AccessTokenBase(models.AbstractModel):
|
|
_name = "galicea_openid_connect.access_token_base"
|
|
|
|
token = fields.Char(
|
|
readonly=True,
|
|
required=True,
|
|
default=lambda _: random_tokens.alpha_numeric(64),
|
|
index=True,
|
|
)
|
|
client_id = fields.Many2one(
|
|
"galicea_openid_connect.client",
|
|
readonly=True,
|
|
index=True,
|
|
required=True,
|
|
ondelete="cascade",
|
|
)
|
|
|
|
|
|
class AccessToken(models.Model):
|
|
_inherit = "galicea_openid_connect.access_token_base"
|
|
_name = "galicea_openid_connect.access_token"
|
|
_description = "Acccess token representing user-client pair"
|
|
|
|
user_id = fields.Many2one(
|
|
"res.users", required=True, readonly=True, index=True, ondelete="cascade"
|
|
)
|
|
|
|
@api.model
|
|
def retrieve_or_create(self, user_id, client_id):
|
|
existing_tokens = self.search(
|
|
[("user_id", "=", user_id), ("client_id", "=", client_id),]
|
|
)
|
|
if existing_tokens:
|
|
return existing_tokens[0]
|
|
else:
|
|
return self.create({"user_id": user_id, "client_id": client_id})
|
|
|
|
|
|
class ClientAccessToken(models.Model):
|
|
_inherit = "galicea_openid_connect.access_token_base"
|
|
_name = "galicea_openid_connect.client_access_token"
|
|
_description = "Access token representing client credentials"
|
|
|
|
@api.model
|
|
def retrieve_or_create(self, client_id):
|
|
existing_tokens = self.search([("client_id", "=", client_id),])
|
|
if existing_tokens:
|
|
return existing_tokens[0]
|
|
else:
|
|
return self.create({"client_id": client_id})
|