+
+class DirectoryGenerator(FreeswitchConfigGenerator):
+ """
+ Generates user directory.
+ """
+ param_match = {'section': 'directory'}
+
+ def generateConfig(self, params):
+ #Get base elemenets.
+ root_elt, section_elt = self.baseELements
+
+ database = self.database
+
+ # Find profile id from params.
+ profile_query = database.exec_(
+ '''
+ select id from ipypbxweb_sipprofile
+ where name= '%s' and connection_id = %i limit 1
+ ''' % (params['profile'], self.parent.connection_id))
+
+ _ok = False
+ if profile_query.next():
+ profile_id, _ok = profile_query.value(0).toInt()
+
+ if not _ok:
+ # Matching SIP profile not found.
+ return
+
+ # List all domains for this profile.
+ domains_query = database.exec_(
+ '''
+ select id, host_name from ipypbxweb_domain
+ where sip_profile_id = %i
+ ''' % profile_id)
+
+ while domains_query.next():
+ domain_id, _ok = domains_query.value(0).toInt()
+
+ # Create domaim element.
+ domain_elt = etree.SubElement(
+ section_elt, 'domain', name=domains_query.value(1).toString())
+
+ # TODO: add domain params section if we need it, i.e.:
+ #<params>
+ # <param name="dial-string"
+ # value="{presence_id=${dialed_user}@${dialed_domain}}$\
+ # {sofia_contact(${dialed_user}@${dialed_domain})}"/>
+ #</params>
+
+ # For new we put all users into one group called default.
+ groups_elt = etree.SubElement(domain_elt, 'groups')
+ group_elt = etree.SubElement(groups_elt, 'group', name='default')
+
+ users_elt = etree.SubElement(group_elt, 'users')
+
+ users_query = database.exec_(
+ '''
+ select user_id, password from ipypbxweb_endpoint
+ where domain_id = %i
+ ''' % domain_id)
+
+ # Create user entries for all endpoints for this domain.
+ while users_query.next():
+ user_elt = etree.SubElement(
+ users_elt, 'user', id=users_query.value(0).toString())
+
+ # Specify endpoint password.
+ params = (
+ ('password', users_query.value(1).toString()),
+ )
+ self.addParams(user_elt, params)
+
+ return root_elt