118 lines
4.7 KiB
Python
118 lines
4.7 KiB
Python
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.config.configuration.server.get',
|
|
'v1.user.role.list']:
|
|
try:
|
|
await self._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._uri_role_join(risotto_context,
|
|
role_name='all',
|
|
uri_name=uri)
|
|
except:
|
|
pass
|
|
for uri in ['v1.server.describe',
|
|
'v1.config.configuration.server.get',
|
|
'v1.config.configuration.server.deploy',
|
|
'v1.session.server.start',
|
|
'v1.template.generate']:
|
|
try:
|
|
await self._uri_role_join(risotto_context,
|
|
role_name='server_rw',
|
|
uri_name=uri)
|
|
except:
|
|
pass
|
|
|
|
@register('v1.uri.role.join')
|
|
async def uri_role_join(self,
|
|
risotto_context: Context,
|
|
role_name: str,
|
|
uri_name: str) -> Dict:
|
|
return await self._uri_role_join(risotto_context,
|
|
role_name,
|
|
uri_name)
|
|
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')
|
|
async def uri_role_list(self,
|
|
risotto_context: Context) -> List[Dict]:
|
|
sql = '''
|
|
SELECT RoleName as role_name, URI.URIName as uri_name
|
|
FROM RoleURI, URI
|
|
WHERE RoleURI.URIId = URI.URIId
|
|
'''
|
|
return [dict(r) for r in await risotto_context.connection.fetch(sql)]
|