1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-05-11 17:34:56 +00:00

[sysadmin] Add virus scan records

This commit is contained in:
zhengxie 2015-08-17 11:20:00 +08:00
parent 57fb0066e3
commit 844dcf4a07
7 changed files with 140 additions and 1 deletions

View File

@ -677,6 +677,12 @@ textarea:-moz-placeholder {/* for FF */
.side-tabnav-tabs .tab-cur .org {
background-position: 11px -1247px;
}
.side-tabnav-tabs .tab .security {
background-position: 10px -1285px;
}
.side-tabnav-tabs .tab-cur .security {
background-position: 10px -1322px;
}
.side-tabnav-tabs .tab a:hover {
background-color:#feefb8;
text-decoration:none;

Binary file not shown.

Before

(image error) Size: 9.2 KiB

After

(image error) Size: 9.9 KiB

View File

@ -38,6 +38,11 @@
<a href="{{ SITE_ROOT }}sys/loginadmin/" class="activity">{% trans "Logs" %}</a>
</li>
{% endif %}
{% if events_enabled %}
<li class="tab {% block cur_virus_scan %}{% endblock %}">
<a href="{{ SITE_ROOT }}sys/virus_scan_records/" class="security">{% trans "Virus Scan" %}</a>
</li>
{% endif %}
</ul>
</div>
{% endblock %}

View File

@ -0,0 +1,40 @@
{% extends "sysadmin/base.html" %}
{% load seahub_tags i18n %}
{% block cur_virus_scan %}tab-cur{% endblock %}
{% block right_panel %}
<h3 class="hd">{% trans "Virus Scan Records" %}</h3>
<table>
<tr>
<th width="28%">{% trans "Library" %}</th>
<th width="28%">{% trans "Owner" %}</th>
<th width="29%">{% trans "Virus File" %}</th>
<th width="15%">{% trans "Operation" %}</th>
</tr>
{% for r in records %}
<tr>
<td>{{ r.repo.name }}</td>
<td><a href="{% url "user_info" r.repo.owner %}">{{ r.repo.owner }}</a></td>
<td>{{ r.file_path }}</td>
<td>
{% if not r.has_handle %}
<a href="{% url "sys_delete_virus_scan_records" r.vid %}">{% trans "Delete" %}</a>
{% else %}
<span style="color: green;">{% trans "Handled" %}</span>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% include "sysadmin/useradmin_paginator.html" %}
{% endblock %}
{% block extra_script %}
<script>
</script>
{% endblock %}

View File

@ -25,7 +25,8 @@ from seahub.views.ajax import *
#from django.contrib import admin
#admin.autodiscover()
urlpatterns = patterns('',
urlpatterns = patterns(
'',
# Example:
# (r'^seahub/', include('seahub.foo.urls')),
@ -248,8 +249,17 @@ urlpatterns = patterns('',
url(r'^useradmin/batchadduser/$', batch_add_user, name='batch_add_user'),
url(r'^client-login/$', client_token_login, name='client_token_login'),
)
from seahub.utils import EVENTS_ENABLED
if EVENTS_ENABLED:
urlpatterns += patterns(
'',
url(r'^sys/virus_scan_records/$', sys_virus_scan_records, name='sys_virus_scan_records'),
url(r'^sys/virus_scan_records/delete/(?P<vid>[\d+])/$', sys_delete_virus_scan_records, name='sys_delete_virus_scan_records'),
)
if settings.SERVE_STATIC:
media_url = settings.MEDIA_URL.strip('/')
urlpatterns += patterns('',

View File

@ -683,6 +683,18 @@ if EVENTS_CONFIG_FILE:
return events if events else None
def get_virus_record(repo_id=None, start=-1, limit=-1):
with _get_seafevents_session() as session:
r = seafevents.get_virus_record(session, repo_id, start, limit)
return r if r else []
def handle_virus_record(vid):
with _get_seafevents_session() as session:
return True if seafevents.handle_virus_record(session, vid) == 0 else False
def get_virus_record_by_id(vid):
with _get_seafevents_session() as session:
return seafevents.get_virus_record_by_id(session, vid)
else:
EVENTS_ENABLED = False
def get_user_events():
@ -695,6 +707,12 @@ else:
pass
def get_perm_audit_events():
pass
def get_virus_record():
pass
def handle_virus_record():
pass
def get_virus_record_by_id(vid):
pass
def calc_file_path_hash(path, bits=12):
if isinstance(path, unicode):

View File

@ -1449,6 +1449,66 @@ def sys_traffic_admin(request):
},
context_instance=RequestContext(request))
@login_required
@sys_staff_required
def sys_virus_scan_records(request):
"""List virus scan records.
"""
try:
current_page = int(request.GET.get('page', '1'))
per_page = int(request.GET.get('per_page', '100'))
except ValueError:
current_page = 1
per_page = 100
from seahub.utils import get_virus_record
records_all = get_virus_record(start=per_page * (current_page - 1),
limit=per_page + 1)
if len(records_all) == per_page + 1:
page_next = True
else:
page_next = False
records = []
for r in records_all[:per_page]:
try:
r.repo = seafile_api.get_repo(r.repo_id)
except SearpcError:
continue
r.repo.owner = seafile_api.get_repo_owner(r.repo.repo_id)
records.append(r)
return render_to_response(
'sysadmin/sys_virus_scan_records.html', {
'records': records,
'current_page': current_page,
'prev_page': current_page - 1,
'next_page': current_page + 1,
'per_page': per_page,
'page_next': page_next,
}, context_instance=RequestContext(request))
@login_required
@sys_staff_required
def sys_delete_virus_scan_records(request, vid):
from seahub.utils import handle_virus_record, get_virus_record_by_id
r = get_virus_record_by_id(vid)
parent_dir = os.path.dirname(r.file_path)
dirent_name = os.path.basename(r.file_path)
try:
seafile_api.del_file(r.repo_id, parent_dir, dirent_name,
request.user.username)
handle_virus_record(vid)
messages.success(request, _('Successfully deleted.'))
except SearpcError as e:
logger.error(e)
messages.error(request, _('Failed to delete, please try again later.'))
return HttpResponseRedirect(reverse('sys_virus_scan_records'))
@login_required_ajax
@sys_staff_required
def batch_user_make_admin(request):