예제 #1
0
class LoginForm(FlaskForm):

    username = StringField(l_('Username'), validators=[InputRequired()])
    password = PasswordField(l_('Password'), validators=[InputRequired()])
    language = SelectField(l_('Language'))
    submit = SubmitField(l_('Login'))

    def validate(self):
        super().validate()
        try:
            auth_client = get_auth_client(self.username.data,
                                          self.password.data)
            response = auth_client.token.new('xivo_admin',
                                             expiration=60 * 60 * 12)
        except HTTPError as e:
            if unauthorized(e):
                self.username.errors.append(USERNAME_PASSWORD_ERROR)
                self.password.errors.append(USERNAME_PASSWORD_ERROR)
                return False
            raise ValidationError(
                l_('Error with Wazo authentication server: %(error)s',
                   error=e.message))
        except requests.ConnectionError:
            raise ValidationError(
                l_('Wazo authentication server connection error'))

        self.user = UserUI(response['token'], response['auth_id'])

        return True
예제 #2
0
class TransferServicesFuncKeyDestinationForm(BaseForm):
    select_field = 'transfer'

    transfer = SelectField(l_('Transfer'), choices=[
        ('blind', l_('Blind transfer')),
        ('attended', l_('Indirect transfer'))
    ], validators=[InputRequired()])
예제 #3
0
class LoginForm(FlaskForm):

    username = StringField(l_('Username'), validators=[InputRequired()])
    password = PasswordField(l_('Password'), validators=[InputRequired()])
    language = SelectField(l_('Language'))
    submit = SubmitField(l_('Login'), render_kw={'data-loading-text': "<i class='fa fa-circle-o-notch fa-spin'></i> Processing..."})

    def validate(self):
        super().validate()
        try:
            auth_client = AuthClient(
                username=self.username.data,
                password=self.password.data,
                **app.config['auth'],
            )
            response = auth_client.token.new(expiration=60 * 60 * 12)
            auth_client.set_token(response['token'])
            user = auth_client.users.get(response['metadata']['uuid'])
            user['password'] = self.password.data
            user['instance_uuid'] = response['xivo_uuid']
            session['user'] = user
        except HTTPError as e:
            if unauthorized(e):
                self.username.errors.append(USERNAME_PASSWORD_ERROR)
                self.password.errors.append(USERNAME_PASSWORD_ERROR)
                return False
            raise ValidationError(l_('Error with Wazo authentication server: %(error)s', error=e.message))
        except requests.ConnectionError:
            raise ValidationError(l_('Wazo authentication server connection error'))

        self.user = UserUI(response['token'], response['auth_id'])
        self.user.set_tenant(response['metadata']['tenant_uuid'])

        return True
예제 #4
0
class FuncKeyTemplateKeysForm(BaseForm):
    id = HiddenField()
    label = StringField(l_('Label'), [Length(max=128)])
    digit = IntegerField(validators=[InputRequired()])
    destination = FuncKeyDestinationField()
    blf = BooleanField(l_('BLF'), default=False)
    submit = SubmitField()
예제 #5
0
파일: form.py 프로젝트: estsauver/wazo-ui
class MembersForm(BaseForm):
    user_uuids = SelectMultipleField(l_('Members'), choices=[])
    users = FieldList(FormField(UserUuidForm))
    group_uuids = SelectMultipleField(l_('Groups'), choices=[])
    groups = FieldList(FormField(GroupUuidForm))
    policy_uuids = SelectMultipleField(l_('Policies'), choices=[])
    policies = FieldList(FormField(PolicyUuidForm))
예제 #6
0
    def validate(self):
        super().validate()
        try:
            auth_client = AuthClient(
                username=self.username.data,
                password=self.password.data,
                **app.config['auth'],
            )
            response = auth_client.token.new(expiration=60 * 60 * 12)
            auth_client.set_token(response['token'])
            user = auth_client.users.get(response['metadata']['uuid'])
            user['password'] = self.password.data
            user['instance_uuid'] = response['xivo_uuid']
            session['user'] = user
        except HTTPError as e:
            if unauthorized(e):
                self.username.errors.append(USERNAME_PASSWORD_ERROR)
                self.password.errors.append(USERNAME_PASSWORD_ERROR)
                return False
            raise ValidationError(l_('Error with Wazo authentication server: %(error)s', error=e.message))
        except requests.ConnectionError:
            raise ValidationError(l_('Wazo authentication server connection error'))

        self.user = UserUI(response['token'], response['auth_id'])
        self.user.set_tenant(response['metadata']['tenant_uuid'])

        return True
예제 #7
0
class NetworkConfigurationForm(BaseForm):
    provision_host = StringField(l_('Provisioning host'))
    provision_http_port = IntegerField(l_('Provisioning port'),
                                       validators=[Regexp('^[0-9]+$')])
    rest_host = StringField(l_('REST API host'))
    rest_https_port = IntegerField(l_('REST API HTTPS port'),
                                   validators=[Regexp('^[0-9]+$')])
예제 #8
0
파일: form.py 프로젝트: estsauver/wazo-ui
class PolicyForm(BaseForm):
    name = StringField(l_('Name'), validators=[InputRequired])
    description = StringField(l_('Description'))
    acl_templates = FieldList(FormField(AclTemplatesForm))
    tenant_uuid = SelectField(l_('Tenant'), choices=[])
    tenant = FormField(TenantUuidForm)
    submit = SubmitField()
예제 #9
0
class ScheduleForm(BaseForm):
    name = StringField(l_('Name'), validators=[InputRequired()])
    timezone = SelectField(l_('Timezone'), choices=list_timezones())
    closed_destination = DestinationField()
    exceptional_periods = FieldList(FormField(ScheduleExceptionalPeriodForm))
    open_periods = FieldList(FormField(ScheduleOpenPeriodForm))
    submit = SubmitField(l_('Submit'))
예제 #10
0
파일: view.py 프로젝트: estsauver/wazo-ui
class ExtensionView(BaseIPBXHelperView):
    form = ExtensionForm
    resource = 'extension'

    @menu_item('.ipbx.advanced',
               l_('Advanced'),
               order=999,
               icon="gears",
               multi_tenant=True)
    @menu_item('.ipbx.advanced.extensions',
               l_('Extensions'),
               order=1,
               icon="tty",
               multi_tenant=True)
    def index(self):
        return super().index()

    def _populate_form(self, form):
        form.context.choices = self._build_set_choices_context(form)
        return form

    def _build_set_choices_context(self, extension):
        if not extension.context.data or extension.context.data == 'None':
            return []
        return [(extension.context.data, extension.context.data)]
예제 #11
0
class LineForm(BaseForm):
    context = SelectField(l_('Context'), choices=[])
    protocol = SelectField(choices=[('sip', l_('SIP')), ('custom',
                                                         l_('CUSTOM'))])
    endpoint_sip = FormField(EnpointSipForm)
    endpoint_custom = FormField(EnpointCustomForm)
    submit = SubmitField(l_('Submit'))
예제 #12
0
class UserDestinationForm(BaseForm):
    set_value_template = '{user_firstname} {user_lastname}'

    user_id = SelectField(l_('User'), choices=[], validators=[InputRequired()])
    ring_time = IntegerField(l_('Ring time'), [NumberRange(min=0)])
    user_firstname = DestinationHiddenField()
    user_lastname = DestinationHiddenField()
예제 #13
0
class ConferenceView(BaseIPBXHelperView):

    form = ConferenceForm
    resource = l_('conference')

    @menu_item('.ipbx.services',
               l_('Services'),
               icon="star",
               multi_tenant=True)
    @menu_item('.ipbx.services.conferences',
               l_('Conferences'),
               icon="compress",
               multi_tenant=True)
    def index(self):
        return super().index()

    def _populate_form(self, form):
        form.extensions[0].exten.choices = self._build_set_choices_exten(
            form.extensions[0])
        form.extensions[0].context.choices = self._build_set_choices_context(
            form.extensions[0])
        form.music_on_hold.choices = self._build_set_choices_moh(
            form.music_on_hold)
        return form

    def _build_set_choices_exten(self, extension):
        if not extension.exten.data or extension.exten.data == 'None':
            return []
        return [(extension.exten.data, extension.exten.data)]

    def _build_set_choices_context(self, extension):
        if not extension.context.data or extension.context.data == 'None':
            context = self.service.get_first_internal_context()
        else:
            context = self.service.get_context(extension.context.data)

        if context:
            return [(context['name'], context['label'])]

        return [(extension.context.data, extension.context.data)]

    def _build_set_choices_moh(self, moh):
        if not moh.data or moh.data == 'None':
            return []
        return [(moh.data, moh.data)]

    def _map_form_to_resources(self, form, form_id=None):
        resource = form.to_dict()
        if form_id:
            resource['uuid'] = form_id

        resource['music_on_hold'] = form.music_on_hold.data or None

        return resource

    def _map_resources_to_form_errors(self, form, resources):
        form.populate_errors(resources.get('conference', {}))
        form.extensions[0].populate_errors(resources.get('extension', {}))
        return form
예제 #14
0
class AccessFeatureForm(BaseForm):
    feature = SelectField(
        l_('Feature'),
        choices=[('phonebook', l_('Phonebook'))],
        validators=[InputRequired()],
    )
    host = StringField(l_('Host'))
    submit = SubmitField(l_('Submit'))
예제 #15
0
파일: form.py 프로젝트: estsauver/wazo-ui
class QueueDestinationForm(BaseForm):
    set_value_template = '{queue_label}'

    queue_id = SelectField(l_('Queue'), [InputRequired()], choices=[])
    ring_time = IntegerField(l_('Ring Time'), [NumberRange(min=0)])
    queue_label = DestinationHiddenField()
    skill_rule_id = SelectField(l_('Skill Rule'), description='skillrule', choices=[])
    skill_rule_variables = StringField(l_('Skill Rule Variables'))
예제 #16
0
class CdrView(IndexAjaxHelperViewMixin, BaseIPBXHelperView):
    form = object
    resource = 'cdr'

    @menu_item('.ipbx.reporting', l_('Reporting'), icon="pie-chart")
    @menu_item('.ipbx.reporting.cdrs', l_('CDR'), icon="newspaper-o")
    def index(self):
        return super().index()
예제 #17
0
class CsvForm(BaseForm):
    first_matched_columns = FieldList(FormField(ColumnsForm))
    format_columns = FieldList(FormField(ValueColumnsForm))
    searched_columns = FieldList(FormField(ColumnsForm))
    # `separator` can't be used an a field for wtforms ...
    delimiter = StringField(l_('Delimiter'))
    file = StringField(l_('File'), validators=[InputRequired()])
    unique_column = StringField(l_('Unique column'))
예제 #18
0
class PhonebookView(BaseIPBXHelperView):
    form = PhonebookForm
    resource = 'phonebook'

    @menu_item('.ipbx.phonebooks', l_('Phonebooks'), icon="book", multi_tenant=True)
    @menu_item('.ipbx.phonebooks.config', l_('Configuration'), order=1, icon="wrench", multi_tenant=True)
    def index(self):
        return super().index()
예제 #19
0
class VoicemailZonemessages(BaseForm):
    name = StringField(l_('Name'))
    timezone = SelectField(
        l_('Timezone'),
        validators=[InputRequired()],
        choices=[],
    )
    message = StringField(l_('Message'))
예제 #20
0
class ApplicationCallBackDISADestination(BaseForm):

    pin = StringField(
        l_('PIN'),
        [Length(max=40), Regexp(r'^[0-9]+$')],
        render_kw={'type': 'password'},
    )
    context = StringField(l_('Context'), [InputRequired(), Length(max=39), Regexp(r'^[a-zA-Z0-9_-]+$')])
예제 #21
0
class InterceptorsForm(BaseForm):
    user_uuids = SelectMultipleField(l_('Interceptor Users'),
                                     choices=[],
                                     default=[])
    users = FieldList(FormField(UserForm))
    group_ids = SelectMultipleField(l_('Interceptor Groups'),
                                    choices=[],
                                    default=[])
    groups = FieldList(FormField(GroupForm))
예제 #22
0
class ConfigDeviceForm(BaseForm):
    id = HiddenField()
    X_type = StringField(default='device')
    parent_ids = SelectMultipleField(l_('Parent'), choices=[], default=[])
    raw_config = FormField(RawConfigDeviceForm)
    label = StringField(l_('Label'),
                        validators=[InputRequired(),
                                    Length(max=128)])
    submit = SubmitField(l_('Submit'))
예제 #23
0
class TargetsForm(BaseForm):
    user_uuids = SelectMultipleField(l_('Target Users'),
                                     choices=[],
                                     default=[])
    users = FieldList(FormField(UserForm))
    group_ids = SelectMultipleField(l_('Target Groups'),
                                    choices=[],
                                    default=[])
    groups = FieldList(FormField(GroupForm))
예제 #24
0
class CallPickupForm(BaseForm):
    name = StringField(l_('Name'),
                       validators=[InputRequired(),
                                   Length(max=128)])
    interceptors = FormField(InterceptorsForm)
    targets = FormField(TargetsForm)
    description = StringField(l_('Description'))
    enabled = BooleanField(l_('Enabled'))
    submit = SubmitField(l_('Submit'))
class OdooForm(BaseForm):
    first_matched_columns = FieldList(FormField(ColumnsForm))
    format_columns = FieldList(FormField(ValueColumnsForm))
    searched_columns = FieldList(FormField(ColumnsForm))
    server = StringField(l_('Server'))
    port = StringField(l_('Port'))
    userid = StringField(l_('UserID'))
    password = StringField(l_('Password'))
    database = StringField(l_('Database'))
예제 #26
0
class HangupDestination(BaseDestinationForm):
    select_field = 'cause'

    cause = SelectField(l_('Cause'), choices=[('normal', l_('Normal')),
                                              ('busy', l_('Busy')),
                                              ('congestion', l_('Congestion'))])
    busy = FormField(HangupBusyDestination)
    congestion = FormField(HangupBusyDestination)
    normal = FormField(HangupNormalDestination)
예제 #27
0
class VoicemailDestinationForm(BaseForm):
    set_value_template = '{voicemail_name}'

    voicemail_id = SelectField(l_('Voicemail'), [InputRequired()], choices=[])
    greeting = SelectField(l_('Greeting'),
                           choices=[('busy', l_('Busy')),
                                    ('unavailable', l_('Unavailable'))])
    skip_instructions = BooleanField(l_('Skip instructions'))
    voicemail_name = DestinationHiddenField()
예제 #28
0
class LineForm(BaseForm):
    context = SelectField(l_('Context'),
                          validators=[InputRequired()],
                          choices=[])
    protocol = SelectField(choices=[('sip', l_('SIP')), ('custom',
                                                         l_('CUSTOM'))])
    endpoint_sip = FormField(EndpointSIPForm)
    endpoint_custom = FormField(EndpointCustomForm)
    submit = SubmitField(l_('Submit'))
예제 #29
0
class TrunkForm(BaseForm):
    context = SelectField(l_('Context'), choices=[])
    protocol = SelectField(choices=[('sip', l_('SIP')), ('iax', l_('IAX')), ('custom', l_('CUSTOM'))])
    endpoint_sip = FormField(EnpointSipForm)
    endpoint_iax = FormField(EnpointIaxForm)
    endpoint_custom = FormField(EnpointCustomForm)
    register_sip = FormField(RegisterSIPForm)
    register_iax = FormField(RegisterIAXForm)
    submit = SubmitField(l_('Submit'))
예제 #30
0
class IdentityView(BaseIPBXHelperView):
    form = IdentityForm
    resource = 'identity'

    @menu_item('.ipbx.identity',
               l_('Credentials'),
               icon="user-secret",
               multi_tenant=True)
    @menu_item('.ipbx.identity.identities',
               l_('Identities'),
               order=1,
               icon="user",
               multi_tenant=True)
    def index(self):
        return super().index()

    def _map_resources_to_form(self, resource):
        resource['members']['group_uuids'] = [
            group['uuid'] for group in resource['members']['groups']
        ]
        resource['members']['policy_uuids'] = [
            policy['uuid'] for policy in resource['members']['policies']
        ]
        form = self.form(data=resource)
        return form

    def _populate_form(self, form):
        form.members.group_uuids.choices = self._build_set_choices_groups(
            form.members.groups)
        form.members.policy_uuids.choices = self._build_set_choices_policies(
            form.members.policies)
        return form

    def _build_set_choices_groups(self, groups):
        results = []
        for group in groups:
            results.append((group.form.uuid.data, group.form.name.data))
        return results

    def _build_set_choices_policies(self, policies):
        results = []
        for policy in policies:
            results.append((policy.form.uuid.data, policy.form.name.data))
        return results

    def _map_form_to_resources(self, form, form_id=None):
        resource = form.to_dict()
        if form_id:
            resource['uuid'] = form_id
        resource['members']['groups'] = [{
            'uuid': group_uuid
        } for group_uuid in form.members.group_uuids.data]
        resource['members']['policies'] = [{
            'uuid': policy_uuid
        } for policy_uuid in form.members.policy_uuids.data]
        return resource