• BaiJiangJie's avatar
    Dev (#2838) · 9ca4a8c9
    BaiJiangJie authored
    * Dev ansible windows 2 (#2783)
    
    * [Update] 改密支持windows
    
    * [Update] 修改asset表结构
    
    * [Feature] Windows支持批量改密、测试可连接性等功能
    
    * [Update] 处理创建资产时labels的问题
    
    * [Update] 优化测试管理系统、系统用户可连接性任务执行逻辑
    
    * [Update] 优化ansible任务逻辑;添加自动推送rdp系统用户功能
    
    * [Update] 添加翻译
    
    * [Update] 优化ansible任务逻辑(测试系统用户可连接性, 通过协议过滤资产)
    
    * [Update] 更新翻译
    
    * [Update] 更新翻译
    
    * [Update] 推送windows系统用户,默认添加到Users、Remote Desktop Users组中
    
    * [Update] 优化小细节
    
    * [Update] 更新翻译,删除多余代码
    
    * [Update] 更新翻译信息
    
    * [Bugfix] 修复windows推送系统用户小bug (#2794)
    
    * [Update] 邮件设置添加配置项:发送账号 (#2796)
    
    * [Bugfix] 和资产相关的Serializer添加protocols字段; (#2800)
    
    * [Bugfix] 和资产相关的Serializer添加protocols字段;
    
    * [Bugfix] RemoteApp Form 修改过滤RDP协议资产
    
    * [Bugfix] 修改小问题
    
    * [Update] 用户授权相关API,如果需要切换到root org (#2803)
    
    * [Update] 用户授权相关API,如果需要切换到root org
    
    * [Update] 优化小问题
    
    * [Update] 增加审计员权限控制 (#2792)
    
    * [Update] 审计员
    
    * [Update] 增加审计员的权限控制
    
    * [Update] 增加审计员Api全校的控制
    
    * [Update] 优化auditor的api权限控制
    
    * [Update] 优化审计员权限控制
    
    * [Update]优化管理员权限的View
    
    * [Update] 优化超级管理权限的View
    
    * [Update] 添加审计员切换组织查询会话管理数据
    
    * [Update] 前端禁用审计员在线会话终断按钮
    
    * [Update]优化细节问题
    
    * [Update] Auth Info (#2806)
    
    * [Update] 修改支持auth info导出
    
    * [Update] 统一认证查看
    
    * [Update] 修改auth book manager
    
    * [Update] 修改auth info
    
    * [Update] 完成修改auth info
    
    * [Update] 优化api
    
    * [Update] 修改assets 的related
    
    * [Update] serializer mixin继承 (#2810)
    
    * [Update] serializer mixin继承
    
    * [Update] 修改system user更新serialzier
    
    * [Update] 修改success message
    
    * [Update] 添加一键禁用LDAP认证脚本 (#2813)
    
    * [Update] 修改资产创建格式
    
    * [Update] 兼容之前的protocols格式
    
    * [Update] Merge master_bugfix to dev_bugfix (#2817)
    
    * [Update] 邮件设置添加配置项:发送账号 (#2795)
    
    * [Bugfix] 修复普通用户被授权的RemoteApp列表加载为空的bug
    
    * [Bugfix] 修复普通用户加载被授权的RemoteApp为空的bug
    
    * [Update] 修改邮件测试的接受者为发送者
    
    * [Update] 修改小问题
    
    * [Update] 修改资产授权序列类返回资产protocols的协议格式/, 同时添加protocol和port字段
    
    * [Update] 修改文案 (#2823)
    
    * [Update] 修改文案
    
    * [Update] 修改文案2
    
    * [Bugfix] 修复资产没有管理用户时获取connectivity字段失败的bug
    
    * [Update] 优化测试可连接性时结果获取 (#2825)
    
    * [Update] 修改资产使用patch方法更新时页面不提示messages信息
    
    * [Update] 添加迁移文件,修改设置资产可连接性时管理用户为None的bug
    
    * [Update] 修改org.middleware自动切换组织的bug (#2829)
    
    * [Update] 修改org.middleware自动切换组织的bug
    
    * [Update] 将切换组织逻辑移动到PermsUtil中
    
    * [Update] 修改首页组织名称显示来源
    Unverified
    9ca4a8c9
terminal.py 4.23 KB
# ~*~ coding: utf-8 ~*~
#
from django.views.generic import ListView, UpdateView, DeleteView, \
    DetailView, View
from django.utils.translation import ugettext as _
from django.shortcuts import redirect
from django.urls import reverse_lazy, reverse

from common.mixins import JSONResponseMixin
from ..models import Terminal
from ..forms import TerminalForm
from common.permissions import PermissionsMixin, IsSuperUser


__all__ = [
    "TerminalListView", "TerminalUpdateView", "TerminalDetailView",
    "TerminalDeleteView", "TerminalConnectView", "TerminalAcceptView",
    "WebTerminalView", 'WebSFTPView',
]


class TerminalListView(PermissionsMixin, ListView):
    model = Terminal
    template_name = 'terminal/terminal_list.html'
    form_class = TerminalForm
    permission_classes = [IsSuperUser]

    def get_context_data(self, **kwargs):
        context = super(TerminalListView, self).get_context_data(**kwargs)
        context.update({
            'app': _('Sessions'),
            'action': _('Terminal list'),
            'form': self.form_class()
        })
        return context


class TerminalUpdateView(PermissionsMixin, UpdateView):
    model = Terminal
    form_class = TerminalForm
    template_name = 'terminal/terminal_update.html'
    success_url = reverse_lazy('terminal:terminal-list')
    permission_classes = [IsSuperUser]

    def get_context_data(self, **kwargs):
        context = super(TerminalUpdateView, self).get_context_data(**kwargs)
        context.update({'app': _('Sessions'), 'action': _('Update terminal')})
        return context


class TerminalDetailView(PermissionsMixin, DetailView):
    model = Terminal
    template_name = 'terminal/terminal_detail.html'
    context_object_name = 'terminal'
    permission_classes = [IsSuperUser]

    def get_context_data(self, **kwargs):
        context = super(TerminalDetailView, self).get_context_data(**kwargs)
        context.update({
            'app': _('Sessions'),
            'action': _('Terminal detail')
        })
        return context


class TerminalDeleteView(PermissionsMixin, DeleteView):
    model = Terminal
    template_name = 'delete_confirm.html'
    success_url = reverse_lazy('terminal:terminal-list')
    permission_classes = [IsSuperUser]


class TerminalAcceptView(PermissionsMixin, JSONResponseMixin, UpdateView):
    model = Terminal
    form_class = TerminalForm
    template_name = 'terminal/terminal_modal_accept.html'
    permission_classes = [IsSuperUser]

    def form_valid(self, form):
        terminal = form.save()
        terminal.create_app_user()
        terminal.is_accepted = True
        terminal.is_active = True
        terminal.save()
        data = {
            'success': True,
            'msg': 'success'
        }
        return self.render_json_response(data)

    def form_invalid(self, form):
        data = {
            'success': False,
            'msg': str(form.errors),
        }
        return self.render_json_response(data)


class TerminalConnectView(PermissionsMixin, DetailView):
    """
    Abandon
    """
    template_name = 'flash_message_standalone.html'
    model = Terminal
    permission_classes = [IsSuperUser]

    def get_context_data(self, **kwargs):
        if self.object.type == 'Web':
            context = {
                'title': _('Redirect to web terminal'),
                'messages': _('Redirect to web terminal') + self.object.url,
                'auto_redirect': True,
                'interval': 3,
                'redirect_url': self.object.url
            }
        else:
            context = {
                'title': _('Connect ssh terminal'),
                'messages': _('You should use your ssh client tools '
                              'connect terminal: {} <br /> <br />'
                              '{}'.format(self.object.name, self.object.url)),
                'redirect_url': reverse('terminal:terminal-list')
            }

        kwargs.update(context)
        return super(TerminalConnectView, self).get_context_data(**kwargs)


class WebTerminalView(View):
    def get(self, request, *args, **kwargs):
        return redirect('/luna/?' + request.GET.urlencode())


class WebSFTPView(View):
    def get(self, request, *args, **kwargs):
        return redirect('/coco/elfinder/sftp/?' + request.GET.urlencode())