1
0
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:
zhengxie
2015-08-07 16:08:45 +08:00
committed by lian
parent 82113cddba
commit 49fb5ca174
7 changed files with 77 additions and 11 deletions

View File

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

View File

@@ -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')),
}

View File

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

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

View File

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

View File

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

View File

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