67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """passbook Application Security Gateway Forms"""
 | |
| from urllib.parse import urlparse
 | |
| 
 | |
| from django import forms
 | |
| from django.contrib.admin.widgets import FilteredSelectMultiple
 | |
| from django.forms import ValidationError
 | |
| from django.utils.translation import gettext as _
 | |
| 
 | |
| from passbook.app_gw.models import ApplicationGatewayProvider, RewriteRule
 | |
| from passbook.lib.fields import DynamicArrayField
 | |
| 
 | |
| 
 | |
| class ApplicationGatewayProviderForm(forms.ModelForm):
 | |
|     """Security Gateway Provider form"""
 | |
| 
 | |
|     def clean_server_name(self):
 | |
|         """Check if server_name is in DB already, since
 | |
|         Postgres ArrayField doesn't suppport keys."""
 | |
|         current = self.cleaned_data.get('server_name')
 | |
|         if ApplicationGatewayProvider.objects \
 | |
|                 .filter(server_name__overlap=current) \
 | |
|                 .exclude(pk=self.instance.pk).exists():
 | |
|             raise ValidationError(_("Server Name already in use."))
 | |
|         return current
 | |
| 
 | |
|     def clean_upstream(self):
 | |
|         """Check that upstream begins with http(s)"""
 | |
|         for upstream in self.cleaned_data.get('upstream'):
 | |
|             _parsed_url = urlparse(upstream)
 | |
| 
 | |
|             if _parsed_url.scheme not in ('http', 'https'):
 | |
|                 raise ValidationError(_("URL Scheme must be either http or https"))
 | |
|         return self.cleaned_data.get('upstream')
 | |
| 
 | |
|     class Meta:
 | |
| 
 | |
|         model = ApplicationGatewayProvider
 | |
|         fields = ['server_name', 'upstream', 'enabled', 'authentication_header',
 | |
|                   'default_content_type', 'upstream_ssl_verification', 'property_mappings']
 | |
|         widgets = {
 | |
|             'authentication_header': forms.TextInput(),
 | |
|             'default_content_type': forms.TextInput(),
 | |
|             'property_mappings': FilteredSelectMultiple(_('Property Mappings'), False)
 | |
|         }
 | |
|         field_classes = {
 | |
|             'server_name': DynamicArrayField,
 | |
|             'upstream': DynamicArrayField
 | |
|         }
 | |
|         labels = {
 | |
|             'upstream_ssl_verification': _('Verify upstream SSL Certificates?'),
 | |
|             'property_mappings': _('Rewrite Rules')
 | |
|         }
 | |
| 
 | |
| class RewriteRuleForm(forms.ModelForm):
 | |
|     """Rewrite Rule Form"""
 | |
| 
 | |
|     class Meta:
 | |
| 
 | |
|         model = RewriteRule
 | |
|         fields = ['name', 'match', 'halt', 'replacement', 'redirect', 'conditions']
 | |
|         widgets = {
 | |
|             'name': forms.TextInput(),
 | |
|             'match': forms.TextInput(attrs={'data-is-monospace': True}),
 | |
|             'replacement': forms.TextInput(attrs={'data-is-monospace': True}),
 | |
|             'conditions': FilteredSelectMultiple(_('Conditions'), False)
 | |
|         }
 | 
