def sub_repo(request, repo_id): ''' check if a dir has a corresponding sub_repo if it does not have, create one ''' if not request.is_ajax(): raise Http404 content_type = 'application/json; charset=utf-8' result = {} path = request.GET.get('p') name = request.GET.get('name') if not (path and name): result['error'] = _('Argument missing') return HttpResponse(json.dumps(result), status=400, content_type=content_type) username = request.user.username # check if the sub-lib exist try: sub_repo = seafile_api.get_virtual_repo(repo_id, path, username) except SearpcError, e: result['error'] = e.msg return HttpResponse(json.dumps(result), status=500, content_type=content_type)
def format_repo_share_msg(self, notice): d = json.loads(notice.detail) repo_id = d['repo_id'] repo = seafile_api.get_repo(repo_id) path = d['path'] org_id = d.get('org_id', None) if path == '/': shared_type = 'library' else: shared_type = 'folder' if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) repo_url = reverse('lib_view', args=[repo_id, repo.name, '']) notice.repo_url = repo_url notice.notice_from = escape(email2nickname(d['share_from'])) notice.repo_name = repo.name notice.avatar_src = self.get_avatar_src(d['share_from']) notice.shared_type = shared_type return notice
def format_repo_share_to_group_msg(self, notice): d = json.loads(notice.detail) repo_id = d['repo_id'] repo = seafile_api.get_repo(repo_id) group_id = d['group_id'] group = ccnet_api.get_group(group_id) org_id = d.get('org_id', None) path = d['path'] if path == '/': shared_type = 'library' else: shared_type = 'folder' if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) repo_url = reverse('lib_view', args=[repo.id, repo.name, '']) notice.repo_url = repo_url notice.notice_from = escape(email2nickname(d['share_from'])) notice.repo_name = repo.name notice.avatar_src = self.get_avatar_src(d['share_from']) notice.group_url = reverse('group', args=[group.id]) notice.group_name = group.group_name notice.shared_type = shared_type return notice
def format_repo_share_msg(self, notice): d = json.loads(notice.detail) repo_id = d['repo_id'] repo = seafile_api.get_repo(repo_id) path = d['path'] org_id = d.get('org_id', None) if path == '/': shared_type = 'library' else: shared_type = 'folder' if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) notice.repo_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % { 'repo_id': repo_id, 'path': '' } notice.notice_from = escape(email2nickname(d['share_from'])) notice.repo_name = repo.name notice.avatar_src = self.get_avatar_src(d['share_from']) notice.shared_type = shared_type return notice
def format_repo_share_to_group_msg(self): """ Arguments: - `self`: """ try: d = json.loads(self.detail) except Exception as e: logger.error(e) return _(u"Internal error") share_from = email2nickname(d['share_from']) repo_id = d['repo_id'] group_id = d['group_id'] path = d.get('path', '/') org_id = d.get('org_id', None) repo = None try: group = ccnet_api.get_group(group_id) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) except Exception as e: logger.error(e) return None if not repo or not group: self.delete() return None if path == '/': tmpl = 'notifications/notice_msg/repo_share_to_group_msg.html' else: tmpl = 'notifications/notice_msg/folder_share_to_group_msg.html' msg = render_to_string( tmpl, { 'user': share_from, 'lib_url': HASH_URLS["VIEW_COMMON_LIB_DIR"] % { 'repo_id': repo.id, 'path': '' }, 'lib_name': repo.name, 'group_url': HASH_URLS['GROUP_INFO'] % { 'group_id': group.id }, 'group_name': group.group_name, }) return msg
def format_repo_share_to_group_msg(self): """ Arguments: - `self`: """ try: d = json.loads(self.detail) except Exception as e: logger.error(e) return _("Internal Server Error") share_from = email2nickname(d['share_from']) repo_id = d['repo_id'] group_id = d['group_id'] path = d.get('path', '/') org_id = d.get('org_id', None) repo = None try: group = ccnet_api.get_group(group_id) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) except Exception as e: logger.error(e) return None if not repo or not group: self.delete() return None if path == '/': tmpl = 'notifications/notice_msg/repo_share_to_group_msg.html' else: tmpl = 'notifications/notice_msg/folder_share_to_group_msg.html' lib_url = reverse('lib_view', args=[repo.id, repo.name, '']) group_url = reverse('group', args=[group.id]) msg = render_to_string( tmpl, { 'user': share_from, 'lib_url': lib_url, 'lib_name': repo.name, 'group_url': group_url, 'group_name': group.group_name, }) return msg
def format_repo_share_to_group_msg(self): """ Arguments: - `self`: """ try: d = json.loads(self.detail) except Exception as e: logger.error(e) return _(u"Internal error") share_from = email2nickname(d['share_from']) repo_id = d['repo_id'] group_id = d['group_id'] path = d.get('path', '/') org_id = d.get('org_id', None) repo = None try: group = ccnet_api.get_group(group_id) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) except Exception as e: logger.error(e) return None if not repo or not group: self.delete() return None if path == '/': tmpl = 'notifications/notice_msg/repo_share_to_group_msg.html' else: tmpl = 'notifications/notice_msg/folder_share_to_group_msg.html' lib_url = reverse('lib_view', args=[repo.id, repo.name, '']) group_url = reverse('group', args=[group.id]) msg = render_to_string(tmpl, { 'user': share_from, 'lib_url': lib_url, 'lib_name': repo.name, 'group_url': group_url, 'group_name': group.group_name, }) return msg
def get_sub_repo_by_path(self, request, repo, path): if path == "/": raise Exception("Invalid path") # get or create sub repo username = request.user.username if is_org_context(request): org_id = request.user.org.org_id sub_repo = seaserv.seafserv_threaded_rpc.get_org_virtual_repo(org_id, repo.id, path, username) else: sub_repo = seafile_api.get_virtual_repo(repo.id, path, username) return sub_repo
def get_sub_repo_by_path(self, request, repo, path): if path == '/': raise Exception("Invalid path") # get or create sub repo username = request.user.username if is_org_context(request): org_id = request.user.org.org_id sub_repo = seaserv.seafserv_threaded_rpc.get_org_virtual_repo( org_id, repo.id, path, username) else: sub_repo = seafile_api.get_virtual_repo(repo.id, path, username) return sub_repo
def format_repo_share_to_group_msg(self): """ Arguments: - `self`: """ try: d = json.loads(self.detail) except Exception as e: logger.error(e) return _(u"Internal error") share_from = email2nickname(d['share_from']) repo_id = d['repo_id'] group_id = d['group_id'] path = d.get('path', '/') org_id = d.get('org_id', None) repo = None try: group = ccnet_api.get_group(group_id) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) except Exception as e: logger.error(e) return None if not repo or not group: self.delete() return None msg = _( u"%(user)s has shared a library named <a href='%(repo_href)s'>%(repo_name)s</a> to group <a href='%(group_href)s'>%(group_name)s</a>." ) % { 'user': escape(share_from), 'repo_href': reverse('view_common_lib_dir', args=[repo.id, '']), 'repo_name': escape(repo.name), 'group_href': reverse('group_info', args=[group.id]), 'group_name': escape(group.group_name), } return msg
def format_repo_share_msg(self): """ Arguments: - `self`: """ try: d = json.loads(self.detail) except Exception as e: logger.error(e) return _(u"Internal error") share_from = email2nickname(d['share_from']) repo_id = d['repo_id'] path = d.get('path', '/') org_id = d.get('org_id', None) repo = None try: if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) except Exception as e: logger.error(e) return None if repo is None: self.delete() return None msg = _(u"%(user)s has shared a library named <a href='%(href)s'>%(repo_name)s</a> to you.") % { 'user': escape(share_from), 'href': HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id':repo.id, 'path': ''}, 'repo_name': escape(repo.name), } return msg
def update_notice_detail(request, notices): repo_dict = {} for notice in notices: if notice.is_repo_share_msg(): try: d = json.loads(notice.detail) repo_id = d['repo_id'] path = d.get('path', '/') org_id = d.get('org_id', None) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo( repo_id, path, owner) if repo is None: notice.detail = None else: d.pop('org_id') share_from_user_email = d.pop('share_from') url, is_default, date_uploaded = api_avatar_url( share_from_user_email, 32) d['repo_name'] = repo.name d['repo_id'] = repo.id d['share_from_user_name'] = email2nickname( share_from_user_email) d['share_from_user_email'] = share_from_user_email d['share_from_user_contact_email'] = email2contact_email( share_from_user_email) d['share_from_user_avatar_url'] = request.build_absolute_uri( url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_repo_share_to_group_msg(): try: d = json.loads(notice.detail) group_id = d['group_id'] path = d.get('path', '/') org_id = d.get('org_id', None) repo_id = d['repo_id'] group = ccnet_api.get_group(group_id) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo( repo_id, path, owner) if not repo or not group: notice.detail = None else: d.pop('org_id') share_from_user_email = d.pop('share_from') url, is_default, date_uploaded = api_avatar_url( share_from_user_email, 32) d['share_from_user_name'] = email2nickname( share_from_user_email) d['share_from_user_email'] = share_from_user_email d['share_from_user_contact_email'] = email2contact_email( share_from_user_email) d['share_from_user_avatar_url'] = request.build_absolute_uri( url) d['repo_name'] = repo.name d['repo_id'] = repo.id d['group_name'] = group.group_name notice.detail = d except Exception as e: logger.error(e) elif notice.is_add_user_to_group(): try: d = json.loads(notice.detail) group_id = d['group_id'] group = ccnet_api.get_group(group_id) if group is None: notice.detail = None else: group_staff_email = d.pop('group_staff') url, is_default, date_uploaded = api_avatar_url( group_staff_email, 32) d['group_staff_name'] = email2nickname(group_staff_email) d['group_staff_email'] = group_staff_email d['group_staff_contact_email'] = email2contact_email( group_staff_email) d['group_staff_avatar_url'] = request.build_absolute_uri( url) d['group_name'] = group.group_name notice.detail = d except Exception as e: logger.error(e) elif notice.is_draft_comment_msg(): try: d = json.loads(notice.detail) author_email = d.pop('author') url, is_default, date_uploaded = api_avatar_url( author_email, 32) d['author_name'] = email2nickname(author_email) d['author_email'] = author_email d['author_context_email'] = email2contact_email(author_email) d['author_avatar_url'] = request.build_absolute_uri(url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_repo_transfer_msg(): try: d = json.loads(notice.detail) repo_id = d['repo_id'] repo = seafile_api.get_repo(repo_id) if not repo: notice.detail = None else: d.pop('org_id') repo_owner_email = d.pop('repo_owner') d['transfer_from_user_name'] = email2nickname( repo_owner_email) d['transfer_from_user_email'] = repo_owner_email d['transfer_from_user_contact_email'] = email2contact_email( repo_owner_email) url, is_default, date_uploaded = api_avatar_url( repo_owner_email, 32) d['transfer_from_user_avatar_url'] = request.build_absolute_uri( url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_draft_reviewer_msg(): try: d = json.loads(notice.detail) d.pop('to_user') request_user_email = d.pop('from_user') url, is_default, date_uploaded = api_avatar_url( request_user_email, 32) d['request_user_name'] = email2nickname(request_user_email) d['request_user_email'] = request_user_email d['request_user_contact_email'] = email2contact_email( request_user_email) d['request_user_avatat_url'] = request.build_absolute_uri(url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_file_uploaded_msg(): try: d = json.loads(notice.detail) filename = d['file_name'] repo_id = d['repo_id'] if repo_id in repo_dict: repo = repo_dict[repo_id] else: repo = seafile_api.get_repo(repo_id) repo_dict[repo_id] = repo if repo: if d['uploaded_to'] == '/': # current upload path is '/' file_path = '/' + filename name = repo.name else: uploaded_to = d['uploaded_to'].rstrip('/') file_path = uploaded_to + '/' + filename name = os.path.basename(uploaded_to) d['repo_name'] = repo.name d['folder_path'] = d.pop('uploaded_to') d['folder_name'] = name d['file_path'] = file_path url, is_default, date_uploaded = api_avatar_url('', 32) d['uploaded_user_avatar_url'] = request.build_absolute_uri( url) notice.detail = d else: notice.detail = None except Exception as e: logger.error(e) elif notice.is_file_comment_msg(): try: d = json.loads(notice.detail) repo_id = d['repo_id'] file_path = d['file_path'] if repo_id in repo_dict: repo = repo_dict[repo_id] else: repo = seafile_api.get_repo(repo_id) repo_dict[repo_id] = repo if repo is None or not seafile_api.get_file_id_by_path( repo.id, file_path): notice.detail = None else: author_email = d.pop('author') file_name = os.path.basename(file_path) url, is_default, date_uploaded = api_avatar_url( author_email, 32) d['author_avatar_url'] = request.build_absolute_uri(url) d['author_name'] = email2nickname(author_email) d['author_email'] = author_email d['author_contact_email'] = email2contact_email( author_email) d['file_name'] = file_name notice.detail = d except Exception as e: logger.error(e) return notices
def ajax_private_share_dir(request): content_type = 'application/json; charset=utf-8' repo_id = request.POST.get('repo_id', '') path = request.POST.get('path', '') username = request.user.username result = {} repo = seafile_api.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) if seafile_api.get_dir_id_by_path(repo_id, path) is None: result['error'] = _(u'Directory does not exist.') return HttpResponse(json.dumps(result), status=400, content_type=content_type) if path != '/': # if share a dir, check sub-repo first try: if is_org_context(request): org_id = request.user.org.org_id sub_repo = seaserv.seafserv_threaded_rpc.get_org_virtual_repo( org_id, repo_id, path, username) else: sub_repo = seafile_api.get_virtual_repo( repo_id, path, username) except SearpcError as e: result['error'] = e.msg return HttpResponse(json.dumps(result), status=500, content_type=content_type) if not sub_repo: name = os.path.basename(path) # create a sub-lib try: # use name as 'repo_name' & 'repo_desc' for sub_repo if is_org_context(request): org_id = request.user.org.org_id sub_repo_id = seaserv.seafserv_threaded_rpc.create_org_virtual_repo( org_id, repo_id, path, name, name, username) else: sub_repo_id = seafile_api.create_virtual_repo( repo_id, path, name, name, username) sub_repo = seafile_api.get_repo(sub_repo_id) except SearpcError as e: result['error'] = e.msg return HttpResponse(json.dumps(result), status=500, content_type=content_type) shared_repo_id = sub_repo.id shared_repo = sub_repo else: shared_repo_id = repo_id shared_repo = repo emails_string = request.POST.get('emails', '') groups_string = request.POST.get('groups', '') perm = request.POST.get('perm', '') emails = string2list(emails_string) groups = string2list(groups_string) # Test whether user is the repo owner. if not seafile_api.is_repo_owner(username, shared_repo_id) and \ not is_org_repo_owner(username, shared_repo_id): result['error'] = _( u'Only the owner of the library has permission to share it.') return HttpResponse(json.dumps(result), status=500, content_type=content_type) # Parsing input values. # no 'share_to_all' share_to_groups, share_to_users, shared_success, shared_failed = [], [], [], [] for email in emails: email = email.lower() if is_valid_username(email): share_to_users.append(email) else: shared_failed.append(email) for group_id in groups: share_to_groups.append(seaserv.get_group(group_id)) for email in share_to_users: # Add email to contacts. mail_sended.send(sender=None, user=request.user.username, email=email) if share_to_user(request, shared_repo, email, perm): shared_success.append(email) else: shared_failed.append(email) for group in share_to_groups: if share_to_group(request, shared_repo, group, perm): shared_success.append(group.group_name) else: shared_failed.append(group.group_name) if len(shared_success) > 0: return HttpResponse(json.dumps({ "shared_success": shared_success, "shared_failed": shared_failed }), content_type=content_type) else: # for case: only share to users and the emails are not valid data = json.dumps( {"error": _("Please check the email(s) you entered")}) return HttpResponse(data, status=400, content_type=content_type)
def update_notice_detail(request, notices): repo_dict = {} for notice in notices: if notice.is_repo_share_msg(): try: d = json.loads(notice.detail) repo_id = d['repo_id'] path = d.get('path', '/') org_id = d.get('org_id', None) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) if repo is None: notice.detail = None else: d.pop('org_id') share_from_user_email = d.pop('share_from') url, is_default, date_uploaded = api_avatar_url(share_from_user_email, 32) d['repo_name'] = repo.name d['repo_id'] = repo.id d['share_from_user_name'] = email2nickname(share_from_user_email) d['share_from_user_email'] = share_from_user_email d['share_from_user_contact_email'] = email2contact_email(share_from_user_email) d['share_from_user_avatar_url'] = request.build_absolute_uri(url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_repo_share_to_group_msg(): try: d = json.loads(notice.detail) group_id = d['group_id'] path = d.get('path', '/') org_id = d.get('org_id', None) repo_id = d['repo_id'] group = ccnet_api.get_group(group_id) if path == '/': repo = seafile_api.get_repo(repo_id) else: if org_id: owner = seafile_api.get_org_repo_owner(repo_id) repo = seafile_api.get_org_virtual_repo( org_id, repo_id, path, owner) else: owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) if not repo or not group: notice.detail = None else: d.pop('org_id') share_from_user_email = d.pop('share_from') url, is_default, date_uploaded = api_avatar_url(share_from_user_email, 32) d['share_from_user_name'] = email2nickname(share_from_user_email) d['share_from_user_email'] = share_from_user_email d['share_from_user_contact_email'] = email2contact_email(share_from_user_email) d['share_from_user_avatar_url'] = request.build_absolute_uri(url) d['repo_name'] = repo.name d['repo_id'] = repo.id d['group_name'] = group.group_name notice.detail = d except Exception as e: logger.error(e) elif notice.is_add_user_to_group(): try: d = json.loads(notice.detail) group_id = d['group_id'] group = ccnet_api.get_group(group_id) if group is None: notice.detail = None else: group_staff_email = d.pop('group_staff') url, is_default, date_uploaded = api_avatar_url(group_staff_email, 32) d['group_staff_name'] = email2nickname(group_staff_email) d['group_staff_email'] = group_staff_email d['group_staff_contact_email'] = email2contact_email(group_staff_email) d['group_staff_avatar_url'] = request.build_absolute_uri(url) d['group_name'] = group.group_name notice.detail = d except Exception as e: logger.error(e) elif notice.is_draft_comment_msg(): try: d = json.loads(notice.detail) author_email = d.pop('author') url, is_default, date_uploaded = api_avatar_url(author_email, 32) d['author_name'] = email2nickname(author_email) d['author_email'] = author_email d['author_context_email'] = email2contact_email(author_email) d['author_avatar_url'] = request.build_absolute_uri(url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_repo_transfer_msg(): try: d = json.loads(notice.detail) repo_id = d['repo_id'] repo = seafile_api.get_repo(repo_id) if not repo: notice.detail = None else: d.pop('org_id') repo_owner_email = d.pop('repo_owner') d['transfer_from_user_name'] = email2nickname(repo_owner_email) d['transfer_from_user_email'] = repo_owner_email d['transfer_from_user_contact_email'] = email2contact_email(repo_owner_email) url, is_default, date_uploaded = api_avatar_url(repo_owner_email, 32) d['transfer_from_user_avatar_url'] = request.build_absolute_uri(url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_draft_reviewer_msg(): try: d = json.loads(notice.detail) d.pop('to_user') request_user_email = d.pop('from_user') url, is_default, date_uploaded = api_avatar_url(request_user_email, 32) d['request_user_name'] = email2nickname(request_user_email) d['request_user_email'] = request_user_email d['request_user_contact_email'] = email2contact_email(request_user_email) d['request_user_avatat_url'] = request.build_absolute_uri(url) notice.detail = d except Exception as e: logger.error(e) elif notice.is_file_uploaded_msg(): try: d = json.loads(notice.detail) filename = d['file_name'] repo_id = d['repo_id'] if repo_id in repo_dict: repo = repo_dict[repo_id] else: repo = seafile_api.get_repo(repo_id) repo_dict[repo_id] = repo if repo: if d['uploaded_to'] == '/': # current upload path is '/' file_path = '/' + filename name = repo.name else: uploaded_to = d['uploaded_to'].rstrip('/') file_path = uploaded_to + '/' + filename name = os.path.basename(uploaded_to) d['repo_name'] = repo.name d['folder_path'] = d.pop('uploaded_to') d['folder_name'] = name d['file_path'] = file_path url, is_default, date_uploaded = api_avatar_url('', 32) d['uploaded_user_avatar_url'] = request.build_absolute_uri(url) notice.detail = d else: notice.detail = None except Exception as e: logger.error(e) elif notice.is_file_comment_msg(): try: d = json.loads(notice.detail) repo_id = d['repo_id'] file_path = d['file_path'] if repo_id in repo_dict: repo = repo_dict[repo_id] else: repo = seafile_api.get_repo(repo_id) repo_dict[repo_id] = repo if repo is None or not seafile_api.get_file_id_by_path(repo.id, file_path): notice.detail = None else: author_email = d.pop('author') file_name = os.path.basename(file_path) url, is_default, date_uploaded = api_avatar_url(author_email, 32) d['author_avatar_url'] = request.build_absolute_uri(url) d['author_name'] = email2nickname(author_email) d['author_email'] = author_email d['author_contact_email'] = email2contact_email(author_email) d['file_name'] = file_name notice.detail = d except Exception as e: logger.error(e) return notices
def ajax_private_share_dir(request): content_type = 'application/json; charset=utf-8' repo_id = request.POST.get('repo_id', '') path = request.POST.get('path', '') username = request.user.username result = {} repo = seafile_api.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) if seafile_api.get_dir_id_by_path(repo_id, path) is None: result['error'] = _(u'Directory does not exist.') return HttpResponse(json.dumps(result), status=400, content_type=content_type) if path != '/': # if share a dir, check sub-repo first try: if is_org_context(request): org_id = request.user.org.org_id sub_repo = seaserv.seafserv_threaded_rpc.get_org_virtual_repo( org_id, repo_id, path, username) else: sub_repo = seafile_api.get_virtual_repo(repo_id, path, username) except SearpcError as e: result['error'] = e.msg return HttpResponse(json.dumps(result), status=500, content_type=content_type) if not sub_repo: name = os.path.basename(path) # create a sub-lib try: # use name as 'repo_name' & 'repo_desc' for sub_repo if is_org_context(request): org_id = request.user.org.org_id sub_repo_id = seaserv.seafserv_threaded_rpc.create_org_virtual_repo( org_id, repo_id, path, name, name, username) else: sub_repo_id = seafile_api.create_virtual_repo(repo_id, path, name, name, username) sub_repo = seafile_api.get_repo(sub_repo_id) except SearpcError as e: result['error'] = e.msg return HttpResponse(json.dumps(result), status=500, content_type=content_type) shared_repo_id = sub_repo.id shared_repo = sub_repo else: shared_repo_id = repo_id shared_repo = repo emails_string = request.POST.get('emails', '') groups_string = request.POST.get('groups', '') perm = request.POST.get('perm', '') emails = string2list(emails_string) groups = string2list(groups_string) # Test whether user is the repo owner. if not seafile_api.is_repo_owner(username, shared_repo_id) and \ not is_org_repo_owner(username, shared_repo_id): result['error'] = _(u'Only the owner of the library has permission to share it.') return HttpResponse(json.dumps(result), status=500, content_type=content_type) # Parsing input values. # no 'share_to_all' share_to_groups, share_to_users, shared_success, shared_failed = [], [], [], [] for email in emails: email = email.lower() if is_valid_username(email): share_to_users.append(email) else: shared_failed.append(email) for group_id in groups: share_to_groups.append(seaserv.get_group(group_id)) for email in share_to_users: # Add email to contacts. mail_sended.send(sender=None, user=request.user.username, email=email) if share_to_user(request, shared_repo, email, perm): shared_success.append(email) else: shared_failed.append(email) for group in share_to_groups: if share_to_group(request, shared_repo, group, perm): shared_success.append(group.group_name) else: shared_failed.append(group.group_name) if len(shared_success) > 0: return HttpResponse(json.dumps({ "shared_success": shared_success, "shared_failed": shared_failed }), content_type=content_type) else: # for case: only share to users and the emails are not valid data = json.dumps({"error": _("Please check the email(s) you entered")}) return HttpResponse(data, status=400, content_type=content_type)