def _create_user_lines(self, user): lines = user.get('lines', []) for line in lines: if not line.get('id'): line = self._create_line_and_associations(line) confd.users(user).add_line(line)
def _update_callpermissions(self, existing_user, user): if existing_user: existing_call_permissions = confd.users(existing_user).list_call_permissions() for existing_call_permission in existing_call_permissions['items']: confd.users(existing_user).remove_call_permission(existing_call_permission['call_permission_id']) for call_permission in user['call_permissions']: confd.users(user).add_call_permission(call_permission['id'])
def _delete_user_associations(self, user): if user.get('voicemail'): confd.users(user['uuid']).remove_voicemail() lines = user.get('lines', []) for line in lines: device_id = confd.lines.get(line['id'])['device_id'] if device_id: confd.lines(line['id']).remove_device(device_id) confd.lines.delete(line)
def _update_voicemail(self, existing_user, user): existing_voicemail_id = existing_user['voicemail'].get('id') if existing_user['voicemail'] else None voicemail_id = int(user['voicemail']['id']) if user['voicemail'].get('id') else None if existing_voicemail_id == voicemail_id: return if existing_voicemail_id: confd.users(user).remove_voicemail() if voicemail_id: confd.users(user).add_voicemail(user['voicemail'])
def get(self, resource_id): resource = super().get(resource_id) call_permissions = confd.users(resource_id).list_call_permissions() wazo_user = auth.users.get(resource_id) resource['username'] = wazo_user['username'] resource['call_permissions'] = self._build_call_permissions_list(call_permissions['items']) return resource
def create(self, user): username = user.pop('username') password = user.pop('password') user['uuid'] = super().create(user)['uuid'] auth.users.new( uuid=user['uuid'], username=username or user['email'] or user['uuid'], password=password, firstname=user['firstname'], lastname=user['lastname'], email_address=user['email'], enabled=True, ) if username and password: # ID 3 is the default ID for Client profile in populate.sql confd.users(user['uuid']).update_cti_profile({'id': 3}, enabled=False) self._create_user_lines(user)
def _update_user_lines(self, existing_user, user): lines = user.get('lines', []) line_ids = set([l.get('id') for l in lines]) existing_lines = existing_user['lines'] existing_line_ids = set([l['id'] for l in existing_lines]) line_ids_to_remove = existing_line_ids - line_ids for line_id in line_ids_to_remove: device_id = confd.lines.get(line_id)['device_id'] if device_id: confd.lines(line_id).remove_device(device_id) confd.lines.delete(line_id) for line in lines: if line.get('id'): self._update_line_and_associations(line) self._update_device_association(line['id'], line.get('device_id')) else: line = self._create_line_and_associations(line) if line.get('device_id'): confd.lines(line).add_device(line['device_id']) if line_ids != existing_line_ids or self._get_first_line_id(lines) != self._get_first_line_id(existing_lines): confd.users(user).update_lines(lines)
def update_users(self, callpermission_id, user_ids, existing_user_ids): for existing_user_id in existing_user_ids: confd.users(existing_user_id).remove_call_permission(callpermission_id) for user_id in user_ids: confd.users(user_id).add_call_permission(callpermission_id)
def update(self, user): username = user.pop('username') password = user.pop('password') super().update(user) self._update_wazo_user(user, username, password) existing_user = confd.users.get(user) if user.get('fallbacks'): confd.users(user['uuid']).update_fallbacks(user['fallbacks']) if user.get('services'): confd.users(user['uuid']).update_services(user['services']) if user.get('forwards'): confd.users(user['uuid']).update_forwards(user['forwards']) if user.get('schedules'): self._update_schedules(existing_user, user) if user.get('call_permissions'): self._update_callpermissions(existing_user, user) confd.users(user['uuid']).update_cti_profile(user['cti_profile'], enabled=False) self._update_voicemail(existing_user, user) self._update_user_lines(existing_user, user) if 'groups' in user and user.get('lines'): confd.users(user).update_groups(user['groups']) if user.get('funckeys'): confd.users(user['uuid']).update_funckeys(user['funckeys'])
def list_funckeys(self, user_uuid): return confd.users(user_uuid).list_funckeys()
def _update_schedules(self, existing_user, user): if existing_user['schedules']: schedule_id = existing_user['schedules'][0]['id'] confd.users(user).remove_schedule(schedule_id) if user['schedules'][0].get('id'): confd.users(user).add_schedule(user['schedules'][0])