mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-21 11:27:18 +00:00
Add admin settings page to edit some configurations. Install django constance by pip install 'django-constance[database]'
This commit is contained in:
@@ -6,3 +6,4 @@ Django>=1.5.8,<1.6
|
|||||||
Djblets==0.6.14
|
Djblets==0.6.14
|
||||||
django-compressor==1.4
|
django-compressor==1.4
|
||||||
django-statici18n==1.1.2
|
django-statici18n==1.1.2
|
||||||
|
django-constance[database]
|
||||||
|
@@ -7,7 +7,7 @@ import re
|
|||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
|
|
||||||
from seaserv import FILE_SERVER_ROOT, FILE_SERVER_PORT
|
from seaserv import FILE_SERVER_ROOT, FILE_SERVER_PORT, SERVICE_URL
|
||||||
|
|
||||||
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), os.pardir)
|
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), os.pardir)
|
||||||
|
|
||||||
@@ -192,6 +192,8 @@ INSTALLED_APPS = (
|
|||||||
'captcha',
|
'captcha',
|
||||||
'compressor',
|
'compressor',
|
||||||
'statici18n',
|
'statici18n',
|
||||||
|
'constance',
|
||||||
|
'constance.backends.database',
|
||||||
|
|
||||||
'seahub.api2',
|
'seahub.api2',
|
||||||
'seahub.avatar',
|
'seahub.avatar',
|
||||||
@@ -209,6 +211,8 @@ INSTALLED_APPS = (
|
|||||||
'seahub.password_session',
|
'seahub.password_session',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
|
||||||
|
CONSTANCE_DATABASE_CACHE_BACKEND = 'default'
|
||||||
|
|
||||||
AUTHENTICATION_BACKENDS = (
|
AUTHENTICATION_BACKENDS = (
|
||||||
'seahub.base.accounts.AuthBackend',
|
'seahub.base.accounts.AuthBackend',
|
||||||
@@ -603,3 +607,12 @@ if 'win32' in sys.platform:
|
|||||||
LOGIN_URL = SITE_ROOT + 'accounts/login'
|
LOGIN_URL = SITE_ROOT + 'accounts/login'
|
||||||
|
|
||||||
INNER_FILE_SERVER_ROOT = 'http://127.0.0.1:' + FILE_SERVER_PORT
|
INNER_FILE_SERVER_ROOT = 'http://127.0.0.1:' + FILE_SERVER_PORT
|
||||||
|
|
||||||
|
CONSTANCE_CONFIG = {
|
||||||
|
'SERVICE_URL': (SERVICE_URL, gettext_noop(
|
||||||
|
"This is outside URL for Seahub(Seafile Web).The domain part (i.e., "
|
||||||
|
"www.example.com) will be used in generating share links and "
|
||||||
|
"download/upload file via web. Note: Outside URL means if you use "
|
||||||
|
"Nginx, it should be the Nginx's address")),
|
||||||
|
'FILE_SERVER_ROOT': (FILE_SERVER_ROOT, gettext_noop('URL for seafile fileserver')),
|
||||||
|
}
|
||||||
|
@@ -8,6 +8,9 @@
|
|||||||
<li class="tab {% block cur_info %}{% endblock %}">
|
<li class="tab {% block cur_info %}{% endblock %}">
|
||||||
<a href="{{ SITE_ROOT }}sys/info/"><span class="sf2-icon-wrench"></span>{% trans "Info" %}</a>
|
<a href="{{ SITE_ROOT }}sys/info/"><span class="sf2-icon-wrench"></span>{% trans "Info" %}</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="tab {% block cur_settings %}{% endblock %}">
|
||||||
|
<a href="{% url "sys_settings" %}" class="admin">{% trans "Settings" %}</a>
|
||||||
|
</li>
|
||||||
<li class="tab {% block cur_repo %}{% endblock %}">
|
<li class="tab {% block cur_repo %}{% endblock %}">
|
||||||
<a href="{{ SITE_ROOT }}sys/seafadmin/"><span class="sf2-icon-library"></span>{% trans "Libraries" %}</a>
|
<a href="{{ SITE_ROOT }}sys/seafadmin/"><span class="sf2-icon-library"></span>{% trans "Libraries" %}</a>
|
||||||
</li>
|
</li>
|
||||||
|
21
seahub/templates/sysadmin/settings.html
Normal file
21
seahub/templates/sysadmin/settings.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{% extends "sysadmin/base.html" %}
|
||||||
|
{% load seahub_tags i18n %}
|
||||||
|
|
||||||
|
{% block cur_settings %}tab-cur{% endblock %}
|
||||||
|
|
||||||
|
{% block right_panel %}
|
||||||
|
<h3 class="hd">{% trans "Settings" %}</h3>
|
||||||
|
|
||||||
|
<form method="post" action=".">{% csrf_token %}
|
||||||
|
{% for k,v in config_dict.items %}
|
||||||
|
<label>{{ k }}</label>
|
||||||
|
<input type="text" name="{{ k }}" value="{{v.0}}" class="input" />
|
||||||
|
<span>*{{v.1}}</span>
|
||||||
|
<br>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<input type="submit" value="{% trans "Submit" %}" />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
@@ -205,6 +205,7 @@ urlpatterns = patterns(
|
|||||||
|
|
||||||
### system admin ###
|
### system admin ###
|
||||||
url(r'^sys/info/$', sys_info, name='sys_info'),
|
url(r'^sys/info/$', sys_info, name='sys_info'),
|
||||||
|
url(r'^sys/settings/$', sys_settings, name='sys_settings'),
|
||||||
url(r'^sys/seafadmin/$', sys_repo_admin, name='sys_repo_admin'),
|
url(r'^sys/seafadmin/$', sys_repo_admin, name='sys_repo_admin'),
|
||||||
url(r'^sys/seafadmin/system/$', sys_list_system, name='sys_list_system'),
|
url(r'^sys/seafadmin/system/$', sys_list_system, name='sys_list_system'),
|
||||||
url(r'^sys/seafadmin/repo-trash/$', sys_repo_trash, name='sys_repo_trash'),
|
url(r'^sys/seafadmin/repo-trash/$', sys_repo_trash, name='sys_repo_trash'),
|
||||||
|
@@ -11,13 +11,12 @@ import locale
|
|||||||
import ConfigParser
|
import ConfigParser
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import contextlib
|
import contextlib
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from urlparse import urlparse, urljoin
|
from urlparse import urlparse, urljoin
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import ccnet
|
import ccnet
|
||||||
|
from constance import config
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.core.mail import EmailMessage
|
from django.core.mail import EmailMessage
|
||||||
@@ -36,7 +35,7 @@ from seaserv import seafile_api, send_message, seafserv_rpc, \
|
|||||||
CCNET_SERVER_ADDR, CCNET_SERVER_PORT, get_org_by_id, is_org_staff, \
|
CCNET_SERVER_ADDR, CCNET_SERVER_PORT, get_org_by_id, is_org_staff, \
|
||||||
get_org_id_by_group, get_personal_groups_by_user, \
|
get_org_id_by_group, get_personal_groups_by_user, \
|
||||||
list_personal_repos_by_owner, get_group_repos, \
|
list_personal_repos_by_owner, get_group_repos, \
|
||||||
list_inner_pub_repos, CCNET_CONF_PATH, SERVICE_URL
|
list_inner_pub_repos, CCNET_CONF_PATH
|
||||||
import seahub.settings
|
import seahub.settings
|
||||||
from seahub.settings import SITE_NAME, MEDIA_URL, LOGO_PATH, \
|
from seahub.settings import SITE_NAME, MEDIA_URL, LOGO_PATH, \
|
||||||
USER_PASSWORD_STRENGTH_LEVEL, USER_PASSWORD_MIN_LENGTH
|
USER_PASSWORD_STRENGTH_LEVEL, USER_PASSWORD_MIN_LENGTH
|
||||||
@@ -167,12 +166,7 @@ def get_fileserver_root():
|
|||||||
Returns:
|
Returns:
|
||||||
Constructed fileserver root.
|
Constructed fileserver root.
|
||||||
"""
|
"""
|
||||||
|
return config.FILE_SERVER_ROOT
|
||||||
from seahub.settings import FILE_SERVER_ROOT
|
|
||||||
|
|
||||||
assert FILE_SERVER_ROOT is not None, "SERVICE_URL is not set in ccnet.conf."
|
|
||||||
|
|
||||||
return FILE_SERVER_ROOT
|
|
||||||
|
|
||||||
def get_inner_fileserver_root():
|
def get_inner_fileserver_root():
|
||||||
"""Construct inner seafile fileserver address and port.
|
"""Construct inner seafile fileserver address and port.
|
||||||
@@ -725,7 +719,7 @@ def calc_file_path_hash(path, bits=12):
|
|||||||
def get_service_url():
|
def get_service_url():
|
||||||
"""Get service url from seaserv.
|
"""Get service url from seaserv.
|
||||||
"""
|
"""
|
||||||
return SERVICE_URL
|
return config.SERVICE_URL
|
||||||
|
|
||||||
def get_server_id():
|
def get_server_id():
|
||||||
"""Get server id from seaserv.
|
"""Get server id from seaserv.
|
||||||
|
@@ -1656,3 +1656,36 @@ def sys_sudo_mode(request):
|
|||||||
'enable_shib_login': enable_shib_login,
|
'enable_shib_login': enable_shib_login,
|
||||||
},
|
},
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@sys_staff_required
|
||||||
|
def sys_settings(request):
|
||||||
|
"""List and change seahub settings in admin panel.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
- `request`:
|
||||||
|
"""
|
||||||
|
from constance import config
|
||||||
|
from seahub.settings import CONSTANCE_CONFIG
|
||||||
|
|
||||||
|
if request.method == "POST":
|
||||||
|
for k in request.POST.keys():
|
||||||
|
if k == 'csrfmiddlewaretoken':
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
setattr(config, k, request.POST.get(k))
|
||||||
|
except AttributeError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
messages.success(request, _('Success'))
|
||||||
|
return HttpResponseRedirect(reverse('sys_settings'))
|
||||||
|
|
||||||
|
config_dict = {}
|
||||||
|
for k in dir(config):
|
||||||
|
val = getattr(config, k)
|
||||||
|
help_text = _(CONSTANCE_CONFIG[k][1])
|
||||||
|
config_dict[k] = (val, help_text)
|
||||||
|
|
||||||
|
return render_to_response('sysadmin/settings.html', {
|
||||||
|
'config_dict': config_dict,
|
||||||
|
}, context_instance=RequestContext(request))
|
||||||
|
Reference in New Issue
Block a user