2015-04-15 21:13:14 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# vim:set expandtab tabstop=4 shiftwidth=4:
|
|
|
|
#
|
|
|
|
# The MIT License (MIT)
|
|
|
|
# LdapCherry
|
|
|
|
# Copyright (c) 2014 Carpentier Pierre-Francois
|
|
|
|
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
2015-05-14 22:10:26 +02:00
|
|
|
from sets import Set
|
2015-05-12 01:24:16 +02:00
|
|
|
from ldapcherry.pyyamlwrapper import loadNoDump
|
2015-05-12 01:42:08 +02:00
|
|
|
from ldapcherry.pyyamlwrapper import DumplicatedKey
|
2015-05-12 11:34:28 +02:00
|
|
|
from ldapcherry.exceptions import DumplicateRoleKey, MissingKey, DumplicateRoleContent, MissingRolesFile
|
2015-05-12 01:24:16 +02:00
|
|
|
|
2015-04-15 21:13:14 +02:00
|
|
|
|
|
|
|
class Roles:
|
|
|
|
|
|
|
|
def __init__(self, role_file):
|
2015-05-14 22:10:26 +02:00
|
|
|
self.role_file = role_file
|
|
|
|
self.backends = Set([])
|
2015-05-12 11:34:28 +02:00
|
|
|
try:
|
|
|
|
stream = open(role_file, 'r')
|
|
|
|
except:
|
|
|
|
raise MissingRolesFile(role_file)
|
2015-05-12 01:42:08 +02:00
|
|
|
try:
|
|
|
|
self.roles_raw = loadNoDump(stream)
|
|
|
|
except DumplicatedKey as e:
|
|
|
|
raise DumplicateRoleKey(e.key)
|
2015-05-12 01:24:16 +02:00
|
|
|
stream.close()
|
|
|
|
self._nest()
|
2015-04-15 21:13:14 +02:00
|
|
|
|
2015-05-12 01:24:16 +02:00
|
|
|
def _nest(self):
|
2015-04-15 21:13:14 +02:00
|
|
|
"""nests the roles (creates roles hierarchy)"""
|
2015-05-14 22:10:26 +02:00
|
|
|
for roleid in self.roles_raw:
|
|
|
|
role = self.roles_raw[roleid]
|
|
|
|
|
|
|
|
# Display name is mandatory
|
|
|
|
if not 'display_name' in role:
|
|
|
|
raise MissingKey('display_name', role, self.role_file)
|
|
|
|
|
|
|
|
# Backend is mandatory
|
|
|
|
if not 'backends' in role:
|
|
|
|
raise MissingKey('backends', role, self.role_file)
|
|
|
|
|
|
|
|
# Create the list of backends
|
|
|
|
for backend in role['backends']:
|
|
|
|
self.backends.add(backend['name'])
|
|
|
|
|
|
|
|
# Create the nested groups
|
|
|
|
for roleid2 in self.roles_raw:
|
|
|
|
role2 = self.roles_raw[roleid2]
|
2015-05-12 01:24:16 +02:00
|
|
|
self.roles = self.roles_raw
|
2015-04-15 21:13:14 +02:00
|
|
|
|
|
|
|
def write(self, out_file):
|
|
|
|
"""write the nested role hierarchy to a file"""
|
|
|
|
pass
|
|
|
|
|
|
|
|
def get_roles(self, groups):
|
|
|
|
"""get list of roles and list of standalone groups"""
|
|
|
|
pass
|
|
|
|
|
|
|
|
def get_groups(self, roles):
|
|
|
|
"""get the list of groups from roles"""
|
|
|
|
pass
|