mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-24 21:07:17 +00:00
Merge branch 'traffic'
This commit is contained in:
@@ -32,7 +32,9 @@
|
||||
<button data="{{save_to_link}}" id="save">{% trans "Save to..."%}</button>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if not traffic_over_limit %}
|
||||
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/{{ obj_id }}/?file_name={{ file_name|urlencode }}&op=download&t={{ shared_token }}&p={{path|urlencode}}" class="obv-btn">{% trans "Download" %} ({{file_size|filesizeformat}})</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% include 'snippets/file_content_html.html' %}
|
||||
</div>
|
||||
@@ -60,6 +62,11 @@ $(function() {
|
||||
var dld_btn = $('.obv-btn').clone();
|
||||
dld_btn.html("{% trans "Download" %}").attr('class', 'big-obv-btn');
|
||||
$('#file-view-tip').append(dld_btn);
|
||||
|
||||
{% if traffic_over_limit %}
|
||||
var tip = "{% trans "File download is disabled: the share link traffic of owner is used up." %}";
|
||||
$('#title-panel').html('<p class="alc" style="background:#fddaa4;color:#1f0600;padding:3px 0;margin:0 0 15px;">' + tip + '</p>').removeClass('hide');
|
||||
{% endif %}
|
||||
});
|
||||
var all_repos = [];
|
||||
{% for a_repo in accessible_repos %}
|
||||
|
@@ -19,7 +19,9 @@
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% if not traffic_over_limit %}
|
||||
<a href="{% url 'repo_download_dir' repo.id %}?p={{ path|urlencode }}&t={{ token }}" class="obv-btn fright">{% trans "ZIP"%}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<table class="repo-file-list">
|
||||
<tr>
|
||||
@@ -38,7 +40,9 @@
|
||||
|
||||
<td></td>
|
||||
<td>
|
||||
{% if not traffic_over_limit %}
|
||||
<a class="op vh" href="{% url 'repo_download_dir' repo.id %}?p={{ path|urlencode }}{{ dirent.obj_name|urlencode }}&t={{token}}">{% trans 'Download' %}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
@@ -52,7 +56,9 @@
|
||||
|
||||
<td>{{ dirent.file_size|filesizeformat }}</td>
|
||||
<td>
|
||||
{% if not traffic_over_limit %}
|
||||
<a class="op vh" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?file_name={{ dirent.props.obj_name }}&op=download&t={{token}}">{% trans "Download"%}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
@@ -60,3 +66,14 @@
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
{% if traffic_over_limit %}
|
||||
var tip = "{% trans "File download is disabled: the share link traffic of owner is used up." %}";
|
||||
$('#title-panel').html('<p class="alc" style="background:#fddaa4;color:#1f0600;padding:3px 0;margin:0 0 15px;">' + tip + '</p>').removeClass('hide');
|
||||
{% endif %}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
@@ -887,8 +887,31 @@ if EVENTS_CONFIG_FILE and hasattr(seafevents, 'get_user_traffic_stat'):
|
||||
finally:
|
||||
session.close()
|
||||
return stat
|
||||
|
||||
def user_traffic_over_limit(username):
|
||||
"""Return ``True`` if user traffic over the limit, otherwise ``False``.
|
||||
"""
|
||||
from seahub_extra.plan.models import UserPlan
|
||||
from seahub_extra.plan.settings import PLAN
|
||||
up = UserPlan.objects.get_valid_plan_by_user(username)
|
||||
plan = 'Free' if up is None else up.plan_type
|
||||
traffic_limit = int(PLAN[plan]['share_link_traffic']) * 1024 * 1024 * 1024
|
||||
|
||||
try:
|
||||
stat = get_user_traffic_stat(username)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
stat = None
|
||||
|
||||
if stat is None:
|
||||
return True
|
||||
|
||||
month_traffic = stat['file_view'] + stat['file_download'] + stat['dir_download']
|
||||
return True if month_traffic >= traffic_limit else False
|
||||
else:
|
||||
def get_user_traffic_stat(username):
|
||||
pass
|
||||
def get_user_traffic_list():
|
||||
pass
|
||||
def user_traffic_over_limit(request):
|
||||
return False
|
||||
|
@@ -85,7 +85,8 @@ from seahub.utils import render_permission_error, render_error, list_to_string,
|
||||
gen_file_get_url, string2list, MAX_INT, IS_EMAIL_CONFIGURED, \
|
||||
gen_file_upload_url, check_and_get_org_by_repo, \
|
||||
EVENTS_ENABLED, get_user_events, get_org_user_events, show_delete_days, \
|
||||
TRAFFIC_STATS_ENABLED, get_user_traffic_stat, new_merge_with_no_conflict
|
||||
TRAFFIC_STATS_ENABLED, get_user_traffic_stat, new_merge_with_no_conflict, \
|
||||
user_traffic_over_limit
|
||||
from seahub.utils.paginator import get_page_range
|
||||
from seahub.utils.star import get_dir_starred_files
|
||||
from seahub.views.modules import MOD_PERSONAL_WIKI, \
|
||||
@@ -1324,6 +1325,9 @@ def repo_del_file(request, repo_id):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
def repo_access_file(request, repo_id, obj_id):
|
||||
"""Delete or download file.
|
||||
TODO: need to be rewrite.
|
||||
"""
|
||||
repo = get_repo(repo_id)
|
||||
if not repo:
|
||||
raise Http404
|
||||
@@ -1357,6 +1361,12 @@ def repo_access_file(request, repo_id, obj_id):
|
||||
else:
|
||||
from_shared_link = False
|
||||
|
||||
if from_shared_link:
|
||||
# check whether owner's traffic over the limit
|
||||
if user_traffic_over_limit(fileshare.username):
|
||||
return render_permission_error(request,
|
||||
_(u'Unable to access file: share link traffic is used up.'))
|
||||
|
||||
username = request.user.username
|
||||
path = request.GET.get('p', '')
|
||||
if check_repo_access_permission(repo_id, request.user) or \
|
||||
@@ -1750,7 +1760,9 @@ def view_shared_dir(request, token):
|
||||
fileshare = FileShare.objects.get(token=token)
|
||||
fileshare.view_cnt = F('view_cnt') + 1
|
||||
fileshare.save()
|
||||
|
||||
|
||||
traffic_over_limit = user_traffic_over_limit(fileshare.username)
|
||||
|
||||
return render_to_response('view_shared_dir.html', {
|
||||
'repo': repo,
|
||||
'token': token,
|
||||
@@ -1760,6 +1772,7 @@ def view_shared_dir(request, token):
|
||||
'file_list': file_list,
|
||||
'dir_list': dir_list,
|
||||
'zipped': zipped,
|
||||
'traffic_over_limit': traffic_over_limit,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def view_shared_upload_link(request, token):
|
||||
@@ -1957,6 +1970,12 @@ def repo_download_dir(request, repo_id):
|
||||
allow_download = True if check_repo_access_permission(
|
||||
repo_id, request.user) else False
|
||||
|
||||
if from_shared_link:
|
||||
# check whether owner's traffic over the limit
|
||||
if user_traffic_over_limit(fileshare.username):
|
||||
return render_permission_error(request,
|
||||
_(u'Unable to access file: share link traffic is used up.'))
|
||||
|
||||
if allow_download:
|
||||
dir_id = seafserv_threaded_rpc.get_dirid_by_path (repo.id,
|
||||
repo.head_cmmt_id,
|
||||
|
@@ -48,7 +48,8 @@ from seahub.utils import show_delete_days, render_error, \
|
||||
get_file_type_and_ext, gen_file_get_url, gen_file_share_link, \
|
||||
get_ccnetapplet_root, render_permission_error, \
|
||||
is_textual_file, show_delete_days, mkstemp, EMPTY_SHA1, HtmlDiff, \
|
||||
check_filename_with_rename, gen_inner_file_get_url, normalize_file_path
|
||||
check_filename_with_rename, gen_inner_file_get_url, normalize_file_path, \
|
||||
user_traffic_over_limit
|
||||
from seahub.utils.file_types import (IMAGE, PDF, IMAGE, DOCUMENT, SPREADSHEET, MARKDOWN, \
|
||||
TEXT, SF, OPENDOCUMENT)
|
||||
from seahub.utils.star import is_file_starred
|
||||
@@ -631,7 +632,7 @@ def view_shared_file(request, token):
|
||||
'filetype': filetype}
|
||||
exceeds_limit, err_msg = file_size_exceeds_preview_limit(file_size, filetype)
|
||||
if exceeds_limit:
|
||||
err = err_msg
|
||||
ret_dict['err'] = err_msg
|
||||
else:
|
||||
"""Choose different approach when dealing with different type of file."""
|
||||
|
||||
@@ -661,7 +662,8 @@ def view_shared_file(request, token):
|
||||
|
||||
accessible_repos = get_unencry_rw_repos_by_user(request.user.username)
|
||||
save_to_link = reverse('save_shared_link') + '?t=' + token
|
||||
|
||||
traffic_over_limit = user_traffic_over_limit(shared_by)
|
||||
|
||||
return render_to_response('shared_file_view.html', {
|
||||
'repo': repo,
|
||||
'obj_id': obj_id,
|
||||
@@ -683,6 +685,7 @@ def view_shared_file(request, token):
|
||||
'use_pdfjs':USE_PDFJS,
|
||||
'accessible_repos': accessible_repos,
|
||||
'save_to_link': save_to_link,
|
||||
'traffic_over_limit': traffic_over_limit,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def view_file_via_shared_dir(request, token):
|
||||
@@ -768,7 +771,9 @@ def view_file_via_shared_dir(request, token):
|
||||
(repo.id, shared_by, obj_id, file_size))
|
||||
except SearpcError, e:
|
||||
logger.error('Error when sending file-view message: %s' % str(e))
|
||||
|
||||
|
||||
traffic_over_limit = user_traffic_over_limit(shared_by)
|
||||
|
||||
return render_to_response('shared_file_view.html', {
|
||||
'repo': repo,
|
||||
'obj_id': obj_id,
|
||||
@@ -792,6 +797,7 @@ def view_file_via_shared_dir(request, token):
|
||||
'zipped': zipped,
|
||||
'img_prev': img_prev,
|
||||
'img_next': img_next,
|
||||
'traffic_over_limit': traffic_over_limit,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def file_edit_submit(request, repo_id):
|
||||
|
Reference in New Issue
Block a user