예제 #1
0
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)
예제 #2
0
파일: ajax.py 프로젝트: Pablohn26/seahub
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)
예제 #3
0
파일: repo.py 프로젝트: orymate/seahub
 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)
예제 #4
0
 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)
예제 #5
0
파일: views.py 프로젝트: weixu8/seahub
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),
    )