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.
 
 
 

72 lines
2.3 KiB

# -*- coding: utf-8 -*-
from odoo import models, fields, api
from .. import random_tokens
class Client(models.Model):
_name = "galicea_openid_connect.client"
_description = "OpenID Connect client"
name = fields.Char(required=True)
auth_redirect_uri = fields.Char("Redirect URI for user login")
client_id = fields.Char(
string="Client ID",
required=True,
readonly=False,
index=True,
default=lambda _: random_tokens.lower_case(16),
)
secret = fields.Char(
string="Client secret",
required=True,
readonly=False,
default=lambda _: random_tokens.alpha_numeric(32),
groups="galicea_openid_connect.group_admin",
)
system_user_id = fields.Many2one(
"res.users",
"Artificial user representing the client in client credentials requests",
readonly=True,
required=True,
ondelete="restrict",
)
allow_password_grant = fields.Boolean(
string="Allow OAuth2 password grant",
default=False,
)
@api.model
def __system_user_name(self, client_name):
return "{} - API system user".format(client_name)
@api.model
def create(self, values):
if "name" in values:
system_user = self.env["res.users"].create(
{
"name": self.__system_user_name(values["name"]),
"login": random_tokens.lower_case(8),
"groups_id": [
(4, self.env.ref("galicea_openid_connect.group_system_user").id)
],
}
)
# Do not include in the "Pending invitations" list
system_user._update_last_login()
values["system_user_id"] = system_user.id
return super(Client, self).create(values)
def write(selfs, values):
super(Client, selfs).write(values)
if "name" in values:
selfs.mapped(lambda client: client.system_user_id).write(
{"name": selfs.__system_user_name(values["name"])}
)
return True
def unlink(selfs):
users_to_unlink = selfs.mapped(lambda client: client.system_user_id)
ret = super(Client, selfs).unlink()
users_to_unlink.unlink()
return ret