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.
64 lines
1.8 KiB
64 lines
1.8 KiB
# -*- coding: utf-8 -*-
|
|
|
|
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})
|