diff --git a/settings.py b/settings.py
index 296ac92f15..f357451635 100644
--- a/settings.py
+++ b/settings.py
@@ -145,3 +145,6 @@ LOGIN_URL = SITE_ROOT + 'accounts/login'
# profile
#AUTH_PROFILE_MODULE = "profile.UserProfile"
+
+# seafile httpserver address and port
+HTTP_SERVER_ROOT = "http://localhost:8082"
diff --git a/templates/myhome.html b/templates/myhome.html
index b3eb93b425..f3af98e25f 100644
--- a/templates/myhome.html
+++ b/templates/myhome.html
@@ -24,7 +24,14 @@
{{ repo.props.name }} |
{{ repo.props.id }} |
{{ repo.props.desc }} |
- |
+
+ {% if repo.is_public %}
+ 查看目录
+ {% else %}
+ 查看目录
+ {% endif %}
+ 删除
+ |
{% endfor %}
@@ -47,7 +54,14 @@
{{ repo.props.name }} |
{{ repo.props.id }} |
{{ repo.props.desc }} |
- |
+
+ {% if repo.is_public %}
+ 查看目录
+ {% else %}
+ 查看目录
+ {% endif %}
+
+ |
{% endfor %}
diff --git a/templates/repo.html b/templates/repo.html
index 86cbb24d7e..8d316e4f9b 100644
--- a/templates/repo.html
+++ b/templates/repo.html
@@ -36,6 +36,18 @@
只有同步目录拥有者可见 |
{% endif %}
+
+ 公共访问 |
+ {% if is_owner %}
+ {% if is_public %}
+ 允许任何人查看该同步目录 |
+ {% else %}
+ 允许任何人查看该同步目录 |
+ {% endif %}
+ {% else %}
+ 只有拥有者可选 |
+ {% endif %}
+
@@ -98,5 +110,12 @@ $('#token-show-switch').click(function() {
}
});
$('#tabs').tabs({cookie: {expires: 1}});
+$("#public-access-ckbx").click(function() {
+ if($("#public-access-ckbx").get(0).checked) {
+ location.href = "{{ SITE_ROOT }}repo/setpublic/{{ repo.props.id }}/";
+ } else {
+ location.href = "{{ SITE_ROOT }}repo/unsetpublic/{{ repo.props.id }}/";
+ }
+})
{% endblock %}
diff --git a/templates/repo_dir.html b/templates/repo_dir.html
new file mode 100644
index 0000000000..e8fcdcf445
--- /dev/null
+++ b/templates/repo_dir.html
@@ -0,0 +1,37 @@
+{% extends "myhome_base.html" %}
+
+{% block nav_home_class %}class="cur"{% endblock %}
+{% block left_panel %}
+已用空间
+{{ quota_usage|filesizeformat }} / 4 GB
+{% endblock %}
+
+
+{% block right_panel %}
+
+
+目录列表
+{% if dirs %}
+
+
+ 名字 |
+ 操作 |
+
+
+ {% for dirent in dirs %}
+
+ {% if dirent.is_dir %}
+ {{ dirent.props.obj_name }} |
+ |
+ {% else %}
+ {{ dirent.props.obj_name }} |
+ 下载 |
+ {% endif %}
+
+ {% endfor %}
+
+{% else %}
+暂无
+{% endif %}
+
+{% endblock %}
diff --git a/urls.py b/urls.py
index 61a4bd6c53..09aad49097 100644
--- a/urls.py
+++ b/urls.py
@@ -5,7 +5,8 @@ from django.views.generic.simple import direct_to_template
from seahub.views import root, peers, groups, myhome, \
repo, group, modify_token, remove_repo, seafadmin, useradmin, \
role_add, role_remove, activate_user, user_add, user_remove, \
- ownerhome, remove_fetched_repo, user_info
+ ownerhome, remove_fetched_repo, repo_set_public, repo_unset_public, \
+ repo_list_dir
# Uncomment the next two lines to enable the admin:
#from django.contrib import admin
@@ -31,7 +32,10 @@ urlpatterns = patterns('',
(r'^repo/(?P[^/]+)/$', repo),
(r'^repo/token/modify/(?P[^/]+)/$', modify_token),
(r'^repo/remove/(?P[^/]+)/$', remove_repo),
- (r'^repo/removefetched/(?P[^/]+)/(?P[^/]+)/$', remove_fetched_repo),
+ (r'^repo/removefetched/(?P[^/]+)/(?P[^/]+)/$', remove_fetched_repo),
+ (r'^repo/setpublic/(?P[^/]+)/$', repo_set_public),
+ (r'^repo/unsetpublic/(?P[^/]+)/$', repo_unset_public),
+ (r'^repo/dir/(?P[^/]+)/$', repo_list_dir),
(r'^seafadmin/$', seafadmin),
url(r'^useradmin/$', useradmin, name='useradmin'),
diff --git a/views.py b/views.py
index d6f1451b00..2ae5b3e79d 100644
--- a/views.py
+++ b/views.py
@@ -10,13 +10,16 @@ from auth.forms import AuthenticationForm, PasswordResetForm, SetPasswordForm, P
from seaserv import cclient, ccnet_rpc, get_groups, get_users, get_repos, \
get_repo, get_commits, get_branches, \
- seafserv_threaded_rpc, get_binding_userids, get_ccnetuser
+ seafserv_threaded_rpc, seafserv_rpc, get_binding_userids, get_ccnetuser
from seahub.share.models import GroupShare, UserShare
from seahub.share.forms import GroupAddRepoForm
from seahub.base.accounts import CcnetUser
from forms import AddUserForm
+import stat
+import time
+import settings
@login_required
def root(request):
@@ -123,9 +126,15 @@ def repo(request, repo_id):
token = ""
is_owner = False
- if request.user.is_authenticated() and validate_owner(request, repo_id):
- is_owner = True
- token = seafserv_threaded_rpc.get_repo_token(repo_id)
+
+ if request.user.is_authenticated():
+ if validate_owner(request, repo_id):
+ is_owner = True
+ token = seafserv_threaded_rpc.get_repo_token(repo_id)
+ if seafserv_threaded_rpc.repo_is_public(repo_id) > 0:
+ is_public = True
+ else:
+ is_public = False
return render_to_response('repo.html', {
"repo": repo,
@@ -137,6 +146,7 @@ def repo(request, repo_id):
'page_next': page_next,
"branches": branches,
"is_owner": is_owner,
+ "is_public": is_public,
"token": token,
}, context_instance=RequestContext(request))
@@ -195,6 +205,18 @@ def myhome(request):
except:
pass
+ for repo in owned_repos:
+ if seafserv_threaded_rpc.repo_is_public(repo.props.id):
+ repo.is_public = True
+ else:
+ repo.is_public = False
+
+ for repo in fetched_repos:
+ if seafserv_threaded_rpc.repo_is_public(repo.props.id):
+ repo.is_public = True
+ else:
+ repo.is_public = False
+
return render_to_response('myhome.html', {
"owned_repos": owned_repos,
"quota_usage": quota_usage,
@@ -224,7 +246,60 @@ def ownerhome(request, owner_name):
"owner": owner_name,
}, context_instance=RequestContext(request))
+@login_required
+def repo_set_public(request, repo_id):
+ if repo_id:
+ seafserv_threaded_rpc.repo_set_public(repo_id)
+
+ return HttpResponseRedirect(request.META['HTTP_REFERER'])
+@login_required
+def repo_unset_public(request, repo_id):
+ if repo_id:
+ seafserv_threaded_rpc.repo_unset_public(repo_id)
+
+ return HttpResponseRedirect(request.META['HTTP_REFERER'])
+
+@login_required
+def repo_list_dir(request, repo_id):
+ if repo_id:
+ # Not public repo, go to 404 page
+ if not seafserv_threaded_rpc.repo_is_public(repo_id):
+ raise Http404
+
+ repo = seafserv_threaded_rpc.get_repo(repo_id)
+ if not request.GET.get('root_id'): # No root id..?
+ # ..use HEAD commit's root id
+ commit = seafserv_threaded_rpc.get_commit(repo.props.head_cmmt_id)
+ root_id = commit.props.root_id
+ else:
+ root_id = request.GET.get('root_id')
+ dirs = seafserv_threaded_rpc.list_dir(root_id)
+ for dirent in dirs:
+ if stat.S_ISDIR(dirent.props.mode):
+ dirent.is_dir = True
+ else:
+ dirent.is_dir = False
+
+ # Get user quota usage
+ user_id = request.user.user_id
+ if user_id:
+ quota_usage = seafserv_threaded_rpc.get_user_quota_usage(user_id)
+
+ # Get seafile http server address and port from settings.py,
+ # and cut out last '/'
+ if settings.HTTP_SERVER_ROOT[-1] == '/':
+ http_server_root = settings.HTTP_SERVER_ROOT[:-1]
+ else:
+ http_server_root = settings.HTTP_SERVER_ROOT
+ return render_to_response('repo_dir.html', {
+ "repo_id": repo_id,
+ "dirs": dirs,
+ "quota_usage": quota_usage,
+ "http_server_root": http_server_root,
+ },
+ context_instance=RequestContext(request))
+
@login_required
def mypeers(request):
cid = get_user_cid(request.user)