62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""passbook app_gw models"""
 | 
						|
from django.contrib.postgres.fields import ArrayField
 | 
						|
from django.db import models
 | 
						|
from django.utils.translation import gettext as _
 | 
						|
 | 
						|
from passbook.core.models import Policy, PropertyMapping, Provider
 | 
						|
 | 
						|
 | 
						|
class ApplicationGatewayProvider(Provider):
 | 
						|
    """Virtual server which proxies requests to any hostname in server_name to upstream"""
 | 
						|
 | 
						|
    server_name = ArrayField(models.TextField())
 | 
						|
    upstream = ArrayField(models.TextField())
 | 
						|
    enabled = models.BooleanField(default=True)
 | 
						|
 | 
						|
    authentication_header = models.TextField(default='X-Remote-User')
 | 
						|
    default_content_type = models.TextField(default='application/octet-stream')
 | 
						|
    upstream_ssl_verification = models.BooleanField(default=True)
 | 
						|
 | 
						|
    form = 'passbook.app_gw.forms.ApplicationGatewayProviderForm'
 | 
						|
 | 
						|
    @property
 | 
						|
    def name(self):
 | 
						|
        """since this model has no name property, return a joined list of server_names as name"""
 | 
						|
        return ', '.join(self.server_name)
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "Application Gateway %s" % ', '.join(self.server_name)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
 | 
						|
        verbose_name = _('Application Gateway Provider')
 | 
						|
        verbose_name_plural = _('Application Gateway Providers')
 | 
						|
 | 
						|
 | 
						|
class RewriteRule(PropertyMapping):
 | 
						|
    """Rewrite requests matching `match` with `replacement`, if all polcies in `conditions` apply"""
 | 
						|
 | 
						|
    REDIRECT_INTERNAL = 'internal'
 | 
						|
    REDIRECT_PERMANENT = 301
 | 
						|
    REDIRECT_FOUND = 302
 | 
						|
 | 
						|
    REDIRECTS = (
 | 
						|
        (REDIRECT_INTERNAL, _('Internal')),
 | 
						|
        (REDIRECT_PERMANENT, _('Moved Permanently')),
 | 
						|
        (REDIRECT_FOUND, _('Found')),
 | 
						|
    )
 | 
						|
 | 
						|
    match = models.TextField()
 | 
						|
    halt = models.BooleanField(default=False)
 | 
						|
    conditions = models.ManyToManyField(Policy)
 | 
						|
    replacement = models.TextField() # python formatted strings, use {match.1}
 | 
						|
    redirect = models.CharField(max_length=50, choices=REDIRECTS)
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return "Rewrite Rule %s" % self.name
 | 
						|
 | 
						|
    class Meta:
 | 
						|
 | 
						|
        verbose_name = _('Rewrite Rule')
 | 
						|
        verbose_name_plural = _('Rewrite Rules')
 |