1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-20 10:58:33 +00:00

[sys-admin] check seafile license expiration

This commit is contained in:
lian
2015-10-24 15:53:02 +08:00
parent ce6030cdfe
commit 5d7761ee0f
3 changed files with 66 additions and 1 deletions

View File

@@ -81,10 +81,38 @@ $(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').html('<p class="alc" style="background:#fddaa4;color:#1f0600;padding:3px 0;margin:0 0 15px;"><span>' + tip + '</span></p>').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, $title_panel = $('#title-panel');
if (data['already_expired']) {
tip = "Your license is already expired in %(v)s.",
tip = tip.replace('%(v)s', data['expiration']);
} else if (data['to_be_expired']) {
tip = "Your license will be expired in %(v)s.",
tip = tip.replace('%(v)s', data['expiration']);
}
if (typeof(tip) != 'undefined') {
if ($title_panel.find('p').length) {
$title_panel.find('p').append('<br /><span>' + tip + '</span>');
} else {
$title_panel.html('<p class="alc" style="background:#fddaa4;color:#1f0600;padding:3px 0;margin:0 0 15px;"><span>' + tip + '</span></p>').removeClass('hide');
}
}
}
});
{% endif %}
}); });
$('#add-user-btn').click(function() { $('#add-user-btn').click(function() {

View File

@@ -238,6 +238,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
@@ -2030,3 +2031,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'] = expiration
return HttpResponse(json.dumps(result), content_type=content_type)