def put(self, request, repo_id, format=None): """ Share a repo to users/groups/public. """ share_type = request.GET.get('share_type') user = request.GET.get('user') group_id = request.GET.get('group_id') permission = request.GET.get('permission') if permission !='rw' and permission != "r": return api_error(status.HTTP_400_BAD_REQUEST, 'Permission need to be rw or r.') if share_type == 'personal': if not is_registered_user(user) : return api_error(status.HTTP_400_BAD_REQUEST, 'User does not exist') try : from_email = seafile_api.get_repo_owner(repo_id) seafserv_threaded_rpc.add_share(repo_id, from_email, user, permission) except SearpcError, e: return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, "Searpc Error: " + e.msg)
def put(self, request, repo_id, format=None): """ Share a repo to users/groups/public. """ share_type = request.GET.get('share_type') user = request.GET.get('user') group_id = request.GET.get('group_id') permission = request.GET.get('permission') if permission != 'rw' and permission != "r": return api_error(status.HTTP_400_BAD_REQUEST, 'Permission need to be rw or r.') if share_type == 'personal': if not is_registered_user(user): return api_error(status.HTTP_400_BAD_REQUEST, 'User does not exist') try: from_email = seafile_api.get_repo_owner(repo_id) seafserv_threaded_rpc.add_share(repo_id, from_email, user, permission) except SearpcError, e: return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, "Searpc Error: " + e.msg)
def share_repo(request): """ Handle repo share request """ if request.method != 'POST': raise Http404 form = RepoShareForm(request.POST) if not form.is_valid(): # TODO: may display error msg on form raise Http404 email_or_group = form.cleaned_data['email_or_group'] repo_id = form.cleaned_data['repo_id'] permission = form.cleaned_data['permission'] from_email = request.user.username repo = get_repo(repo_id) if not repo: raise Http404 is_encrypted = True if repo.encrypted else False # Test whether user is the repo owner. if not validate_owner(request, repo_id): return render_permission_error(request, _(u'Only the owner of the library has permission to share it.')) to_email_list = string2list(email_or_group) for to_email in to_email_list: if to_email == 'all': ''' Share to public ''' # ignore 'all' if we're running in cloud mode if not CLOUD_MODE: try: seafserv_threaded_rpc.set_inner_pub_repo(repo_id, permission) except: msg = _(u'Failed to share to all members') message.add_message(request, message.ERROR, msg) continue msg = _(u'Shared to all members successfully, go check it at <a href="%s">Share</a>.') % \ (reverse('share_admin')) messages.add_message(request, messages.INFO, msg) elif to_email.find('@') == -1: ''' Share repo to group ''' # TODO: if we know group id, then we can simplly call group_share_repo group_name = to_email # get all personal groups groups = get_personal_groups(-1, -1) find = False for group in groups: # for every group that user joined, if group name matchs, # then has find the group if group.props.group_name == group_name: from seahub.group.views import group_share_repo group_share_repo(request, repo_id, int(group.props.id), from_email, permission) find = True msg = _(u'Shared to %(group)s successfully,go check it at <a href="%(share)s">Share</a>.') % \ {'group':group_name, 'share':reverse('share_admin')} messages.add_message(request, messages.INFO, msg) break if not find: msg = _(u'Failed to share to %s,as it does not exists.') % group_name messages.add_message(request, messages.ERROR, msg) else: ''' Share repo to user ''' # Add email to contacts. mail_sended.send(sender=None, user=request.user.username, email=to_email) if not is_registered_user(to_email): # Generate shared link and send mail if user has not registered. # kwargs = {'repo_id': repo_id, # 'repo_owner': from_email, # 'anon_email': to_email, # 'is_encrypted': is_encrypted, # } # anonymous_share(request, **kwargs) msg = _(u'Failed to share to %s, as the email is not registered.') % to_email messages.add_message(request, messages.ERROR, msg) continue else: # Record share info to db. try: seafserv_threaded_rpc.add_share(repo_id, from_email, to_email, permission) except SearpcError, e: msg = _(u'Failed to share to %s .') % to_email messages.add_message(request, messages.ERROR, msg) continue msg = _(u'Shared to %(email)s successfully,go check it at <a href="%(share)s">Share</a>.') % \ {'email':to_email, 'share':reverse('share_admin')} messages.add_message(request, messages.INFO, msg)
def org_repo_share(request, url_prefix): """ Share org repo to members or groups in current org. """ if request.method != "POST": raise Http404 org = get_user_current_org(request.user.username, url_prefix) if not org: return HttpResponseRedirect(reverse(myhome)) form = RepoShareForm(request.POST) if not form.is_valid(): # TODO: may display error msg on form raise Http404 email_or_group = form.cleaned_data["email_or_group"] repo_id = form.cleaned_data["repo_id"] permission = form.cleaned_data["permission"] from_email = request.user.username # Test whether user is the repo owner if not validate_org_repo_owner(org.org_id, repo_id, request.user.username): return render_permission_error( request, _(u"Only the owner of this library has permission to share it."), extra_ctx={"org": org, "base_template": "org_base.html"}, ) share_to_list = string2list(email_or_group) for share_to in share_to_list: if share_to == "all": """ Share to public """ try: seafserv_threaded_rpc.set_org_inner_pub_repo(org.org_id, repo_id, permission) except: msg = _(u"Failed to share to all members") messages.add_message(request, messages.ERROR, msg) continue msg = _(u'Shared to all members successfully, you can go check it at <a href="%s">Share</a>.') % ( reverse("org_shareadmin", args=[org.url_prefix]) ) messages.add_message(request, messages.INFO, msg) elif share_to.find("@") == -1: """ Share repo to group """ # TODO: if we know group id, then we can simplly call group_share_repo group_name = share_to # Get all org groups. groups = get_org_groups(org.org_id, -1, -1) find = False for group in groups: # for every group that user joined, if group name and # group creator matchs, then has finded the group if group.props.group_name == group_name: seafserv_threaded_rpc.add_org_group_repo(repo_id, org.org_id, group.id, from_email, permission) find = True msg = _( u'Shared to %(group)s successfully,you can go check it at <a href="%(share)s">Share</a>.' ) % {"group": group_name, "share": reverse("org_shareadmin", args=[org.url_prefix])} messages.add_message(request, messages.INFO, msg) break if not find: msg = _(u"Failed to share to %s.") % group_name messages.add_message(request, messages.ERROR, msg) else: """ Share repo to user """ # Test whether share_to is in this org if not org_user_exists(org.org_id, share_to): msg = _(u"Failed to share to %s: this user does not exist in the organization.") % share_to messages.add_message(request, messages.ERROR, msg) continue # Record share info to db. try: seafserv_threaded_rpc.add_share(repo_id, from_email, share_to, permission) msg = _( u'Shared to %(share_to)s successfully,you can go check it at <a href="%(share)s">Share</a>.' ) % {"share_to": share_to, "share": reverse("org_shareadmin", args=[org.url_prefix])} messages.add_message(request, messages.INFO, msg) except SearpcError, e: msg = _(u"Failed to share to %s.") % share_to messages.add_message(request, messages.ERROR, msg) continue