1
0
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:
zhengxie
2014-04-21 10:56:10 +08:00
5 changed files with 78 additions and 6 deletions

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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

View File

@@ -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,

View File

@@ -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):