1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-20 19:08:21 +00:00

Merge pull request #859 from haiwen/license

[sys-admin] check seafile license expiration
This commit is contained in:
llj
2015-10-24 18:27:20 +08:00
4 changed files with 67 additions and 1 deletions

View File

@@ -316,6 +316,12 @@ p { margin:0.5em 0; }
.alc { text-align: center;} .alc { text-align: center;}
.cspt { cursor:pointer; } .cspt { cursor:pointer; }
.pos-rel { position:relative; } .pos-rel { position:relative; }
.top-tip {
background:#fddaa4;
color:#1f0600;
text-align:center;
margin:0 0 15px;
}
/** for input, textarea in form **/ /* e.g repo-create */ /** for input, textarea in form **/ /* e.g repo-create */
.input, .textarea { .input, .textarea {
width:260px; width:260px;

View File

@@ -81,10 +81,33 @@ $(function(){
if (data['need_update']) { if (data['need_update']) {
var tip = "{% trans "A new server version %(v)s is available." %}"; var tip = "{% trans "A new server version %(v)s is available." %}";
tip = tip.replace('%(v)s', data['new_version']); tip = tip.replace('%(v)s', data['new_version']);
$('#title-panel').html('<p class="alc" style="background:#fddaa4;color:#1f0600;padding:3px 0;margin:0 0 15px;">' + tip + '</p>').removeClass('hide'); $('#title-panel').append('<p>' + tip + '</p>').addClass('top-tip').removeClass('hide');
} }
} }
}); });
{% if is_pro %}
// check if seafile license expired
$.ajax({
url: "{% url 'sys_check_license' %}",
dataType: 'json',
cache: false,
success: function(data) {
var tip;
if (data['already_expired']) {
tip = "Your license expired on %(date)s.";
} else if (data['to_be_expired']) {
tip = "Your license will expire on %(date)s.";
}
if (data['already_expired'] || data['to_be_expired']) {
tip = tip.replace('%(date)s', data['expiration_date']);
$('#title-panel').append('<p>' + tip + '</p>').addClass('top-tip').removeClass('hide');
}
}
});
{% endif %}
}); });
$('#add-user-btn').click(function() { $('#add-user-btn').click(function() {

View File

@@ -236,6 +236,7 @@ urlpatterns = patterns(
url(r'^sys/uploadlink/remove/$', sys_upload_link_remove, name='sys_upload_link_remove'), url(r'^sys/uploadlink/remove/$', sys_upload_link_remove, name='sys_upload_link_remove'),
url(r'^sys/notificationadmin/', notification_list, name='notification_list'), url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
url(r'^sys/sudo/', sys_sudo_mode, name='sys_sudo_mode'), url(r'^sys/sudo/', sys_sudo_mode, name='sys_sudo_mode'),
url(r'^sys/check-license/', sys_check_license, name='sys_check_license'),
url(r'^useradmin/add/$', user_add, name="user_add"), url(r'^useradmin/add/$', user_add, name="user_add"),
url(r'^useradmin/remove/(?P<email>[^/]+)/$', user_remove, name="user_remove"), url(r'^useradmin/remove/(?P<email>[^/]+)/$', user_remove, name="user_remove"),
url(r'^useradmin/removetrial/(?P<user_or_org>[^/]+)/$', remove_trial, name="remove_trial"), url(r'^useradmin/removetrial/(?P<user_or_org>[^/]+)/$', remove_trial, name="remove_trial"),

View File

@@ -8,6 +8,7 @@ import re
import datetime import datetime
import stat import stat
import csv, chardet, StringIO import csv, chardet, StringIO
import time
from constance import config from constance import config
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
@@ -2041,3 +2042,38 @@ def sys_settings(request):
return render_to_response('sysadmin/settings.html', { return render_to_response('sysadmin/settings.html', {
'config_dict': config_dict, 'config_dict': config_dict,
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
@login_required_ajax
@sys_staff_required
def sys_check_license(request):
"""Check seafile license expiration.
"""
if not is_pro_version():
raise Http404
content_type = 'application/json; charset=utf-8'
result = {}
license_file = os.path.join(settings.PROJECT_ROOT, '../../seafile-license.txt')
license_dict = parse_license(license_file)
if license_dict:
try:
expiration = license_dict['Expiration']
except KeyError as e:
logger.error(e)
result['error'] = str(e)
return HttpResponse(json.dumps(result), status=500, content_type=content_type)
struct_time = datetime.datetime.strptime(expiration, "%Y-%m-%d")
expiration_timestamp = time.mktime(struct_time.timetuple())
if time.time() > expiration_timestamp:
# already expired
result['already_expired'] = True
elif time.time() + 30 * 24 * 60 * 60 > expiration_timestamp:
# will be expired in 30 days
result['to_be_expired'] = True
result['expiration_date'] = expiration
return HttpResponse(json.dumps(result), content_type=content_type)