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 }
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
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 })
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")
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, })
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")
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})
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})
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
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')
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, })
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')
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 })
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})
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}
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, })
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, })
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})
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, })
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, })
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")
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')
def getDomainObj(request): domain_id = get_domainid_bysession(request) obj = Domain.objects.filter(id=domain_id).first() return obj if obj else None
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
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
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, })
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")
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")
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")
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,})