initial sudo views

pull/530/head
Administrator 2016-11-16 14:20:44 +08:00
parent d9278c2c24
commit 82412831d5
4 changed files with 176 additions and 5 deletions

14
apps/ops/hands.py Normal file
View File

@ -0,0 +1,14 @@
"""
jumpserver.__app__.hands.py
~~~~~~~~~~~~~~~~~
This app depends other apps api, function .. should be import or write mack here.
Other module of this app shouldn't connect with other app.
:copyright: (c) 2014-2016 by Jumpserver Team.
:license: GPL v2, see LICENSE for more details.
"""
from users.utils import AdminUserRequiredMixin

View File

@ -334,7 +334,7 @@ class Sudo(models.Model):
"Host_Alias": self.hosts,
"Runas_Alias": self.runas,
"Extra_Lines": self.extras,
"privileges": self.privileges}
"Privileges": self.privileges}
return template.render(context)
@property
@ -392,7 +392,7 @@ root ALL=(ALL:ALL) ALL
# JumpServer Generate User privilege is here.
# Note privileges is a tuple list like [(user, host, runas, command, nopassword),]
{% if privileges -%}
{% for User_Flag, Host_Flag, Runas_Flag, Command_Flag, NopassWord in privileges -%}
{% for User_Flag, Host_Flag, Runas_Flag, Command_Flag, NopassWord in Privileges -%}
{% if NopassWord -%}
{{ User_Flag }} {{ Host_Flag }}=({{ Runas_Flag }}) NOPASSWD: {{ Command_Flag }}
{%- else -%}

View File

@ -1,2 +1,41 @@
# ~*~ coding: utf-8 ~*~
#
class CreateHostAliasMinxin(object):
pass
class CreateUserAliasMinxin(object):
pass
class CreateCmdAliasMinxin(object):
pass
class CreateRunasAliasMinxin(object):
pass
class CreateExtralineAliasMinxin(object):
pass
class UpdateHostAliasMinxin(object):
pass
class UpdateUserAliasMinxin(object):
pass
class UpdateCmdAliasMinxin(object):
pass
class UpdateRunasAliasMinxin(object):
pass
class UpdateExtralineAliasMinxin(object):
pass

View File

@ -1,3 +1,121 @@
from django.shortcuts import render
# ~*~ coding: utf-8 ~*~
from __future__ import unicode_literals
# Create your views here.
from django.conf import settings
from django.views.generic.list import ListView, MultipleObjectMixin
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from django.views.generic.detail import DetailView, SingleObjectMixin
from .hands import AdminUserRequiredMixin
from .utils import *
class SudoListView(AdminUserRequiredMixin, ListView):
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
model = Asset
context_object_name = 'asset_list'
template_name = 'assets/asset_list.html'
def get_queryset(self):
queryset = super(AssetListView, self).get_queryset()
queryset = sorted(queryset, key=self.sorted_by_valid_and_ip)
return queryset
@staticmethod
def sorted_by_valid_and_ip(asset):
ip_list = int_seq(asset.ip.split('.'))
ip_list.insert(0, asset.is_valid()[0])
return ip_list
def get_context_data(self, **kwargs):
context = {
'app': 'Assets',
'action': 'asset list',
'tag_list': [(i.id,i.name,i.asset_set.all().count())for i in Tag.objects.all().order_by('name')]
}
kwargs.update(context)
return super(AssetListView, self).get_context_data(**kwargs)
class SudoCreateView(AdminUserRequiredMixin,
CreateHostAliasMinxin,
CreateUserAliasMinxin,
CreateCmdAliasMinxin,
CreateRunasAliasMinxin,
CreateExtralineAliasMinxin,
CreateView):
model = Asset
tag_type = 'asset'
form_class = AssetCreateForm
template_name = 'assets/asset_create.html'
success_url = reverse_lazy('assets:asset-list')
def form_valid(self, form):
asset = form.save()
asset.created_by = self.request.user.username or 'Admin'
asset.save()
return super(AssetCreateView, self).form_valid(form)
def form_invalid(self, form):
print(form.errors)
return super(AssetCreateView, self).form_invalid(form)
def get_context_data(self, **kwargs):
context = {
'app': 'Assets',
'action': 'Create asset',
}
kwargs.update(context)
return super(AssetCreateView, self).get_context_data(**kwargs)
class SudoUpdateView(AdminUserRequiredMixin,
UpdateHostAliasMinxin,
UpdateUserAliasMinxin,
UpdateCmdAliasMinxin,
UpdateRunasAliasMinxin,
UpdateExtralineAliasMinxin,
UpdateView):
model = Asset
form_class = AssetCreateForm
template_name = 'assets/asset_update.html'
success_url = reverse_lazy('assets:asset-list')
def get_context_data(self, **kwargs):
context = {
'app': 'Assets',
'action': 'Update asset',
}
kwargs.update(context)
return super(AssetUpdateView, self).get_context_data(**kwargs)
def form_invalid(self, form):
print(form.errors)
return super(AssetUpdateView, self).form_invalid(form)
class SudoDeleteView(DeleteView):
model = Asset
template_name = 'assets/delete_confirm.html'
success_url = reverse_lazy('assets:asset-list')
class SudoDetailView(DetailView):
model = Asset
context_object_name = 'asset'
template_name = 'assets/asset_detail.html'
def get_context_data(self, **kwargs):
asset_groups = self.object.groups.all()
context = {
'app': 'Assets',
'action': 'Asset detail',
'asset_groups_remain': [asset_group for asset_group in AssetGroup.objects.all()
if asset_group not in asset_groups],
'asset_groups': asset_groups,
}
kwargs.update(context)
return super(AssetDetailView, self).get_context_data(**kwargs)