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:
@@ -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;
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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"),
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user