def repo_remove(request, repo_id): if not request.is_ajax(): raise Http404 content_type = 'application/json; charset=utf-8' result = {} repo = get_repo(repo_id) if not repo: result['error'] = _(u'Library does not exist') return HttpResponse(json.dumps(result), status=400, content_type=content_type) user = request.user.username org, base_template = check_and_get_org_by_repo(repo_id, user) if org: # Remove repo in org context, only repo owner or org staff can # perform this operation. if request.user.is_staff or org.is_staff or \ is_org_repo_owner(org.org_id, repo_id, user): # Must get related useres before remove the repo usernames = get_related_users_by_org_repo(org.org_id, repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send( sender=None, org_id=org.org_id, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: # Remove repo in personal context, only repo owner or site staff can # perform this operation. if validate_owner(request, repo_id) or request.user.is_staff: usernames = get_related_users_by_repo(repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send( sender=None, org_id=-1, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type)
def repo_remove(request, repo_id): if not request.is_ajax(): raise Http404 content_type = 'application/json; charset=utf-8' result = {} if get_system_default_repo_id() == repo_id: result['error'] = _(u'System library can not be deleted.') return HttpResponse(json.dumps(result), status=403, content_type=content_type) repo = get_repo(repo_id) if not repo: result['error'] = _(u'Library does not exist') return HttpResponse(json.dumps(result), status=400, content_type=content_type) user = request.user.username org, base_template = check_and_get_org_by_repo(repo_id, user) if org: # Remove repo in org context, only repo owner or org staff can # perform this operation. if request.user.is_staff or org.is_staff or \ is_org_repo_owner(org.org_id, repo_id, user): # Must get related useres before remove the repo usernames = get_related_users_by_org_repo(org.org_id, repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send(sender=None, org_id=org.org_id, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: # Remove repo in personal context, only repo owner or site staff can # perform this operation. if validate_owner(request, repo_id) or request.user.is_staff: usernames = get_related_users_by_repo(repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send(sender=None, org_id=-1, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type)
def is_repo_owner(self, username, repo_id): if self.request.user.org: return is_org_repo_owner(self.request.user.org['org_id'], repo_id, username) else: return is_repo_owner(username, repo_id)
def org_personal(request, url_prefix): """ Show org personal page. """ org = get_user_current_org(request.user.username, url_prefix) if not org: return HttpResponseRedirect(reverse(myhome)) user = request.user.username # Org repos that I own owned_repos = seafserv_threaded_rpc.list_org_repos_by_owner(org.org_id, user) calculate_repo_last_modify(owned_repos) owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) # Org groups user created groups = get_org_groups_by_user(org.org_id, user) # Org repos others shared to me in_repos = list_org_shared_repos(org.org_id, user, "to_email", -1, -1) # For each org group I joined... for grp in groups: # Get org group repos, and for each group repos... for r_id in get_org_group_repoids(org.org_id, grp.id): # No need to list my own repo if is_org_repo_owner(org.org_id, r_id, user): continue # Convert repo properties due to the different collumns in Repo # and SharedRepo r = get_repo(r_id) if not r: continue r.repo_id = r.id r.repo_name = r.name r.repo_desc = r.desc last_commit = get_commits(r_id, 0, 1)[0] r.last_modified = last_commit.ctime if last_commit else 0 r.share_type = "group" r.user = get_org_repo_owner(r_id) r.user_perm = check_permission(r_id, user) in_repos.append(r) in_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified)) # All org groups used in auto complete. org_groups = get_org_groups(org.org_id, -1, -1) # Org members used in auto complete contacts = [] org_members = get_org_users_by_url_prefix(org.url_prefix, 0, MAX_INT) for m in org_members: if m.email == user: # shouldn' show my'email in auto complete continue m.contact_email = m.email contacts.append(m) # Get nickname if not Profile.objects.filter(user=request.user.username): nickname = "" else: profile = Profile.objects.filter(user=request.user.username)[0] nickname = profile.nickname # events if EVENTS_ENABLED: events = True else: events = False quota_usage = seafserv_threaded_rpc.get_org_user_quota_usage(org.org_id, user) starred_files = get_starred_files(user, org_id=org.org_id) return render_to_response( "organizations/personal.html", { "owned_repos": owned_repos, "in_repos": in_repos, "org": org, "groups": groups, "org_groups": org_groups, "contacts": contacts, "create_shared_repo": False, "allow_public_share": True, "nickname": nickname, "events": events, "quota_usage": quota_usage, "starred_files": starred_files, }, context_instance=RequestContext(request), )