Compare commits
No commits in common. "1e223e7b575fc505b568f549b55d2ba6696d4ec2" and "94168554f2127d94b6d17667a7f8749d6fa17837" have entirely different histories.
1e223e7b57
...
94168554f2
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
applicationservice_name:
|
applicationservice_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -5,6 +5,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_name:
|
source_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
applicationservice_name:
|
applicationservice_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
applicationservice_id:
|
applicationservice_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: event
|
pattern: event
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
server_id:
|
server_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
server_id:
|
server_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: event
|
pattern: event
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
server_id:
|
server_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -5,6 +5,8 @@ description: Crée un serveur.
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
server_name:
|
server_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -5,6 +5,8 @@ description: Un serveur a été créé.
|
|||||||
|
|
||||||
pattern: event
|
pattern: event
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
type: Server
|
type: Server
|
||||||
description: Description du serveur.
|
description: Description du serveur.
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: event
|
pattern: event
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
server_id:
|
server_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -5,6 +5,8 @@ description: Retourne les attributs détaillés d’un serveur.
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
server_name:
|
server_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -4,6 +4,8 @@ uri: server.list
|
|||||||
description: |
|
description: |
|
||||||
Liste les serveurs disponibles.
|
Liste les serveurs disponibles.
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
response:
|
response:
|
||||||
|
@ -5,6 +5,8 @@ description: Des modèles de serveur ont été créés.
|
|||||||
|
|
||||||
pattern: event
|
pattern: event
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
type: Servermodel
|
type: Servermodel
|
||||||
description: Informations sur les modèles de serveur créés.
|
description: Informations sur les modèles de serveur créés.
|
||||||
|
@ -5,6 +5,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_name:
|
source_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -5,6 +5,8 @@ description: Retourne les attributs détaillés d'un modèle de serveur suivant
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
servermodel_id:
|
servermodel_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_id:
|
source_id:
|
||||||
type: Number
|
type: Number
|
||||||
@ -17,3 +19,13 @@ parameters:
|
|||||||
response:
|
response:
|
||||||
type: '[]Servermodel'
|
type: '[]Servermodel'
|
||||||
description: Liste des modèles de serveur disponibles.
|
description: Liste des modèles de serveur disponibles.
|
||||||
|
|
||||||
|
errors:
|
||||||
|
- uri: servermodel.list.error.database_not_available
|
||||||
|
|
||||||
|
related:
|
||||||
|
- servermodel.describe
|
||||||
|
- servermodel.create
|
||||||
|
- servermodel.update
|
||||||
|
- servermodel.delete
|
||||||
|
- servermodel.event
|
||||||
|
@ -5,6 +5,8 @@ description: Des modèles de serveur ont été modifiés.
|
|||||||
|
|
||||||
pattern: event
|
pattern: event
|
||||||
|
|
||||||
|
public: false
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
type: 'Servermodel'
|
type: 'Servermodel'
|
||||||
description: Informations sur les modèles de serveur modifiés.
|
description: Informations sur les modèles de serveur modifiés.
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
response:
|
response:
|
||||||
type: '[]Session'
|
type: '[]Session'
|
||||||
description: |
|
description: |
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
id:
|
id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
ref: Config.SessionId
|
ref: Config.SessionId
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
ref: Config.SessionId
|
ref: Config.SessionId
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
type: String
|
type: String
|
||||||
|
@ -5,6 +5,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
response:
|
response:
|
||||||
type: '[]Session'
|
type: '[]Session'
|
||||||
description: |
|
description: |
|
||||||
|
@ -5,6 +5,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
id:
|
id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -5,6 +5,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
ref: Config.SessionId
|
ref: Config.SessionId
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
session_id:
|
session_id:
|
||||||
ref: Config.SessionId
|
ref: Config.SessionId
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_name:
|
source_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -5,6 +5,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_id:
|
source_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_name:
|
source_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
response:
|
response:
|
||||||
type: '[]Source'
|
type: '[]Source'
|
||||||
description: Liste des sources disponibles.
|
description: Liste des sources disponibles.
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_id:
|
source_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
source_id:
|
source_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
release_id:
|
release_id:
|
||||||
type: Number
|
type: Number
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
response:
|
response:
|
||||||
type: '[]Release'
|
type: '[]Release'
|
||||||
description: Liste des versions disponibles.
|
description: Liste des versions disponibles.
|
||||||
|
@ -6,6 +6,8 @@ description: |
|
|||||||
|
|
||||||
pattern: rpc
|
pattern: rpc
|
||||||
|
|
||||||
|
public: true
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
server_name:
|
server_name:
|
||||||
type: String
|
type: String
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
uri: uri.role.join
|
|
||||||
|
|
||||||
description: Crée un rôle utilisateur.
|
|
||||||
|
|
||||||
pattern: rpc
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
role_name:
|
|
||||||
type: String
|
|
||||||
shortarg: r
|
|
||||||
description: Nom du rôle.
|
|
||||||
ref: User.RoleName
|
|
||||||
uri_name:
|
|
||||||
type: String
|
|
||||||
shortarg: u
|
|
||||||
description: Nom du message.
|
|
||||||
|
|
||||||
response:
|
|
||||||
type: URIRole
|
|
||||||
description: Association de rôle créé.
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
uri: uri.role.list
|
|
||||||
|
|
||||||
description: Liste des associations d'URI et de rôle.
|
|
||||||
|
|
||||||
pattern: rpc
|
|
||||||
|
|
||||||
response:
|
|
||||||
type: '[]URIRole'
|
|
||||||
description: Liste des associations.
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
uri: user.create
|
|
||||||
|
|
||||||
description: Crée un utilisateur.
|
|
||||||
|
|
||||||
pattern: rpc
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
user_login:
|
|
||||||
type: String
|
|
||||||
shortarg: l
|
|
||||||
description: Login de l'utilisateur.
|
|
||||||
ref: User.Login
|
|
||||||
user_name:
|
|
||||||
type: String
|
|
||||||
shortarg: n
|
|
||||||
description: Nom de l'utilisateur.
|
|
||||||
user_surname:
|
|
||||||
type: String
|
|
||||||
shortarg: s
|
|
||||||
description: Nom de famille de l'utilisateur.
|
|
||||||
|
|
||||||
response:
|
|
||||||
type: User
|
|
||||||
description: Description de l'utilisateur créé.
|
|
@ -1,18 +0,0 @@
|
|||||||
---
|
|
||||||
uri: user.delete
|
|
||||||
|
|
||||||
description: Supprimer un utilisateur.
|
|
||||||
|
|
||||||
pattern: rpc
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
user_login:
|
|
||||||
type: String
|
|
||||||
shortarg: l
|
|
||||||
description: Login de l'utilisateur.
|
|
||||||
ref: User.Login
|
|
||||||
|
|
||||||
response:
|
|
||||||
type: User
|
|
||||||
description: Description de l'utilisateur supprimé.
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
uri: user.list
|
|
||||||
|
|
||||||
description: |
|
|
||||||
Liste les utilisateurs disponibles.
|
|
||||||
|
|
||||||
pattern: rpc
|
|
||||||
|
|
||||||
response:
|
|
||||||
type: '[]User'
|
|
||||||
description: Retourne la liste des utilisateurs.
|
|
@ -1,32 +0,0 @@
|
|||||||
---
|
|
||||||
uri: user.role.create
|
|
||||||
|
|
||||||
description: Crée un rôle utilisateur.
|
|
||||||
|
|
||||||
pattern: rpc
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
user_login:
|
|
||||||
type: String
|
|
||||||
shortarg: l
|
|
||||||
description: Login de l'utilisateur.
|
|
||||||
ref: User.UserLogin
|
|
||||||
role_name:
|
|
||||||
type: String
|
|
||||||
shortarg: n
|
|
||||||
description: Nom du rôle.
|
|
||||||
ref: User.RoleName
|
|
||||||
role_attribute:
|
|
||||||
type: String
|
|
||||||
shortarg: a
|
|
||||||
description: Attribut contrôlé.
|
|
||||||
default: null
|
|
||||||
role_attribute_value:
|
|
||||||
type: String
|
|
||||||
shortarg: v
|
|
||||||
description: Valeur de l'attribut contrôlé.
|
|
||||||
default: null
|
|
||||||
|
|
||||||
response:
|
|
||||||
type: Role
|
|
||||||
description: Description du rôle créé.
|
|
@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
uri: user.role.list
|
|
||||||
|
|
||||||
description: |
|
|
||||||
Liste les rôles disponibles.
|
|
||||||
|
|
||||||
pattern: rpc
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
user_login:
|
|
||||||
type: String
|
|
||||||
shortarg: l
|
|
||||||
description: Login de l'utilisateur associé.
|
|
||||||
ref: User.RoleName
|
|
||||||
default: null
|
|
||||||
|
|
||||||
response:
|
|
||||||
type: '[]Role'
|
|
||||||
description: Retourne la liste des rôles.
|
|
@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
title: Role
|
|
||||||
type: object
|
|
||||||
description: Description du rôle.
|
|
||||||
properties:
|
|
||||||
role_id:
|
|
||||||
type: number
|
|
||||||
description: Identifiant de l'utilisateur.
|
|
||||||
ref: User.RoleUserId
|
|
||||||
user_login:
|
|
||||||
type: string
|
|
||||||
description: Login du l'utilisateur.
|
|
||||||
ref: User.Login
|
|
||||||
role_name:
|
|
||||||
type: string
|
|
||||||
description: Nom du rôle.
|
|
||||||
role_attribute:
|
|
||||||
type: string
|
|
||||||
description: Nom de l'utilisateur.
|
|
||||||
role_attribute_value:
|
|
||||||
type: string
|
|
||||||
description: Valeur de l'attribut contrôlé.
|
|
||||||
|
|
||||||
required:
|
|
||||||
- role_id
|
|
||||||
- role_name
|
|
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
title: URIRole
|
|
||||||
type: object
|
|
||||||
description: Description de l'assication du message et du rôle.
|
|
||||||
properties:
|
|
||||||
role_name:
|
|
||||||
type: string
|
|
||||||
description: Nom du rôle
|
|
||||||
ref: User.RoleName
|
|
||||||
uri_name:
|
|
||||||
type: string
|
|
||||||
description: Nom du message
|
|
||||||
required:
|
|
||||||
- role_name
|
|
||||||
- uri_name
|
|
@ -1,24 +0,0 @@
|
|||||||
---
|
|
||||||
title: User
|
|
||||||
type: object
|
|
||||||
description: Description de l'utilisateur.
|
|
||||||
properties:
|
|
||||||
user_id:
|
|
||||||
type: number
|
|
||||||
description: Identifiant de l'utilisateur.
|
|
||||||
ref: User.UserId
|
|
||||||
user_login:
|
|
||||||
type: string
|
|
||||||
description: Login de l'utilisateur.
|
|
||||||
user_name:
|
|
||||||
type: string
|
|
||||||
description: Nom de l'utilisateur.
|
|
||||||
user_surname:
|
|
||||||
type: string
|
|
||||||
description: Nom de famille de l'utilisateur.
|
|
||||||
|
|
||||||
required:
|
|
||||||
- user_id
|
|
||||||
- user_login
|
|
||||||
- user_name
|
|
||||||
- user_surname
|
|
@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
title: UserRole
|
|
||||||
type: object
|
|
||||||
description: Description de l'association du rôle et de l'utilisateur.
|
|
||||||
properties:
|
|
||||||
user_role_id:
|
|
||||||
type: number
|
|
||||||
description: Identifiant de l'association.
|
|
||||||
ref: User.UserRoleId
|
|
||||||
user_login:
|
|
||||||
type: string
|
|
||||||
description: Login de l'utilisateur.
|
|
||||||
role_name:
|
|
||||||
type: string
|
|
||||||
description: Nom du rôle.
|
|
||||||
|
|
||||||
required:
|
|
||||||
- user_role_id
|
|
||||||
- user_login
|
|
||||||
- role_name
|
|
@ -92,7 +92,9 @@ class CallDispatcher:
|
|||||||
if function_obj['database'] and hasattr(old_risotto_context, 'connection'):
|
if function_obj['database'] and hasattr(old_risotto_context, 'connection'):
|
||||||
risotto_context.connection = old_risotto_context.connection
|
risotto_context.connection = old_risotto_context.connection
|
||||||
if function_obj['database'] and not hasattr(risotto_context, 'connection'):
|
if function_obj['database'] and not hasattr(risotto_context, 'connection'):
|
||||||
async with self.pool.acquire() as connection:
|
db_conf = get_config().get('database')
|
||||||
|
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
|
||||||
|
async with pool.acquire() as connection:
|
||||||
await connection.set_type_codec(
|
await connection.set_type_codec(
|
||||||
'json',
|
'json',
|
||||||
encoder=dumps,
|
encoder=dumps,
|
||||||
@ -179,7 +181,9 @@ class PublishDispatcher:
|
|||||||
if function_obj['database'] and hasattr(old_risotto_context, 'connection'):
|
if function_obj['database'] and hasattr(old_risotto_context, 'connection'):
|
||||||
risotto_context.connection = old_risotto_context.connection
|
risotto_context.connection = old_risotto_context.connection
|
||||||
if function_obj['database'] and not hasattr(risotto_context, 'connection'):
|
if function_obj['database'] and not hasattr(risotto_context, 'connection'):
|
||||||
async with self.pool.acquire() as connection:
|
db_conf = get_config().get('database')
|
||||||
|
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
|
||||||
|
async with pool.acquire() as connection:
|
||||||
await connection.set_type_codec(
|
await connection.set_type_codec(
|
||||||
'json',
|
'json',
|
||||||
encoder=dumps,
|
encoder=dumps,
|
||||||
@ -279,7 +283,9 @@ class Dispatcher(register.RegisterDispatcher, CallDispatcher, PublishDispatcher)
|
|||||||
config: Config,
|
config: Config,
|
||||||
user_login: str,
|
user_login: str,
|
||||||
uri: str) -> None:
|
uri: str) -> None:
|
||||||
async with self.pool.acquire() as connection:
|
db_conf = get_config().get('database')
|
||||||
|
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
|
||||||
|
async with pool.acquire() as connection:
|
||||||
async with connection.transaction():
|
async with connection.transaction():
|
||||||
# Verify if user exists and get ID
|
# Verify if user exists and get ID
|
||||||
sql = '''
|
sql = '''
|
||||||
|
@ -89,7 +89,8 @@ async def handle(request):
|
|||||||
async def api(request, risotto_context):
|
async def api(request, risotto_context):
|
||||||
global tiramisu
|
global tiramisu
|
||||||
if not tiramisu:
|
if not tiramisu:
|
||||||
config = await Config(get_messages(load_shortarg=True)[1])
|
config = await Config(get_messages(load_shortarg=True,
|
||||||
|
only_public=True)[1])
|
||||||
await config.property.read_write()
|
await config.property.read_write()
|
||||||
tiramisu = await config.option.dict(remotable='none')
|
tiramisu = await config.option.dict(remotable='none')
|
||||||
return tiramisu
|
return tiramisu
|
||||||
@ -112,8 +113,11 @@ async def get_app(loop):
|
|||||||
print(_('======== Registered messages ========'))
|
print(_('======== Registered messages ========'))
|
||||||
for message in messages:
|
for message in messages:
|
||||||
web_message = f'/api/{version}/{message}'
|
web_message = f'/api/{version}/{message}'
|
||||||
|
if dispatcher.messages[version][message]['public']:
|
||||||
|
print(f' - {web_message}')
|
||||||
|
else:
|
||||||
pattern = dispatcher.messages[version][message]['pattern']
|
pattern = dispatcher.messages[version][message]['pattern']
|
||||||
print(f' - {web_message} ({pattern})')
|
print(f' - {web_message} (private {pattern})')
|
||||||
routes.append(post(web_message, handle))
|
routes.append(post(web_message, handle))
|
||||||
print()
|
print()
|
||||||
print(_('======== Registered extra routes ========'))
|
print(_('======== Registered extra routes ========'))
|
||||||
|
@ -44,6 +44,7 @@ class MessageDefinition:
|
|||||||
'uri',
|
'uri',
|
||||||
'description',
|
'description',
|
||||||
'parameters',
|
'parameters',
|
||||||
|
'public',
|
||||||
'errors',
|
'errors',
|
||||||
'pattern',
|
'pattern',
|
||||||
'related',
|
'related',
|
||||||
@ -53,6 +54,7 @@ class MessageDefinition:
|
|||||||
# default value for non mandatory key
|
# default value for non mandatory key
|
||||||
self.version = u''
|
self.version = u''
|
||||||
self.parameters = OrderedDict()
|
self.parameters = OrderedDict()
|
||||||
|
self.public = False
|
||||||
self.errors = []
|
self.errors = []
|
||||||
self.related = []
|
self.related = []
|
||||||
self.response = None
|
self.response = None
|
||||||
@ -61,7 +63,10 @@ class MessageDefinition:
|
|||||||
for key, value in raw_def.items():
|
for key, value in raw_def.items():
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
value = value.strip()
|
value = value.strip()
|
||||||
if key == 'pattern':
|
if key == 'public':
|
||||||
|
if not isinstance(value, bool):
|
||||||
|
raise ValueError(_("{} must be a boolean, not {}").format(key, value))
|
||||||
|
elif key == 'pattern':
|
||||||
if value not in ['rpc', 'event', 'error']:
|
if value not in ['rpc', 'event', 'error']:
|
||||||
raise Exception(_('unknown pattern {}').format(value))
|
raise Exception(_('unknown pattern {}').format(value))
|
||||||
elif key == 'parameters':
|
elif key == 'parameters':
|
||||||
@ -81,6 +86,9 @@ class MessageDefinition:
|
|||||||
getattr(self, key)
|
getattr(self, key)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise Exception(_('mandatory key not set {} message').format(key))
|
raise Exception(_('mandatory key not set {} message').format(key))
|
||||||
|
# message with pattern = error must be public
|
||||||
|
if self.public is False and self.pattern == 'error':
|
||||||
|
raise Exception(_('Error message must be public : {}').format(self.uri))
|
||||||
if self.uri != message:
|
if self.uri != message:
|
||||||
raise Exception(_(f'yaml file name "{message}.yml" does not match uri "{self.uri}"'))
|
raise Exception(_(f'yaml file name "{message}.yml" does not match uri "{self.uri}"'))
|
||||||
|
|
||||||
@ -573,7 +581,7 @@ def _get_root_option(select_option, optiondescriptions):
|
|||||||
return OptionDescription('root', 'root', options_obj)
|
return OptionDescription('root', 'root', options_obj)
|
||||||
|
|
||||||
|
|
||||||
def get_messages(load_shortarg=False):
|
def get_messages(load_shortarg=False, only_public=False):
|
||||||
"""generate description from yml files
|
"""generate description from yml files
|
||||||
"""
|
"""
|
||||||
optiondescriptions = OrderedDict()
|
optiondescriptions = OrderedDict()
|
||||||
@ -584,7 +592,8 @@ def get_messages(load_shortarg=False):
|
|||||||
messages.sort()
|
messages.sort()
|
||||||
for message_name in messages:
|
for message_name in messages:
|
||||||
message_def = get_message(message_name)
|
message_def = get_message(message_name)
|
||||||
if message_def.pattern not in ['rpc', 'event']:
|
if message_def.pattern not in ['rpc', 'event'] or \
|
||||||
|
(not message_def.public and only_public):
|
||||||
continue
|
continue
|
||||||
optiondescriptions_name.append(message_def.uri)
|
optiondescriptions_name.append(message_def.uri)
|
||||||
optiondescriptions_name.sort()
|
optiondescriptions_name.sort()
|
||||||
@ -594,9 +603,11 @@ def get_messages(load_shortarg=False):
|
|||||||
properties=frozenset(['mandatory', 'positional']))
|
properties=frozenset(['mandatory', 'positional']))
|
||||||
for message_name in messages:
|
for message_name in messages:
|
||||||
message_def = get_message(message_name)
|
message_def = get_message(message_name)
|
||||||
if message_def.pattern not in ['rpc', 'event']:
|
if message_def.pattern not in ['rpc', 'event'] or \
|
||||||
|
(not message_def.public and only_public):
|
||||||
continue
|
continue
|
||||||
optiondescriptions_info[message_def.uri] = {'pattern': message_def.pattern}
|
optiondescriptions_info[message_def.uri] = {'pattern': message_def.pattern,
|
||||||
|
'public': message_def.public}
|
||||||
if message_def.pattern == 'rpc':
|
if message_def.pattern == 'rpc':
|
||||||
optiondescriptions_info[message_def.uri]['response'] = _parse_responses(message_def,
|
optiondescriptions_info[message_def.uri]['response'] = _parse_responses(message_def,
|
||||||
message_name)
|
message_name)
|
||||||
|
@ -33,8 +33,6 @@ class RegisterDispatcher:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
# reference to instanciate module (to inject self in method): {"module_name": instance_of_module}
|
# reference to instanciate module (to inject self in method): {"module_name": instance_of_module}
|
||||||
self.injected_self = {}
|
self.injected_self = {}
|
||||||
# postgresql pool
|
|
||||||
self.pool = None
|
|
||||||
# list of uris with informations: {"v1": {"module_name.xxxxx": yyyyyy}}
|
# list of uris with informations: {"v1": {"module_name.xxxxx": yyyyyy}}
|
||||||
self.messages = {}
|
self.messages = {}
|
||||||
# load tiramisu objects
|
# load tiramisu objects
|
||||||
@ -263,8 +261,8 @@ class RegisterDispatcher:
|
|||||||
async def load(self):
|
async def load(self):
|
||||||
# valid function's arguments
|
# valid function's arguments
|
||||||
db_conf = get_config().get('database')
|
db_conf = get_config().get('database')
|
||||||
self.pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
|
pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user'))
|
||||||
async with self.pool.acquire() as connection:
|
async with pool.acquire() as connection:
|
||||||
async with connection.transaction():
|
async with connection.transaction():
|
||||||
for version, messages in self.messages.items():
|
for version, messages in self.messages.items():
|
||||||
for message, message_infos in messages.items():
|
for message, message_infos in messages.items():
|
||||||
|
@ -1 +0,0 @@
|
|||||||
from .uri import Risotto
|
|
@ -1,100 +0,0 @@
|
|||||||
from typing import Dict, List
|
|
||||||
|
|
||||||
from ...controller import Controller
|
|
||||||
from ...register import register
|
|
||||||
from ...context import Context
|
|
||||||
from ...utils import _
|
|
||||||
|
|
||||||
|
|
||||||
class Risotto(Controller):
|
|
||||||
async def on_join(self,
|
|
||||||
risotto_context):
|
|
||||||
for uri in ['v1.applicationservice.create',
|
|
||||||
'v1.applicationservice.dataset.updated',
|
|
||||||
'v1.server.create',
|
|
||||||
'v1.servermodel.dataset.updated',
|
|
||||||
'v1.session.server.start',
|
|
||||||
'v1.source.create',
|
|
||||||
'v1.source.dataset.update',
|
|
||||||
'v1.source.release.create',
|
|
||||||
'v1.template.generate',
|
|
||||||
'v1.uri.role.join',
|
|
||||||
'v1.uri.role.list',
|
|
||||||
'v1.user.create',
|
|
||||||
'v1.user.delete',
|
|
||||||
'v1.user.list',
|
|
||||||
'v1.user.role.create',
|
|
||||||
'v1.user.role.list']:
|
|
||||||
try:
|
|
||||||
await self.call('v1.uri.role.join',
|
|
||||||
risotto_context,
|
|
||||||
role_name='administrator',
|
|
||||||
uri_name=uri)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
for uri in ['v1.applicationservice.describe',
|
|
||||||
'v1.applicationservice.get_by_id',
|
|
||||||
'v1.server.describe',
|
|
||||||
'v1.server.list',
|
|
||||||
'v1.servermodel.list',
|
|
||||||
'v1.session.server.configure',
|
|
||||||
'v1.session.server.filter',
|
|
||||||
'v1.session.server.get',
|
|
||||||
'v1.session.server.list',
|
|
||||||
'v1.session.servermodel.configure',
|
|
||||||
'v1.session.servermodel.filter',
|
|
||||||
'v1.session.servermodel.get',
|
|
||||||
'v1.session.servermodel.list',
|
|
||||||
'v1.session.servermodel.start',
|
|
||||||
'v1.session.servermodel.stop',
|
|
||||||
'v1.session.servermodel.validate',
|
|
||||||
'v1.session.server.stop',
|
|
||||||
'v1.session.server.validate',
|
|
||||||
'v1.source.describe',
|
|
||||||
'v1.source.list',
|
|
||||||
'v1.source.release.get_by_distribution',
|
|
||||||
'v1.source.release.get_by_id',
|
|
||||||
'v1.source.release.list']:
|
|
||||||
try:
|
|
||||||
await self.call('v1.uri.role.join',
|
|
||||||
risotto_context,
|
|
||||||
role_name='all',
|
|
||||||
uri_name=uri)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@register('v1.uri.role.join', None, database=True)
|
|
||||||
async def uri_role_join(self,
|
|
||||||
risotto_context: Context,
|
|
||||||
role_name: str,
|
|
||||||
uri_name: str) -> Dict:
|
|
||||||
# Verify if user exists and get ID
|
|
||||||
sql = '''
|
|
||||||
SELECT URIId
|
|
||||||
FROM URI
|
|
||||||
WHERE URIName = $1
|
|
||||||
'''
|
|
||||||
uri_id = await risotto_context.connection.fetchval(sql,
|
|
||||||
uri_name)
|
|
||||||
if uri_id is None:
|
|
||||||
raise Exception(_(f'unable to find message {uri_name}'))
|
|
||||||
sql = '''
|
|
||||||
INSERT INTO RoleURI(RoleName, URIId)
|
|
||||||
VALUES ($1,$2)
|
|
||||||
ON CONFLICT DO NOTHING
|
|
||||||
'''
|
|
||||||
uri_id = await risotto_context.connection.fetchrow(sql,
|
|
||||||
role_name,
|
|
||||||
uri_id)
|
|
||||||
return {'role_name': role_name,
|
|
||||||
'uri_name': uri_name}
|
|
||||||
|
|
||||||
@register('v1.uri.role.list', None, database=True)
|
|
||||||
async def uri_role_list(self,
|
|
||||||
risotto_context: Context) -> List[Dict]:
|
|
||||||
sql = '''
|
|
||||||
SELECT RoleName as role_name, URI.URIName as uri
|
|
||||||
FROM RoleURI, URI
|
|
||||||
WHERE RoleURI.URIId = URI.URIId
|
|
||||||
'''
|
|
||||||
return [dict(r) for r in await risotto_context.connection.fetch(sql)]
|
|
@ -1 +0,0 @@
|
|||||||
from .user import Risotto
|
|
@ -1,147 +0,0 @@
|
|||||||
from typing import Dict, Optional
|
|
||||||
|
|
||||||
from ...controller import Controller
|
|
||||||
from ...register import register
|
|
||||||
from ...context import Context
|
|
||||||
from ...utils import _
|
|
||||||
|
|
||||||
|
|
||||||
class Risotto(Controller):
|
|
||||||
@register('v1.user.create', None, database=True)
|
|
||||||
async def user_create(self,
|
|
||||||
risotto_context: Context,
|
|
||||||
user_login: str,
|
|
||||||
user_name: str,
|
|
||||||
user_surname: str) -> Dict:
|
|
||||||
user_insert = """INSERT INTO RisottoUser(UserLogin, UserName, UserSurname)
|
|
||||||
VALUES ($1,$2,$3)
|
|
||||||
RETURNING UserId
|
|
||||||
"""
|
|
||||||
user_id = await risotto_context.connection.fetchval(user_insert,
|
|
||||||
user_login,
|
|
||||||
user_name,
|
|
||||||
user_surname)
|
|
||||||
await self.call('v1.user.role.create',
|
|
||||||
risotto_context,
|
|
||||||
user_login=user_login,
|
|
||||||
role_name='all')
|
|
||||||
return {'user_id': user_id,
|
|
||||||
'user_login': user_login,
|
|
||||||
'user_name': user_name,
|
|
||||||
'user_surname': user_surname}
|
|
||||||
|
|
||||||
@register('v1.user.list', None, database=True)
|
|
||||||
async def user_list(self,
|
|
||||||
risotto_context: Context) -> Dict:
|
|
||||||
sql = '''
|
|
||||||
SELECT UserId as user_id, UserLogin as user_login, UserName as user_name, UserSurname as user_surname
|
|
||||||
FROM RisottoUser
|
|
||||||
'''
|
|
||||||
users = await risotto_context.connection.fetch(sql)
|
|
||||||
return [dict(r) for r in users]
|
|
||||||
|
|
||||||
@register('v1.user.delete', None, database=True)
|
|
||||||
async def user_delete(self,
|
|
||||||
risotto_context: Context,
|
|
||||||
user_login: str) -> Dict:
|
|
||||||
sql = '''
|
|
||||||
DELETE FROM RisottoUser
|
|
||||||
WHERE UserLogin = $1
|
|
||||||
RETURNING UserId as user_id, UserLogin as user_login, UserName as user_name, UserSurname as user_surname
|
|
||||||
'''
|
|
||||||
user = await risotto_context.connection.fetchrow(sql,
|
|
||||||
user_login)
|
|
||||||
if user is None:
|
|
||||||
raise Exception(_(f'unable to find user {user_login}'))
|
|
||||||
return dict(user)
|
|
||||||
|
|
||||||
@register('v1.user.role.create', None, database=True)
|
|
||||||
async def user_role_create(self,
|
|
||||||
risotto_context: Context,
|
|
||||||
user_login: str,
|
|
||||||
role_name: str,
|
|
||||||
role_attribute: str,
|
|
||||||
role_attribute_value: str) -> Dict:
|
|
||||||
# Verify if user exists and get ID
|
|
||||||
sql = '''
|
|
||||||
SELECT UserId
|
|
||||||
FROM RisottoUser
|
|
||||||
WHERE UserLogin = $1
|
|
||||||
'''
|
|
||||||
user_id = await risotto_context.connection.fetchval(sql,
|
|
||||||
user_login)
|
|
||||||
if user_id is None:
|
|
||||||
raise Exception(_(f'unable to find user {user_login}'))
|
|
||||||
sql = '''INSERT INTO UserRole(RoleUserId, RoleName, RoleAttribute, RoleAttributeValue)
|
|
||||||
VALUES($1,$2,$3,$4)
|
|
||||||
RETURNING RoleId
|
|
||||||
'''
|
|
||||||
role_id = await risotto_context.connection.fetchval(sql,
|
|
||||||
user_id,
|
|
||||||
role_name,
|
|
||||||
role_attribute,
|
|
||||||
role_attribute_value)
|
|
||||||
return {'role_id': role_id,
|
|
||||||
'user_login': user_login,
|
|
||||||
'role_name': role_name,
|
|
||||||
'role_attribute': role_attribute,
|
|
||||||
'role_attribute_value': role_attribute_value}
|
|
||||||
|
|
||||||
@register('v1.user.role.list', None, database=True)
|
|
||||||
async def user_role_list(self,
|
|
||||||
risotto_context: Context,
|
|
||||||
user_login: Optional[str]) -> Dict:
|
|
||||||
if not user_login:
|
|
||||||
sql = '''
|
|
||||||
SELECT RoleId as role_id, RoleName as role_name, RoleAttribute as role_attribute, RoleAttributeValue as role_attribute_value, RisottoUser.UserLogin as user_login
|
|
||||||
FROM UserRole, RisottoUser
|
|
||||||
WHERE UserRole.RoleUserId = RisottoUser.UserId
|
|
||||||
'''
|
|
||||||
roles = await risotto_context.connection.fetch(sql)
|
|
||||||
else:
|
|
||||||
# Verify if user exists and get ID
|
|
||||||
sql = '''
|
|
||||||
SELECT UserId
|
|
||||||
FROM RisottoUser
|
|
||||||
WHERE UserLogin = $1
|
|
||||||
'''
|
|
||||||
user_id = await risotto_context.connection.fetchval(sql,
|
|
||||||
user_login)
|
|
||||||
if user_id is None:
|
|
||||||
raise Exception(_(f'unable to find user {user_login}'))
|
|
||||||
sql = '''
|
|
||||||
SELECT RoleId as role_id, RoleName as role_name, RoleAttribute as role_attribute, RoleAttributeValue as role_attribute_value, RisottoUser.UserLogin as user_login
|
|
||||||
FROM UserRole, RisottoUser
|
|
||||||
WHERE UserRole.RoleUserId = RisottoUser.UserId AND UserRole.RoleUserId = $1
|
|
||||||
'''
|
|
||||||
roles = await risotto_context.connection.fetch(sql,
|
|
||||||
user_id)
|
|
||||||
return [dict(r) for r in roles]
|
|
||||||
#
|
|
||||||
# FIXME comment savoir quel role il faut supprimer ? avec attribut ou juste l'ID ?
|
|
||||||
# @register('v1.user.role.delete', None, database=True)
|
|
||||||
# async def user_role_delete(self,
|
|
||||||
# risotto_context: Context,
|
|
||||||
# user_login: str,
|
|
||||||
# role_name: str) -> Dict:
|
|
||||||
# # Verify if user exists and get ID
|
|
||||||
# sql = '''
|
|
||||||
# SELECT UserId
|
|
||||||
# FROM RisottoUser
|
|
||||||
# WHERE UserLogin = $1
|
|
||||||
# '''
|
|
||||||
# user_id = await risotto_context.connection.fetchval(sql,
|
|
||||||
# user_login)
|
|
||||||
# if user_id is None:
|
|
||||||
# raise Exception(_(f'unable to find user {user_login}'))
|
|
||||||
# sql = '''
|
|
||||||
# DELETE FROM RisottoRole
|
|
||||||
# WHERE RoleName = $1 AND UserId = $2
|
|
||||||
# RETURNING RoleId as role_id, RoleName as role_name, RoleAttribute as role_attribute, RoleAttributeValue as role_attribute_value
|
|
||||||
# '''
|
|
||||||
# role = await risotto_context.connection.fetchrow(sql,
|
|
||||||
# role_name,
|
|
||||||
# user_id)
|
|
||||||
# if role is None:
|
|
||||||
# raise Exception(_(f'unable to find role {role_name}'))
|
|
||||||
# return dict(role)
|
|
Loading…
x
Reference in New Issue
Block a user