webapps static complete
This commit is contained in:
parent
24baf1bb70
commit
50b83c31bd
|
@ -20,7 +20,7 @@ def save_selected(modeladmin, request, queryset):
|
|||
save_selected.short_description = "Re-save selected objects"
|
||||
|
||||
class DatabaseAdmin(SelectAccountAdminMixin, ExtendedModelAdmin):
|
||||
list_display = ('name', 'type', 'display_users', 'account_link')
|
||||
list_display = ('name', 'type', 'target_server', 'display_users', 'account_link')
|
||||
list_filter = ('type', HasUserListFilter)
|
||||
search_fields = ('name', 'account__username')
|
||||
change_readonly_fields = ('name', 'type', 'target_server')
|
||||
|
|
|
@ -766,6 +766,7 @@ class WebappUserController(ServiceController):
|
|||
elif [[ $useradd_code -ne 0 ]]; then
|
||||
exit $useradd_code
|
||||
fi
|
||||
usermod -aG %(user)s www-data
|
||||
fi
|
||||
usermod -aG %(user)s %(parent)s
|
||||
|
||||
|
@ -828,5 +829,5 @@ class WebappUserController(ServiceController):
|
|||
'webapp_path': os.path.normpath(user.get_base_home() + "/webapps/" + user.home),
|
||||
'parent': user.get_parent(),
|
||||
}
|
||||
context['deleted_home'] = context['webapp_path'] + ".delete"
|
||||
context['deleted_home'] = context['webapp_path'] + ".deleted"
|
||||
return replace(context, "'", '"')
|
||||
|
|
|
@ -4,11 +4,14 @@ from django.urls import reverse
|
|||
from django.utils.encoding import force_str
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import gettext, gettext_lazy as _
|
||||
from django.shortcuts import resolve_url
|
||||
from django.contrib.admin.templatetags.admin_urls import admin_urlname
|
||||
|
||||
from orchestra.admin import ExtendedModelAdmin
|
||||
from orchestra.admin.utils import admin_link, get_modeladmin
|
||||
from orchestra.contrib.accounts.actions import list_accounts
|
||||
from orchestra.contrib.accounts.admin import AccountAdminMixin
|
||||
from orchestra.contrib.systemusers.models import WebappUsers
|
||||
from orchestra.forms.widgets import DynamicHelpTextSelect
|
||||
from orchestra.plugins.admin import SelectPluginAdminMixin, display_plugin_field
|
||||
from orchestra.utils.html import get_on_site_link
|
||||
|
@ -52,12 +55,12 @@ class WebAppOptionInline(admin.TabularInline):
|
|||
|
||||
class WebAppAdmin(SelectPluginAdminMixin, AccountAdminMixin, ExtendedModelAdmin):
|
||||
list_display = (
|
||||
'name', 'display_type', 'display_detail', 'display_websites', 'account_link'
|
||||
'name', 'display_type', 'display_detail', 'display_websites', 'account_link', 'target_server',
|
||||
)
|
||||
list_filter = ('type', HasWebsiteListFilter, DetailListFilter)
|
||||
inlines = [WebAppOptionInline]
|
||||
readonly_fields = ('account_link',)
|
||||
change_readonly_fields = ('name', 'type', 'display_websites', 'sftpuser', 'target_server')
|
||||
change_readonly_fields = ('name', 'type', 'display_websites', 'display_sftpuser', 'target_server',)
|
||||
search_fields = ('name', 'account__username', 'data', 'website__domains__name')
|
||||
list_prefetch_related = ('content_set__website', 'content_set__website__domains')
|
||||
plugin = AppType
|
||||
|
@ -67,6 +70,15 @@ class WebAppAdmin(SelectPluginAdminMixin, AccountAdminMixin, ExtendedModelAdmin)
|
|||
|
||||
display_type = display_plugin_field('type')
|
||||
|
||||
def display_sftpuser(self, obj):
|
||||
salida = ""
|
||||
if obj.sftpuser is None:
|
||||
salida = None
|
||||
else:
|
||||
url = resolve_url(admin_urlname(WebappUsers._meta, 'change'), obj.sftpuser.id)
|
||||
salida += f'<a href="{url}">{obj.sftpuser}</a> <br />'
|
||||
return mark_safe(salida)
|
||||
display_sftpuser.short_description = _("user sftp")
|
||||
|
||||
@mark_safe
|
||||
def display_websites(self, webapp):
|
||||
|
@ -95,4 +107,19 @@ class WebAppAdmin(SelectPluginAdminMixin, AccountAdminMixin, ExtendedModelAdmin)
|
|||
display_detail.short_description = _("detail")
|
||||
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
if not change:
|
||||
user = form.cleaned_data['username']
|
||||
if user:
|
||||
user = WebappUsers(
|
||||
username=form.cleaned_data['username'],
|
||||
account_id=obj.account.pk,
|
||||
target_server=form.cleaned_data['target_server'],
|
||||
home=form.cleaned_data['name']
|
||||
)
|
||||
user.set_password(form.cleaned_data["password1"])
|
||||
user.save()
|
||||
obj.sftpuser = user
|
||||
super(WebAppAdmin, self).save_model(request, obj, form, change)
|
||||
|
||||
admin.site.register(WebApp, WebAppAdmin)
|
||||
|
|
|
@ -13,6 +13,17 @@ class WebAppServiceMixin(object):
|
|||
doc_settings = (settings,
|
||||
('WEBAPPS_UNDER_CONSTRUCTION_PATH', 'WEBAPPS_MOVE_ON_DELETE_PATH',)
|
||||
)
|
||||
def check_webapp_dir(self, context):
|
||||
self.append(textwrap.dedent("""
|
||||
# Create webapp dir
|
||||
CREATED=0
|
||||
if [[ ! -e %(app_path)s ]]; then
|
||||
mkdir -p %(app_path)s
|
||||
CREATED=1
|
||||
elif [[ -z $( ls -A %(app_path)s ) ]]; then
|
||||
CREATED=1
|
||||
fi""") % context
|
||||
)
|
||||
|
||||
def create_webapp_dir(self, context):
|
||||
self.append(textwrap.dedent("""
|
||||
|
@ -57,14 +68,15 @@ class WebAppServiceMixin(object):
|
|||
def get_context(self, webapp):
|
||||
context = webapp.type_instance.get_directive_context()
|
||||
context.update({
|
||||
'user': webapp.get_username(),
|
||||
'group': webapp.get_groupname(),
|
||||
'user': webapp.sftpuser.username if webapp.target_server.name in settings.WEBAPP_NEW_SERVERS else webapp.get_username(),
|
||||
'group': webapp.sftpuser.username if webapp.target_server.name in settings.WEBAPP_NEW_SERVERS else webapp.get_groupname(),
|
||||
'app_name': webapp.name,
|
||||
'app_type': webapp.type,
|
||||
'app_path': webapp.get_path(),
|
||||
'banner': self.get_banner(),
|
||||
'under_construction_path': settings.WEBAPPS_UNDER_CONSTRUCTION_PATH,
|
||||
'is_mounted': webapp.content_set.exists(),
|
||||
'target_server': webapp.target_server,
|
||||
})
|
||||
context['deleted_app_path'] = settings.WEBAPPS_MOVE_ON_DELETE_PATH % context
|
||||
return context
|
||||
|
|
|
@ -18,18 +18,13 @@ class StaticController(WebAppServiceMixin, ServiceController):
|
|||
if context.get('target_server').name in WEBAPP_NEW_SERVERS:
|
||||
self.check_webapp_dir(context)
|
||||
self.set_under_construction(context)
|
||||
# TODO: crea el usuario sftp
|
||||
# webapp.name = webapp.sftpuser.directory.replace("webapps/", "")
|
||||
# webapp.save()
|
||||
|
||||
else:
|
||||
self.create_webapp_dir(context)
|
||||
self.set_under_construction(context)
|
||||
|
||||
def delete(self, webapp):
|
||||
context = self.get_context(webapp)
|
||||
if context.get('target_server').name not in WEBAPP_NEW_SERVERS:
|
||||
self.delete_webapp_dir(context)
|
||||
if context.get('target_server').name in WEBAPP_NEW_SERVERS:
|
||||
webapp.sftpuser.delete()
|
||||
else:
|
||||
# TODO: elimina el usuario sftp
|
||||
pass
|
||||
self.delete_webapp_dir(context)
|
||||
|
|
|
@ -35,21 +35,21 @@ class StaticForm(PluginDataForm):
|
|||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(StaticForm, self).__init__(*args, **kwargs)
|
||||
if self.instance.id is None:
|
||||
self.fields['sftpuser'].widget = forms.HiddenInput()
|
||||
else:
|
||||
self.fields['sftpuser'].widget = forms.HiddenInput()
|
||||
if self.instance.id is not None:
|
||||
self.fields['username'].widget = forms.HiddenInput()
|
||||
self.fields['password1'].widget = forms.HiddenInput()
|
||||
self.fields['password2'].widget = forms.HiddenInput()
|
||||
|
||||
def clean(self):
|
||||
webapp_server = self.cleaned_data.get("target_server")
|
||||
sftpuser = self.cleaned_data.get('sftpuser')
|
||||
if webapp_server is None:
|
||||
self.add_error("target_server", _("choice some target_server"))
|
||||
else:
|
||||
if webapp_server.name in WEBAPP_NEW_SERVERS and sftpuser == None:
|
||||
self.add_error("sftpuser", _("SFTP user is required by new webservers"))
|
||||
if not self.instance.id:
|
||||
webapp_server = self.cleaned_data.get("target_server")
|
||||
username = self.cleaned_data.get('username')
|
||||
if webapp_server is None:
|
||||
self.add_error("target_server", _("choice some target_server"))
|
||||
else:
|
||||
if webapp_server.name in WEBAPP_NEW_SERVERS and username == '':
|
||||
self.add_error("username", _("SFTP user is required by new webservers"))
|
||||
|
||||
def clean_password2(self):
|
||||
password1 = self.cleaned_data.get("password1")
|
||||
|
|
Loading…
Reference in New Issue