예제 #1
0
def switch_domain(request):
    domain_list = Domain.objects.filter(disabled='-1')
    domain_id = get_domainid_bysession(request)
    return {
        'domain_list': domain_list,
        'domain_id': domain_id
    }
예제 #2
0
파일: views.py 프로젝트: zhouli121018/core
def get_user_log_lists(request):
    start_time = request.GET.get('start_time', '')
    end_time = request.GET.get('end_time', '')
    username = request.GET.get('username', '')
    ip = request.GET.get('ip', '')
    classify = request.GET.get('classify', '')
    result = request.GET.get('result', '')
    domain_id = get_domainid_bysession(request)
    lists = CoUserLog.objects.filter(domain_id=domain_id)
    if start_time:
        lists = lists.filter(datetime__gte=start_time)
    if end_time:
        lists = lists.filter(datetime__lte=end_time)
    if username:
        uids = MailboxUser.objects.filter(
            domain_id=domain_id,
            realname__icontains=username).values_list('mailbox_id')
        lists = lists.filter(mailbox_id__in=uids)
    if ip:
        lists = lists.filter(clientip__icontains=ip)
    if classify:
        #邮件搬家有两种协议
        if classify in ('mail_moving', ):
            lists = lists.filter(Q(classify='pop') | Q(classify='imap'))
        else:
            lists = lists.filter(classify=classify)
    if result:
        lists = lists.filter(result=result)
    return lists
예제 #3
0
def maillist_list(request):
    show_dept = '0'
    if request.method == "POST":
        action = request.POST.get('action', '')
        if action == 'delete':
            list_id = request.POST.get('id', '')
            obj = ExtList.objects.filter(id=list_id).first()
            if obj.is_everyone:
                messages.add_message(request, messages.ERROR, _(u'不能被删除'))
            else:
                ExtListMember.objects.filter(extlist_id=list_id).delete()
                ExtList.objects.get(id=list_id).delete()
                messages.add_message(request, messages.SUCCESS, _(u'删除成功'))
            return HttpResponseRedirect(reverse('maillist_list'))
        elif action == 'show_dept':
            show_dept = request.POST.get('show_dept', '')
    show_dept = '0' if not show_dept else show_dept
    domain_id = get_domainid_bysession(request)
    lists = ExtList.objects.filter(domain_id=domain_id, listtype=u"sys")
    list_normal = ExtList.objects.filter(domain_id=domain_id,
                                         listtype=u"general")

    lists_dept = []
    if show_dept == '1':
        lists_dept = ExtList.objects.filter(domain_id=domain_id,
                                            listtype=u"dept")
    lists = chain(lists, list_normal, lists_dept)
    return render(request, "maillist/maillist_list.html", {
        'lists': lists,
        'show_dept': show_dept
    })
예제 #4
0
파일: views.py 프로젝트: zhouli121018/core
def user_log_ajax(request):
    data = request.GET
    order_column = data.get('order[0][column]', '')
    order_dir = data.get('order[0][dir]', '')
    search = data.get('search[value]', '')
    domain_id = get_domainid_bysession(request)
    colums = [
        'id', 'datetime', 'mailbox__name', 'mailbox__mailboxuser__realname',
        'mailbox__username', 'id', 'id', 'id', 'classify', 'id', 'result',
        'id', 'clientip'
    ]
    lists = get_user_log_lists(request)
    if search:
        uids = MailboxUser.objects.filter(
            domain_id=domain_id,
            realname__icontains=search).values_list('mailbox_id')
        lists = lists.filter(mailbox_id__in=uids)

    if lists.exists() and order_column and int(order_column) < len(colums):
        if order_dir == 'desc':
            lists = lists.order_by('-%s' % colums[int(order_column)])
        else:
            lists = lists.order_by('%s' % colums[int(order_column)])
    try:
        length = int(data.get('length', 1))
    except ValueError:
        length = 1

    try:
        start_num = int(data.get('start', '0'))
        page = start_num / length + 1
    except ValueError:
        start_num = 0
        page = 1

    count = lists.count()
    if start_num >= count:
        page = 1
    paginator = Paginator(lists, length)
    try:
        lists = paginator.page(page)
    except (EmptyPage, InvalidPage):
        lists = paginator.page(paginator.num_pages)
    rs = {
        "sEcho": 0,
        "iTotalRecords": count,
        "iTotalDisplayRecords": count,
        "aaData": []
    }
    re_str = '<td.*?>(.*?)</td>'
    number = length * (page - 1) + 1
    for d in lists.object_list:
        t = TemplateResponse(request, 'rpt/user_log_ajax.html', {
            'd': d,
            'number': number
        })
        t.render()
        rs["aaData"].append(re.findall(re_str, t.content, re.DOTALL))
        number += 1
    return HttpResponse(json.dumps(rs), content_type="application/json")
예제 #5
0
파일: views.py 프로젝트: zhouli121018/core
def department(request):
    cid = get_cid(request)
    domain_id = get_domainid_bysession(request)
    if request.method == "POST":
        action = request.POST.get('action', '')
        id = request.POST.get('id', '')
        uri = "{}?cid={}".format(reverse('department_list'), cid)
        if not check_user_departments_perm(request, id):
            messages.add_message(request, messages.ERROR, _(u'对不起您没有权限操作该列表!'))
            return HttpResponseRedirect(uri)
        if action == 'delete':
            if not Department.objects.filter(parent_id=id).exists():
                Department.objects.filter(id=id).delete()
                CoDepartmentInfo.objects.filter(id=id).delete()
                DepartmentMember.objects.filter(dept_id=id).delete()
                ExtList.objects.filter(listtype="dept", dept_id=id).delete()
                messages.add_message(request, messages.SUCCESS, _(u'删除成功'))
            else:
                messages.add_message(request, messages.ERROR, _(u'不能删除拥有下级部门的部门!'))
        return HttpResponseRedirect(uri)
    dept_list = get_user_child_departments(request, domain_id)
    dept = Department.objects.filter(domain_id=domain_id, id=cid).first()
    lists = Department.objects.filter(domain_id=domain_id, parent_id=cid).order_by("-order")
    obj_set = DomainAttr.objects.filter(domain_id=0,type="system",item=u"superadmintitle").first()
    company_name = _(u"邮件服务器") if not obj_set else obj_set.value
    return render(request, "dpt/dpt.html", {
        "cid": dept and dept.id or -1,
        "cdpt": dept and dept.get_title or _(u"邮件服务器"),
        "dept_list": json.dumps(dept_list),
        "company_name": company_name,
        "lists": lists,
    })
예제 #6
0
def ajax_get_account(request):
    domain_id = get_domainid_bysession(request)
    data = request.GET
    order_column = data.get('order[0][column]', '')
    order_dir = data.get('order[0][dir]', '')
    search = data.get('search[value]', '')
    colums = ['id', 'id', 'domain', 'name']
    lists = Mailbox.objects.filter(domain_id=domain_id)
    if search:
        lists = lists.filter(mailbox__mailbox__icontains=search)

    if order_column and int(order_column) < len(colums):
        if order_dir == 'desc':
            lists = lists.order_by('-%s' % colums[int(order_column)])
        else:
            lists = lists.order_by('%s' % colums[int(order_column)])

    try:
        length = int(data.get('length', 1))
    except ValueError:
        length = 1

    try:
        start_num = int(data.get('start', '0'))
        page = start_num / length + 1
    except ValueError:
        start_num = 0
        page = 1

    count = lists.count()
    if start_num >= count:
        page = 1
    paginator = Paginator(lists, length)
    try:
        lists = paginator.page(page)
    except (EmptyPage, InvalidPage):
        lists = paginator.page(paginator.num_pages)

    rs = {
        "sEcho": 0,
        "iTotalRecords": count,
        "iTotalDisplayRecords": count,
        "aaData": []
    }
    re_str = '<td.*?>(.*?)</td>'
    number = length * (page - 1) + 1
    for l in lists.object_list:
        t = TemplateResponse(request, 'mailbox/ajax_get_account.html', {
            'l': l,
            'number': number
        })
        t.render()
        rs["aaData"].append(re.findall(re_str, t.content, re.DOTALL))
        number += 1
    return HttpResponse(json.dumps(rs), content_type="application/json")
예제 #7
0
def groups(request):
    if request.method == "POST":
        action = request.POST.get('action', '')
        if action == 'delete':
            group_id = request.POST.get('id', '')
            CoreGroup.objects.get(id=group_id).delete()
            messages.add_message(request, messages.SUCCESS, u'删除成功')
        return HttpResponseRedirect(reverse('core_group_list'))
    domain_id = get_domainid_bysession(request)
    lists = CoreGroup.objects.filter(domain_id=domain_id).order_by('-id')
    return render(request, "group/groups.html", {"lists": lists})
예제 #8
0
def groups_add(request):
    domain_id = get_domainid_bysession(request)
    domain = get_session_domain(domain_id)
    form = CoreGroupForms(domain_id, domain)
    if request.method == "POST":
        form = CoreGroupForms(domain_id, domain, request.POST)
        if form.is_valid():
            form.save()
            messages.add_message(request, messages.SUCCESS, u'添加成功')
            return HttpResponseRedirect(reverse('core_group_list'))
    return render(request, "group/groups_add.html", {'form': form})
예제 #9
0
def set_domain_id(request):
    next = request.META.get('HTTP_REFERER', None)
    if not next or next.endswith("lang/set/"):
        next = '/'

    response = HttpResponseRedirect(next)
    domain_id = request.POST.get('domain_id', None)
    if not domain_id:
        domain_id = get_domainid_bysession(request)
    if hasattr(request, 'session'):
        request.session['domain_id'] = domain_id
    return response
예제 #10
0
def maillist_export(request):
    domain_id = get_domainid_bysession(request)
    lists = [[_(u'邮件名称'), _(u'邮件地址'), _(u'说明信息'), _(u'列表类型'), _(u'域名')]]
    file_name = _(u'邮件列表-{}').format(
        datetime.datetime.now().strftime('%Y%m%d'))
    lists2 = ExtList.objects.filter(domain_id=domain_id).all()
    for d in lists2:
        lists.append([
            d.listname, d.address, d.description,
            d.get_listtype_display(), d.domain
        ])
    return ExcelResponse(lists, file_name, encoding='utf-8')
예제 #11
0
def maillist_add(request):
    obj=None
    domain_id = get_domainid_bysession(request)
    domain = get_session_domain(domain_id)
    form = ExtListForm(domain_id, domain, None, None, False)
    if request.method == "POST":
        form = ExtListForm(domain_id, domain, None, None, False, request.POST)
        if form.is_valid():
            form.save()
            messages.add_message(request, messages.SUCCESS, u'添加成功')
            return HttpResponseRedirect(reverse('maillist_list'))
    return render(request, "maillist/maillist_add.html",
                  { 'form': form, 'obj': obj, })
예제 #12
0
파일: views.py 프로젝트: zhouli121018/core
def maillog_stat_export(request):
    mailbox_id = 0
    domain_id = get_domainid_bysession(request)
    save_days = get_save_days()
    smtp_in = get_mail_stat_data(domain_id, mailbox_id, "smtp_in")
    smtp_out = get_mail_stat_data(domain_id, mailbox_id, "smtp_out")
    imap_session = get_mail_stat_data(domain_id, mailbox_id, "imap_session")
    pop3_session = get_mail_stat_data(domain_id, mailbox_id, "pop3_session")
    spam_receive = get_mail_stat_data(domain_id, mailbox_id, "spam_receive")
    spam_reject = get_mail_stat_data(domain_id, mailbox_id, "spam_reject")
    spam_virus = get_mail_stat_data(domain_id, mailbox_id, "spam_virus")

    nearday_name = _(u"{}天总计").format(save_days)
    lists = [[
        _(u'序号'),
        _(u'名称'),
        _(u'近期总计'), nearday_name,
        _(u'今日'),
        _(u'昨日'),
        _(u'2日之前'),
        _(u'3日之前'),
        _(u'4日之前'),
        _(u'5日之前'),
        _(u'6日之前')
    ]]
    rows_mail = (
        (_(u"SMTP邮件(收信)"), smtp_in),
        (_(u"SMTP邮件(发信)"), smtp_out),
        (_(u"IMAP会话"), imap_session),
        (_(u"POP3会话"), pop3_session),
        (_(u"已接收的垃圾邮件"), spam_receive),
        (_(u"已拒绝的垃圾邮件"), spam_reject),
        (_(u"已拒绝的病毒邮件"), spam_virus),
    )
    current_row = 1
    for name, data in rows_mail:
        lists.append([
            current_row,
            name,
            data["stat_total"],
            data["stat_week"],
            data["stat_today"],
            data["stat_1"],
            data["stat_2"],
            data["stat_3"],
            data["stat_4"],
            data["stat_5"],
            data["stat_6"],
        ])
        current_row += 1
    return ExcelResponse(lists, "mail_report.xls", encoding='gbk')
예제 #13
0
def edit_account(request, id, template_name='mailbox/edit_account.html'):
    domain_id = get_domainid_bysession(request)
    domain = Domain.objects.get(id=domain_id)
    obj = Mailbox.objects.get(id=id)
    user = MailboxUser.objects.get(id=id)
    form = MailboxForm(domain, instance=obj)
    user_form = MailboxUserForm(domain, instance=user)
    return render(request,
                  template_name=template_name,
                  context={
                      'obj': obj,
                      'form': form,
                      'user': user,
                      'user_form': user_form
                  })
예제 #14
0
def maillist_list(request):
    if request.method == "POST":
        action = request.POST.get('action', '')
        if action == 'delete':
            list_id = request.POST.get('id', '')
            obj = ExtList.objects.filter(id=list_id).firs()
            if obj.is_everyone:
                messages.add_message(request, messages.ERROR, u'不能被删除')
            else:
                ExtListMember.objects.filter(list_id=list_id).delete()
                ExtList.objects.get(id=list_id).delete()
                messages.add_message(request, messages.SUCCESS, u'删除成功')
        return HttpResponseRedirect(reverse('maillist_list'))
    domain_id = get_domainid_bysession(request)
    lists = ExtList.objects.filter(domain_id=domain_id).order_by('-id')
    return render(request, "maillist/maillist_list.html", {'lists': lists})
예제 #15
0
파일: tags.py 프로젝트: zhouli121018/core
def switch_domain(request):
    if request.user.is_superuser or request.user.is_sys_admin:
        domain_list = Domain.objects.filter(disabled='-1').all()
    else:
        domain_list = request.user.domains.filter(disabled='-1').all()

    #把域名根据子域名的方式排序
    domain_list = [d for d in domain_list.order_by('id')]
    domain_list2 = []
    while domain_list:
        domain_list2.append(domain_list.pop(0))
        domain = domain_list2[-1].domain
        l = []
        for idx, d in enumerate(domain_list[:]):
            if d.domain.endswith(domain):
                domain_list2.append(domain_list[idx])
            else:
                l.append(d)
        domain_list = l
    domain_id = get_domainid_bysession(request)
    return {'domain_list': domain_list2, 'domain_id': domain_id}
예제 #16
0
파일: views.py 프로젝트: zhouli121018/core
def security_frequency(request):
    domain_id = get_domainid_bysession(request)
    domain = Domain.objects.filter(id=domain_id).first()
    if not domain:
        return HttpResponseRedirect(reverse('security_frequency'))

    frequency_set = DomainAttr.objects.filter(domain_id=domain.id,
                                              type="system",
                                              item="cf_sendlimit").first()
    form = SendFrequencyForm(instance=frequency_set)
    if request.method == "POST":
        form = SendFrequencyForm(instance=frequency_set, post=request.POST)
        if form.is_valid():
            form.save()
            messages.add_message(request, messages.SUCCESS, _(u'修改设置成功'))

    return render(request,
                  "security/frequency_setting.html",
                  context={
                      "form": form,
                      "domain": domain,
                  })
예제 #17
0
파일: views.py 프로젝트: zhouli121018/core
def security_antispam(request):
    domain_id = get_domainid_bysession(request)
    obj = Domain.objects.filter(id=domain_id).first()
    if not obj:
        return HttpResponseRedirect(reverse('security_antispam'))

    spam_set = DomainAttr.objects.filter(domain_id=obj.id,
                                         type="system",
                                         item="cf_antispam").first()
    form = SpamSetForm(instance=spam_set, request=request, domain_id=obj.id)
    if request.method == "POST":
        form = SpamSetForm(instance=spam_set,
                           post=request.POST,
                           request=request,
                           domain_id=obj.id)
        if form.is_valid():
            form.save()
            messages.add_message(request, messages.SUCCESS, _(u'修改设置成功'))
            return HttpResponseRedirect(reverse('security_antispam'))
        else:
            messages.add_message(request, messages.ERROR, _(u'修改设置失败,请检查输入参数'))

    return render(request,
                  "security/antispam.html",
                  context={
                      "form":
                      form,
                      "domain":
                      obj,
                      "spam_check_local_spam":
                      form.spam_check_local_spam.value,
                      "spam_check_local_virus":
                      form.spam_check_local_virus.value,
                      "spam_check_outside_spam":
                      form.spam_check_outside_spam.value,
                      "spam_check_outside_virus":
                      form.spam_check_outside_virus.value,
                  })
예제 #18
0
파일: views.py 프로젝트: zhouli121018/core
def department_add(request):
    domain_id = get_domainid_bysession(request)
    domainobj = Domain.objects.filter(id=domain_id).first()
    is_superuser = request.user.is_superuser
    form = DepartmentForm(request, is_superuser, None, domainobj, None, None)
    dataDept = get_user_child_departments_kv(request, domain_id)
    dept_ids = dataDept.keys()
    dept_list = get_dept_list_sort(dataDept)
    # dept_list = get_user_child_departments(request, obj.domain_id)
    if request.method == "POST":
        form = DepartmentForm(request, is_superuser, dept_ids, domainobj, None, None, request.POST)
        if form.is_valid():
            obj = form.save()
            infobj = CoDepartmentInfo.objects.create(id=obj.id)
            form2 = CoDepartmentInfoForm(domain_id, request.POST, instance=infobj)
            if form2.is_valid():
                form2.save()
            messages.add_message(request, messages.SUCCESS, _(u'部门添加成功'))
            uri = "{}?cid={}".format(reverse('department_list'), obj.parent_id)
            return HttpResponseRedirect(uri)

    return render(request, "dpt/dpt_add.html",
                  {"form": form, 'current_dpt_id': 0, 'dept_list': json.dumps(dept_list),'parent_id_canchange': True})
예제 #19
0
파일: views.py 프로젝트: zhouli121018/core
def maillog_stat(request):
    mailbox_id = 0
    domain_id = get_domainid_bysession(request)
    save_days = get_save_days()
    smtp_in = get_mail_stat_data(domain_id, mailbox_id, "smtp_in")
    smtp_out = get_mail_stat_data(domain_id, mailbox_id, "smtp_out")
    imap_session = get_mail_stat_data(domain_id, mailbox_id, "imap_session")
    pop3_session = get_mail_stat_data(domain_id, mailbox_id, "pop3_session")
    spam_receive = get_mail_stat_data(domain_id, mailbox_id, "spam_receive")
    spam_reject = get_mail_stat_data(domain_id, mailbox_id, "spam_reject")
    spam_virus = get_mail_stat_data(domain_id, mailbox_id, "spam_virus")
    return render(request,
                  "rpt/maillog_stat.html",
                  context={
                      "smtp_in": smtp_in,
                      "smtp_out": smtp_out,
                      "imap_session": imap_session,
                      "pop3_session": pop3_session,
                      "spam_receive": spam_receive,
                      "spam_reject": spam_reject,
                      "spam_virus": spam_virus,
                      "save_days": save_days,
                  })
예제 #20
0
def add_account(request, template_name='mailbox/add_account.html'):
    domain_id = get_domainid_bysession(request)
    domain = Domain.objects.get(id=domain_id)
    form = MailboxForm(domain)
    user_form = MailboxUserForm(domain)
    if request.method == 'POST':
        print request.POST
        form = MailboxForm(domain, request.POST)
        user_form = MailboxUserForm(domain, request.POST)
        if form.is_valid() and user_form.is_valid():
            obj = form.save()
            user_form.save(obj.id)
    depts = Department.objects.filter(parent_id=-1)
    dept_list = display2(depts)
    mail_list = ExtList.objects.filter(domain_id=domain_id).order_by('-id')
    return render(request,
                  template_name=template_name,
                  context={
                      'form': form,
                      'domain': domain,
                      'user_form': user_form,
                      'dept_list': dept_list,
                      'mail_list': mail_list,
                  })
예제 #21
0
파일: views.py 프로젝트: zhouli121018/core
def maillog_list_ajax(request):
    data = request.GET
    order_column = data.get('order[0][column]', '')
    order_dir = data.get('order[0][dir]', '')
    search = data.get('search[value]', '')

    log_type = data.get('type', '')
    start_time = data.get('start_time', '')
    end_time = data.get('end_time', '')
    username = data.get('username', '')
    send_mail = data.get('send_mail', '')
    recv_mail = data.get('recv_mail', '')
    max_attach = data.get('max_attach', '')
    min_attach = data.get('min_attach', '')
    senderip = data.get('senderip', '')
    rcv_server = data.get('rcv_server', '')
    text = data.get('text', '')
    result = data.get('result', '0')

    start_time = "" if start_time == 'None' else start_time
    end_time = "" if end_time == 'None' else end_time

    colums = [
        'id',
        'recv_time',
        'mailbox_id',
        'type',
        'rcv_server',
        'send_mail',
        'senderip',
        'recv_mail',
        'subject',
        'attachment',
        'attachment_size',
        'folder',
        'result',
        'remark',
    ]

    domain_id = get_domainid_bysession(request)
    condition = Q(domain_id=domain_id)
    if search:
        condition = add_condition(
            condition,
            Q(send_mail__icontains=search) | Q(recv_mail__icontains=search))
    if log_type:
        condition = add_condition(condition, Q(type=log_type))
    if username:
        condition = add_condition(condition,
                                  (Q(send_mail__icontains=username)
                                   | Q(recv_mail__icontains=username)))
    if send_mail:
        condition = add_condition(condition, Q(send_mail__icontains=send_mail))
    if recv_mail:
        condition = add_condition(condition, Q(recv_mail__icontains=recv_mail))
    if senderip:
        condition = add_condition(condition, Q(senderip__icontains=senderip))
    if rcv_server:
        condition = add_condition(condition,
                                  Q(rcv_server__icontains=rcv_server))
    if result and result != "0":
        condition = add_condition(condition, Q(result=result))
    if text:
        condition = add_condition(condition, Q(subject__icontains=text) | Q(attachment__icontains=text) \
                                  | Q(send_mail__icontains=text) | Q(recv_mail__icontains=text) )
    if start_time or end_time:
        q = None
        if start_time:
            q = add_condition(q, Q(recv_time__gte=start_time))
        if end_time:
            q = add_condition(q, Q(recv_time__lte=end_time))
        condition = add_condition(condition, q)
    if max_attach or min_attach:
        q = None
        if min_attach:
            min_attach = int(float(min_attach) * 1024 * 1024)
            q = add_condition(q, Q(attachment_size__gte=min_attach))
        if max_attach:
            max_attach = int(float(max_attach) * 1024 * 1024)
            q = add_condition(q, Q(attachment_size__lte=max_attach))
        condition = add_condition(condition, q)

    #每次查询只显示前1000结果
    max_show = 1000
    lists = MailLog.objects.filter(condition)

    if order_column and int(order_column) < len(colums):
        if order_dir == 'desc':
            lists = lists.order_by('-%s' %
                                   colums[int(order_column)])[:max_show]
        else:
            lists = lists.order_by('%s' % colums[int(order_column)])[:max_show]
    else:
        lists = lists.order_by("-recv_time")[:max_show]

    try:
        length = int(data.get('length', 1))
    except ValueError:
        length = 1

    try:
        start_num = int(data.get('start', '0'))
        page = start_num / length + 1
    except ValueError:
        start_num = 0
        page = 1

    count = lists.count()
    if start_num >= count:
        page = 1
    paginator = Paginator(lists, length)
    try:
        lists = paginator.page(page)
    except (EmptyPage, InvalidPage):
        lists = paginator.page(paginator.num_pages)
    rs = {
        "sEcho": 0,
        "iTotalRecords": count,
        "iTotalDisplayRecords": count,
        "aaData": []
    }
    re_str = '<td.*?>(.*?)</td>'
    number = length * (page - 1) + 1
    for d in lists.object_list:
        t = TemplateResponse(request, 'rpt/maillog_list_ajax.html', {
            'd': d,
            'number': number
        })
        t.render()
        rs["aaData"].append(re.findall(re_str, t.content, re.DOTALL))
        number += 1

    return HttpResponse(json.dumps(rs), content_type="application/json")
예제 #22
0
파일: views.py 프로젝트: zhouli121018/core
def maillog_list_export(request):
    data = request.GET
    log_type = data.get('type', '')
    start_time = data.get('start_time', '')
    end_time = data.get('end_time', '')
    username = data.get('username', '')
    send_mail = data.get('send_mail', '')
    recv_mail = data.get('recv_mail', '')
    max_attach = data.get('max_attach', '')
    min_attach = data.get('min_attach', '')
    senderip = data.get('senderip', '')
    rcv_server = data.get('rcv_server', '')
    text = data.get('text', '')
    start_time = "" if start_time == 'None' else start_time
    end_time = "" if end_time == 'None' else end_time
    result = data.get('result', '0')

    condition = None
    domain_id = get_domainid_bysession(request)
    if domain_id:
        condition = add_condition(condition, Q(domain_id=domain_id))
    if log_type:
        condition = add_condition(condition, Q(type=log_type))
    if username:
        condition = add_condition(condition,
                                  (Q(send_mail__icontains=username)
                                   | Q(recv_mail__icontains=username)))
    if send_mail:
        condition = add_condition(condition, Q(send_mail__icontains=send_mail))
    if recv_mail:
        condition = add_condition(condition, Q(recv_mail__icontains=recv_mail))
    if senderip:
        condition = add_condition(condition, Q(senderip__icontains=senderip))
    if rcv_server:
        condition = add_condition(condition,
                                  Q(rcv_server__icontains=rcv_server))
    if result and result != "0":
        condition = add_condition(condition, Q(result=result))
    if text:
        condition = add_condition(
            condition,
            Q(subject__icontains=text) | Q(attachment__icontains=text))

    if start_time or end_time:
        q = None
        if start_time:
            q = add_condition(q, Q(recv_time__gte=start_time))
        if end_time:
            q = add_condition(q, Q(recv_time__lte=end_time))
        condition = add_condition(condition, q)
    if max_attach or min_attach:
        q = None
        if min_attach:
            min_attach = int(float(min_attach) * 1024 * 1024)
            q = add_condition(q, Q(attachment_size__gte=min_attach))
        if max_attach:
            max_attach = int(float(max_attach) * 1024 * 1024)
            q = add_condition(q, Q(attachment_size__lte=max_attach))
        condition = add_condition(condition, q)

    # 每次查询只显示前10000结果
    max_show = 10000
    if condition:
        lists = MailLog.objects.filter(condition).order_by(
            "-recv_time")[:max_show]
    else:
        lists = MailLog.objects.all().order_by("-recv_time")[:max_show]

    lists2 = [[
        _(u'序号'),
        _(u'时间'),
        _(u'用户名'),
        _(u'类型'),
        _(u'发件邮箱'),
        _(u'收件邮箱'),
        _(u'发件服务器'),
        _(u'收件服务器'),
        _(u'邮件标题'),
        _(u'附件名称'),
        _(u'附件大小'),
        _(u'投递位置'),
        _(u'结果'),
        _(u'投递提示')
    ]]
    current_row = 1
    for d in lists:
        result = _(u'成功') if d.get_result == '1' else _(u'失败')
        #由 ugettext_lazy 包起来的数据要提前翻译
        t = _(d.get_type)
        lists2.append([
            current_row, d.get_time, d.get_username, t, d.send_mail,
            d.recv_mail, d.senderip, d.rcv_server, d.subject, d.attachment,
            d.get_attach_size, d.folder, result, d.remark
        ])
        current_row += 1
    return ExcelResponse(lists2, "maillog_list", encoding='gbk')
예제 #23
0
def getDomainObj(request):
    domain_id = get_domainid_bysession(request)
    obj = Domain.objects.filter(id=domain_id).first()
    return obj if obj else None
예제 #24
0
파일: views.py 프로젝트: zhouli121018/core
def maillog_mailbox_search(request):
    data = request.GET
    order_column = data.get('order[0][column]', '')
    order_dir = data.get('order[0][dir]', '')
    search = data.get('search[value]', '')

    username = data.get('username', '')
    name = data.get('name', '')
    department = data.get('department', '')
    position = data.get('position', '')
    worknumber = data.get('worknumber', '')

    quota = data.get('quota', '')
    netdisk_quota = data.get('netdisk_quota', '')

    send_permit = data.get('send_permit', '')
    recv_permit = data.get('recv_permit', '')
    disabled = data.get('disabled', '0')

    domain_id = get_domainid_bysession(request)
    q_domain = Q(domain_id=domain_id)
    condition_mailbox = q_domain
    condition_user = None

    id_list = []
    if name:
        condition_user = add_condition(condition_user,
                                       Q(realname__icontains=name))
    if worknumber:
        condition_user = add_condition(condition_user,
                                       Q(eenumber__icontains=worknumber))
    if condition_user:
        condition_user = add_condition(condition_user, q_domain)
        for obj in MailboxUser.objects.filter(condition_user):
            id_list.append(obj.mailbox_id)
        if not id_list:
            return [], 0, 1, 1

    if position or department:
        condition_dept = None
        condition_position = None
        dept_list = []

        if department:
            condition_dept = add_condition(condition_dept,
                                           Q(title__icontains=department))
            condition_dept = add_condition(condition_dept, q_domain)
            for obj in Department.objects.filter(condition_dept):
                dept_list.append(obj.id)

        if position:
            condition_position = add_condition(condition_position,
                                               Q(position__icontains=position))
            condition_position = add_condition(condition_position, q_domain)
        else:
            condition_position = add_condition(condition_position, q_domain)

        q_dept = None
        for dept_id in dept_list:
            if q_dept:
                q_dept = q_dept | Q(dept_id=dept_id)
            else:
                q_dept = Q(dept_id=dept_id)

        condition_position = add_condition(q_dept, condition_position)
        q_box = None
        for mailbox_id in id_list:
            if q_box:
                q_box = q_box | Q(mailbox_id=mailbox_id)
            else:
                q_box = Q(mailbox_id=mailbox_id)
        condition_position = add_condition(q_box, condition_position)
        id_list = []
        for obj in DepartmentMember.objects.filter(condition_position):
            id_list.append(obj.mailbox_id)

        if not id_list:
            return [], 0, 1, 1

    condition_mailbox = add_condition(condition_mailbox, q_domain)
    if username:
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(name__icontains=username))
    if send_permit and send_permit != "0":
        box_list = MailboxSearch.search_send_recv_limit(domain_id=domain_id,
                                                        type="send",
                                                        limit=send_permit)
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(id__in=box_list))
    if recv_permit and recv_permit != "0":
        box_list = MailboxSearch.search_send_recv_limit(domain_id=domain_id,
                                                        type="recv",
                                                        limit=recv_permit)
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(id__in=box_list))
    if quota:
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(quota_mailbox=quota))
    if netdisk_quota:
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(quota_netdisk=netdisk_quota))
    if disabled and disabled != "0":
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(disabled=disabled))
    q_box = None
    for mailbox_id in id_list:
        if q_box:
            q_box = q_box | Q(id=mailbox_id)
        else:
            q_box = Q(id=mailbox_id)
    condition_mailbox = add_condition(q_box, condition_mailbox)
    mailbox_lists = Mailbox.objects.filter(condition_mailbox)

    colums = [
        'id', 'username', 'mailboxuser__realname', 'id', 'id',
        'mailboxuser__eenumber', 'limit_send', 'limit_recv', 'quota_mailbox',
        'quota_netdisk', 'mailboxsize__size', 'disabled'
    ]
    if order_column and int(order_column) < len(colums):
        if order_dir == 'desc':
            mailbox_lists = mailbox_lists.order_by('-%s' %
                                                   colums[int(order_column)])
        else:
            mailbox_lists = mailbox_lists.order_by('%s' %
                                                   colums[int(order_column)])

    try:
        length = int(data.get('length', 1))
    except ValueError:
        length = 1
    try:
        start_num = int(data.get('start', '0'))
        page = start_num / length + 1
    except ValueError:
        start_num = 0
        page = 1
    return mailbox_lists, start_num, page, length
예제 #25
0
파일: views.py 프로젝트: zhouli121018/core
def maillog_user_search(request):
    data = request.GET
    order_column = data.get('order[0][column]', '')
    order_dir = data.get('order[0][dir]', '')
    search = data.get('search[value]', '')
    username = data.get('username', '')

    department = data.get('department', '0')
    department = 0 if not department else int(department)
    #最大搜索用户数,没什么用,先去掉
    #showmax = data.get('showmax', '')
    #showmax = 0 if not showmax.strip() else int(showmax)
    showmax = 0

    date_select = data.get('date_select', '')
    if not date_select or date_select == "None":
        date_select = "0"
    date_select = int(date_select)

    date_select2 = data.get('date_select2', '')
    if not date_select2 or date_select2 == "None":
        date_select2 = "-1"
    date_select2 = int(date_select2)

    start_day = max(date_select, date_select2)
    end_day = min(date_select, date_select2)
    start_time = get_day(int(start_day))

    domain_id = get_domainid_bysession(request)
    #-------------------------- 筛选 部门 ----------------------------
    lists = MailLog.objects.filter(domain_id=domain_id)
    if department and int(department) > 0:
        id_dept = DepartmentMember.objects.filter(
            domain_id=domain_id, dept_id=department).values_list('mailbox_id',
                                                                 flat=True)
        lists = lists.filter(mailbox_id__in=id_dept)
    #-------------------------- 筛选 部门 完毕 ------------------------

    #-------------------------- 筛选 邮箱 ----------------------------
    condition_mailbox = None
    if username:
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(name__icontains=username))
    if condition_mailbox:
        condition_mailbox = add_condition(condition_mailbox,
                                          Q(domain_id=domain_id))
        id_box = Mailbox.objects.filter(condition_mailbox).values_list(
            'id', flat=True)
        lists = lists.filter(mailbox_id__in=id_box)
    #-------------------------- 筛选 邮箱 完毕 ------------------------

    condition = Q(domain_id=domain_id)
    condition_single = Q(domain_id=domain_id)
    condition = add_condition(condition, Q(recv_time__gte=start_time))
    condition_single = add_condition(condition_single,
                                     Q(recv_time__gte=start_time))
    if end_day > -1 and end_day != start_day:
        end_time = get_day(int(end_day))
        condition = add_condition(condition, Q(recv_time__lt=end_time))
        condition_single = add_condition(condition_single,
                                         Q(recv_time__lt=end_time))
    lists = lists.filter(condition).values('mailbox_id').annotate(
        Count('size'), Sum('size')).order_by('-size__count')
    flag = "stat"
    try:
        length = int(data.get('length', 1))
    except ValueError:
        length = 1
    try:
        start_num = int(data.get('start', '0'))
        page = start_num / length + 1
    except ValueError:
        start_num = 0
        page = 1
    return flag, lists, condition_single, start_num, page, length, showmax
예제 #26
0
파일: views.py 프로젝트: zhouli121018/core
def maillog_user(request):
    domain_id = get_domainid_bysession(request)
    form = ActiveUserStatForm(domain_id, request.GET)
    return render(request, "rpt/maillog_user.html", context={
        "form": form,
    })
예제 #27
0
파일: views.py 프로젝트: zhouli121018/core
def user_log_client_ajax(request):
    data = request.GET
    order_column = data.get('order[0][column]', '')
    order_dir = data.get('order[0][dir]', '')
    search = data.get('search[value]', '')
    colums = ['id', 'user', 'type', 'time', 'client_ip', 'is_login']
    domain_id = get_domainid_bysession(request)
    lists = AuthLog.objects.filter(domain_id=domain_id)

    vtype = request.GET.get('vtype', '')
    username = request.GET.get('username', '')
    start_time = request.GET.get('start_time', '')
    end_time = request.GET.get('end_time', '')
    ip = request.GET.get('ip', '')
    is_login = request.GET.get('is_login', '')

    if vtype:
        lists = lists.filter(type=vtype)
    if username:
        lists = lists.filter(user__icontains=username)
    if start_time:
        lists = lists.filter(time__gte=start_time)
    if end_time:
        lists = lists.filter(time__lte=end_time)
    if ip:
        lists = lists.filter(client_ip__icontains=ip)
    if is_login == '-1':
        lists = lists.filter(is_login=False)
    if is_login == '1':
        lists = lists.filter(is_login=False)

    if search:
        lists = lists.filter(user__icontains=search)

    if order_column and int(order_column) < len(colums):
        if order_dir == 'desc':
            lists = lists.order_by('-%s' % colums[int(order_column)])
        else:
            lists = lists.order_by('%s' % colums[int(order_column)])

    try:
        length = int(data.get('length', 1))
    except ValueError:
        length = 1

    try:
        start_num = int(data.get('start', '0'))
        page = start_num / length + 1
    except ValueError:
        start_num = 0
        page = 1

    count = lists.count()
    if start_num >= count:
        page = 1
    paginator = Paginator(lists, length)
    try:
        lists = paginator.page(page)
    except (EmptyPage, InvalidPage):
        lists = paginator.page(paginator.num_pages)

    rs = {
        "sEcho": 0,
        "iTotalRecords": count,
        "iTotalDisplayRecords": count,
        "aaData": []
    }
    re_str = '<td.*?>(.*?)</td>'
    number = length * (page - 1) + 1
    for l in lists.object_list:
        t = TemplateResponse(request, 'rpt/user_log_client_ajax.html', {
            'l': l,
            'number': number
        })
        t.render()
        rs["aaData"].append(re.findall(re_str, t.content, re.DOTALL))
        number += 1
    return HttpResponse(json.dumps(rs), content_type="application/json")
예제 #28
0
파일: views.py 프로젝트: zhouli121018/core
def user_log_web_ajax(request):
    data = request.GET
    order_column = data.get('order[0][column]', '')
    order_dir = data.get('order[0][dir]', '')
    search = data.get('search[value]', '')
    colums = [
        'logintime', 'mailbox__name', 'mailbox__username', 'logintime',
        'lasttime', 'id', 'clienttype', 'clientip', 'id'
    ]
    domain_id = get_domainid_bysession(request)
    lists = VisitLog.objects.filter(domain_id=domain_id)

    name = request.GET.get('name', '')
    username = request.GET.get('username', '')
    start_time = request.GET.get('start_time', '')
    end_time = request.GET.get('end_time', '')
    ip = request.GET.get('ip', '')
    login_type = request.GET.get('login_type', '')
    is_online = request.GET.get('is_online', '')
    try:
        online_time_lt = int(request.GET.get('online_time_lt', '0'))
    except:
        online_time_lt = 0
    try:
        online_time_gt = int(request.GET.get('online_time_gt', '0'))
    except:
        online_time_gt = 0

    if name:
        lists = lists.filter(mailbox__name__icontains=name)
    if username:
        lists = lists.filter(mailbox__username__icontains=username)
    if start_time:
        lists = lists.filter(logintime__gte=start_time)
    if end_time:
        lists = lists.filter(logintime__lte=end_time)
    if ip:
        lists = lists.filter(clientip__icontains=ip)
    if login_type:
        lists = lists.filter(clienttype__icontains=login_type)
    if is_online == '1':
        lists = lists.extra(
            where=['( UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(lasttime) )<600'])
    if is_online == '-1':
        lists = lists.extra(where=[
            '( UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(lasttime) )>=600'
        ])
    if online_time_lt:
        lists = lists.extra(where=[
            '( UNIX_TIMESTAMP(lasttime) - UNIX_TIMESTAMP(logintime) )<=%s'
        ],
                            params=[online_time_lt * 3600])
    if online_time_gt:
        lists = lists.extra(where=[
            '( UNIX_TIMESTAMP(lasttime) - UNIX_TIMESTAMP(logintime) )>=%s'
        ],
                            params=[online_time_gt * 3600])
    if search:
        lists = lists.filter(mailbox__username__icontains=search)

    if order_column and int(order_column) < len(colums):
        if order_dir == 'desc':
            lists = lists.order_by('-%s' % colums[int(order_column)])
        else:
            lists = lists.order_by('%s' % colums[int(order_column)])

    try:
        length = int(data.get('length', 1))
    except ValueError:
        length = 1

    try:
        start_num = int(data.get('start', '0'))
        page = start_num / length + 1
    except ValueError:
        start_num = 0
        page = 1

    count = lists.count()
    if start_num >= count:
        page = 1
    paginator = Paginator(lists, length)
    try:
        lists = paginator.page(page)
    except (EmptyPage, InvalidPage):
        lists = paginator.page(paginator.num_pages)

    rs = {
        "sEcho": 0,
        "iTotalRecords": count,
        "iTotalDisplayRecords": count,
        "aaData": []
    }
    re_str = '<td.*?>(.*?)</td>'
    number = length * (page - 1) + 1
    for l in lists.object_list:
        continuetime = smooth_timedelta(l.lasttime - l.logintime)
        out_time = timezone.now() - l.lasttime
        is_login = True if out_time.total_seconds() <= 600 else False
        t = TemplateResponse(
            request, 'rpt/user_log_web_ajax.html', {
                'l': l,
                'number': number,
                'continuetime': continuetime,
                'is_login': is_login
            })
        t.render()
        rs["aaData"].append(re.findall(re_str, t.content, re.DOTALL))
        number += 1
    return HttpResponse(json.dumps(rs), content_type="application/json")
예제 #29
0
파일: views.py 프로젝트: zhouli121018/core
def group_limit_whitelist_ajax(request):
    def getPostMailbox(key):
        #从 entry_{{ mailbox }}_id 这种格式中把 mailbox 提取出来
        l = key.split("_")
        l.pop(0)
        flag = l.pop(-1)
        mailbox = "_".join(l)
        return mailbox

    def setPostMailboxData(mailbox, key, value):
        mailboxDict.setdefault(mailbox, {})
        mailboxDict[mailbox][key] = value

    #enddef
    domain_id = get_domainid_bysession(request)
    mailboxDict = {}
    newMailboxList = []
    data = request.POST
    group_id = data.get("group_id", u"0")
    obj = CoreGroup.objects.get(id=group_id)
    if not group_id or not obj:
        data = {
            "status": "Failure",
            "message": _(u"权限组不存在"),
        }
        return HttpResponse(json.dumps(data), content_type="application/json")

    type = data.get("type", u"send")
    if not type in ('send', 'recv'):
        data = {
            "status": "Failure",
            "message": _(u"类型不正确"),
        }
        return HttpResponse(json.dumps(data), content_type="application/json")

    mailbox_id = data.get("id", 0)
    newMailbox = data.get("new_mailbox", u"")
    newMailboxList = data.get("new_mailbox_list", u"")
    boxList = newMailboxList.split("|")
    boxList = [box for box in boxList if box.strip()]
    newMailboxList = boxList
    if newMailbox.strip():
        newMailboxList.append(newMailbox.strip())
    for k, v in data.items():
        if k.startswith("{}_".format(type)):
            if k.endswith("_id"):
                mailbox = getPostMailbox(k)
                setPostMailboxData(mailbox, "id", v)
            elif k.endswith("_delete"):
                mailbox = getPostMailbox(k)
                setPostMailboxData(mailbox, "delete", v)
    for mailbox, info in mailboxDict.items():
        if info.get("delete", "0") == "1":
            continue
        newMailboxList.append(mailbox)

    newMailboxList = list(set(newMailboxList))
    try:
        saveValue = json.loads(obj.limit_whitelist)
        saveValue = {} if not isinstance(saveValue, dict) else saveValue
    except:
        saveValue = {}
    saveValue[type] = newMailboxList
    obj.limit_whitelist = json.dumps(saveValue)
    obj.save()
    data = {
        "status": "OK",
        "message": "Success",
    }
    return HttpResponse(json.dumps(data), content_type="application/json")
예제 #30
0
def maillist_import(request):
    form = ExcelTxtImport()
    domain_id = get_domainid_bysession(request)
    domain = get_session_domain(domain_id)
    if request.method == "POST":
        form = ExcelTxtImport(data=request.POST, files=request.FILES)
        if form.is_valid():
            success, fail = 0, 0
            if form.file_ext == 'txt':
                lines = form.file_obj.readlines()
                for line in lines:
                    line = line.replace('\n', '').replace('\r', '').replace('\000', '')
                    elem = line.strip().replace(u',', '\t').replace(',', '\t').replace(u';', '\t').replace(';', '\t').split('\t')
                    length = len(elem)
                    listname = elem[0] if length>1 else ''
                    address = elem[1] if length>2 else ''
                    description = elem[2] if length>3 else ''
                    form = ExtListForm(domain_id, domain, None, None, True, {
                        'domain_id': domain_id, 'listname': listname,
                        'address': address, 'description': description,
                        'permission': 'public', 'disabled': '1',
                    })
                    if form.is_valid():
                        form.save()
                        success += 1
                    else:
                        fail += 1
            if form.file_ext == 'csv':
                import csv
                lines = list(csv.reader(form.file_obj))
                for elem in lines:
                    length = len(elem)
                    listname = elem[0] if length > 1 else ''
                    address = elem[1] if length > 2 else ''
                    description = elem[2] if length > 3 else ''
                    form = ExtListForm(domain_id, domain, None, None, True, {
                        'domain_id': domain_id, 'listname': listname,
                        'address': address, 'description': description,
                        'permission': 'public', 'disabled': '1',
                    })
                    if form.is_valid():
                        form.save()
                        success += 1
                    else:
                        fail += 1
            if form.file_ext in ('xls', 'xlxs'):
                import xlrd
                content = form.file_obj.read()
                workbook = xlrd.open_workbook(filename=None, file_contents=content)
                table = workbook.sheets()[0]
                for line in xrange(table.nrows):
                    elem = table.row_values(line)
                    listname = elem[0] if elem else ''
                    address = elem[1] if elem else ''
                    description = elem[2] if elem else ''
                    form = ExtListForm(domain_id, domain, None, None, True, {
                        'domain_id':domain_id, 'listname':listname,
                        'address':address, 'description':description,
                        'permission': 'public', 'disabled': '1',
                    })
                    if form.is_valid():
                        form.save()
                        success += 1
                    else:
                        fail += 1
            messages.add_message(request, messages.SUCCESS,
                                 _(u'批量添加成功%(success)s个, 失败%(fail)s个') % {"success": success, "fail": fail})
            return HttpResponseRedirect(reverse('maillist_list'))
    return render(request, "maillist/maillist_import.html", {'form': form,})