98 lines
3.3 KiB
Python
98 lines
3.3 KiB
Python
import json
|
|
|
|
from django.http import HttpResponse
|
|
from django.utils.translation import ugettext as _
|
|
from django.views.generic.base import TemplateView
|
|
from django.views.generic import edit
|
|
from django.core.exceptions import PermissionDenied
|
|
from django.core.urlresolvers import reverse
|
|
from django.contrib.auth.decorators import user_passes_test
|
|
|
|
from .environment.utils import Zone, get_operational_services
|
|
from .forms import HoboForm, HoboUpdateForm, get_tenant_model
|
|
|
|
def is_superuser(u):
|
|
if not u.is_superuser:
|
|
raise PermissionDenied
|
|
return True
|
|
|
|
admin_required = user_passes_test(is_superuser)
|
|
|
|
class Home(TemplateView):
|
|
template_name = 'hobo/home.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(Home, self).get_context_data(**kwargs)
|
|
context['zones'] = []
|
|
|
|
for service in get_operational_services():
|
|
context['zones'].extend(service.get_admin_zones())
|
|
|
|
context['zones'].append(Zone(_('Environment Settings'), 'settings', 'environment/'))
|
|
return context
|
|
|
|
home = admin_required(Home.as_view())
|
|
|
|
class ManagerHome(edit.CreateView):
|
|
template_name = 'hobo/manager_home.html'
|
|
form_class = HoboForm
|
|
|
|
def get_success_url(self):
|
|
return reverse('manager-home')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
from tenant_schemas.utils import get_public_schema_name
|
|
context = super(ManagerHome, self).get_context_data(**kwargs)
|
|
tenants_list = ()
|
|
for obj in get_tenant_model().objects.exclude(schema_name=get_public_schema_name()):
|
|
f = HoboUpdateForm(instance=obj, auto_id='%s_%%s' % obj.pk)
|
|
tenants_list += ({'object': obj, 'form': f},)
|
|
context['tenants_list'] = tenants_list
|
|
return context
|
|
|
|
def form_valid(self, form):
|
|
response = super(ManagerHome, self).form_valid(form)
|
|
self.object.create_schema(True)
|
|
return response
|
|
|
|
manager_home = admin_required(ManagerHome.as_view())
|
|
|
|
class ManagerUpdateTenant(edit.UpdateView):
|
|
model = get_tenant_model()
|
|
template_name = 'hobo/manager_home.html'
|
|
form_class = HoboUpdateForm
|
|
|
|
def get_success_url(self):
|
|
return reverse('manager-home')
|
|
|
|
def form_valid(self, form):
|
|
response = super(ManagerUpdateTenant, self).form_valid(form)
|
|
self.object.create_schema(True)
|
|
return response
|
|
|
|
update_tenant = admin_required(ManagerUpdateTenant.as_view())
|
|
|
|
class ManagerDeleteTenant(edit.DeleteView):
|
|
template_name = 'environment/tenant_confirm_delete.html'
|
|
model = get_tenant_model()
|
|
|
|
def get_success_url(self):
|
|
return reverse('manager-home', self.object.id)
|
|
|
|
delete_tenant = admin_required(ManagerDeleteTenant.as_view())
|
|
|
|
def hobos(request, *args, **kwargs):
|
|
response = HttpResponse(content_type='application/json')
|
|
tenants = [{'name': tenant.schema_name, 'url': tenant.domain_url} \
|
|
for tenant in get_tenant_model().objects.all()]
|
|
json.dump(tenants, response)
|
|
return response
|
|
|
|
def hobo(request, **kwargs):
|
|
# The hobos URL is supposed to return a list of hobo websites, this
|
|
# dummy implementation makes it possible to point deployment agents to
|
|
# a single instance, that will announce itself as the only hobo around.
|
|
response = HttpResponse(content_type='application/json')
|
|
json.dump([request.build_absolute_uri('/')], response)
|
|
return response
|