def get_update_url(self): if get_user_permission(self.request, self.repo_id) == 'rw': token = web_get_access_token(self.repo_id, 'dummy', 'update', self.request.user.username) return gen_file_upload_url(token, 'update') else: return ''
def repl(matchobj): if matchobj.group(2): # return origin string in backquotes return matchobj.group(2) page_alias = page_name = matchobj.group(1).strip() if len(page_name.split('|')) > 1: page_alias = page_name.split('|')[0] page_name = page_name.split('|')[1] filetype, fileext = get_file_type_and_ext(page_name) if fileext == '': # convert page_name that extension is missing to a markdown page try: dirent = get_wiki_dirent(repo_id, page_name) a_tag = "<a href='%s'>%s</a>" return a_tag % (smart_str(url_prefix + normalize_page_name(page_name) + '/'), page_alias) except (WikiDoesNotExist, WikiPageMissing): a_tag = '''<a class="wiki-page-missing" href='%s'>%s</a>''' return a_tag % (smart_str(url_prefix + page_name.replace('/', '-') + '/'), page_alias) elif filetype == IMAGE: # load image to wiki page path = "/" + page_name filename = os.path.basename(path) obj_id = seaserv.get_file_id_by_path(repo_id, path) if not obj_id: # Replace '/' in page_name to '-', since wiki name can not # contain '/'. return '''<a class="wiki-page-missing" href='%s'>%s</a>''' % \ (url_prefix + '/' + page_name.replace('/', '-'), page_name) token = seaserv.web_get_access_token(repo_id, obj_id, 'view', username) ret = '<img class="wiki-image" src="%s" alt="%s" />' % ( gen_file_get_url(token, filename), filename) return smart_str(ret) else: from seahub.base.templatetags.seahub_tags import file_icon_filter from django.conf import settings # convert other types of filelinks to clickable links path = "/" + page_name icon = file_icon_filter(page_name) s = reverse('repo_view_file', args=[repo_id]) + \ '?p=' + urlquote(path) a_tag = '''<img src="%simg/file/%s" alt="%s" class="file-icon vam" /> <a href='%s' target='_blank' class="vam">%s</a>''' ret = a_tag % (settings.MEDIA_URL, icon, icon, smart_str(s), page_name) return smart_str(ret)
def get_file_view_path_and_perm(request, repo_id, obj_id, filename): """ Return raw path of a file and the permission to view file. """ username = request.user.username # check permission perm = get_user_permission(request, repo_id) if perm: # Get a token to visit file token = web_get_access_token(repo_id, obj_id, 'view', username) return (gen_file_get_url(token, filename), perm) else: return ('', perm)
def repl(matchobj): if matchobj.group(2): # return origin string in backquotes return matchobj.group(2) page_alias = page_name = matchobj.group(1).strip() if len(page_name.split("|")) > 1: page_alias = page_name.split("|")[0] page_name = page_name.split("|")[1] filetype, fileext = get_file_type_and_ext(page_name) if fileext == "": # convert page_name that extension is missing to a markdown page try: dirent = get_wiki_dirent(repo_id, page_name) a_tag = "<a href='%s'>%s</a>" return a_tag % (smart_str(url_prefix + normalize_page_name(page_name) + "/"), page_alias) except (WikiDoesNotExist, WikiPageMissing): a_tag = """<a class="wiki-page-missing" href='%s'>%s</a>""" return a_tag % (smart_str(url_prefix + page_name.replace("/", "-") + "/"), page_alias) elif filetype == IMAGE: # load image to wiki page path = "/" + page_name filename = os.path.basename(path) obj_id = seaserv.get_file_id_by_path(repo_id, path) if not obj_id: # Replace '/' in page_name to '-', since wiki name can not # contain '/'. return """<a class="wiki-page-missing" href='%s'>%s</a>""" % ( url_prefix + "/" + page_name.replace("/", "-"), page_name, ) token = seaserv.web_get_access_token(repo_id, obj_id, "view", username) ret = '<img class="wiki-image" src="%s" alt="%s" />' % (gen_file_get_url(token, filename), filename) return smart_str(ret) else: from seahub.base.templatetags.seahub_tags import file_icon_filter from django.conf import settings # convert other types of filelinks to clickable links path = "/" + page_name icon = file_icon_filter(page_name) s = reverse("repo_view_file", args=[repo_id]) + "?p=" + urlquote(path) a_tag = ( """<img src="%simg/file/%s" alt="%s" class="vam" /> <a href='%s' target='_blank' class="vam">%s</a>""" ) ret = a_tag % (settings.MEDIA_URL, icon, icon, smart_str(s), page_name) return smart_str(ret)
def repl(matchobj): if matchobj.group(2): # return origin string in backquotes return matchobj.group(2) link_alias = link_name = matchobj.group(1).strip() if len(link_name.split('|')) > 1: link_alias = link_name.split('|')[0] link_name = link_name.split('|')[1] filetype, fileext = get_file_type_and_ext(link_name) if fileext == '': # convert link_name that extension is missing to a markdown page try: dirent = get_wiki_dirent(repo_id, link_name) path = "/" + dirent.obj_name href = reverse('repo_view_file', args=[repo_id]) + '?p=' + urlquote(path) a_tag = '''<a href="%s">%s</a>''' return a_tag % (href, link_alias) except (WikiDoesNotExist, WikiPageMissing): a_tag = '''<p class="wiki-page-missing">%s</p>''' return a_tag % (link_alias) elif filetype == IMAGE: # load image to current page path = "/" + link_name filename = os.path.basename(path) obj_id = get_file_id_by_path(repo_id, path) if not obj_id: return '''<p class="wiki-page-missing">%s</p>''' % link_name token = web_get_access_token(repo_id, obj_id, 'view', username) return '<img class="wiki-image" src="%s" alt="%s" />' % ( gen_file_get_url(token, filename), filename) else: from seahub.base.templatetags.seahub_tags import file_icon_filter # convert other types of filelinks to clickable links path = "/" + link_name icon = file_icon_filter(link_name) s = reverse('repo_view_file', args=[repo_id ]) + '?p=' + urlquote(path) a_tag = '''<img src="%simg/file/%s" alt="%s" class="vam" /> <a href="%s" target="_blank" class="vam">%s</a>''' return a_tag % (MEDIA_URL, icon, icon, s, link_name)
def repl(matchobj): if matchobj.group(2): # return origin string in backquotes return matchobj.group(2) link_alias = link_name = matchobj.group(1).strip() if len(link_name.split("|")) > 1: link_alias = link_name.split("|")[0] link_name = link_name.split("|")[1] filetype, fileext = get_file_type_and_ext(link_name) if fileext == "": # convert link_name that extension is missing to a markdown page try: dirent = get_wiki_dirent(repo_id, link_name) path = "/" + dirent.obj_name href = reverse("repo_view_file", args=[repo_id]) + "?p=" + urlquote(path) a_tag = """<a href="%s">%s</a>""" return a_tag % (href, link_alias) except (WikiDoesNotExist, WikiPageMissing): a_tag = """<p class="wiki-page-missing">%s</p>""" return a_tag % (link_alias) elif filetype == IMAGE: # load image to current page path = "/" + link_name filename = os.path.basename(path) obj_id = get_file_id_by_path(repo_id, path) if not obj_id: return """<p class="wiki-page-missing">%s</p>""" % link_name token = web_get_access_token(repo_id, obj_id, "view", username) return '<img class="wiki-image" src="%s" alt="%s" />' % (gen_file_get_url(token, filename), filename) else: from seahub.base.templatetags.seahub_tags import file_icon_filter # convert other types of filelinks to clickable links path = "/" + link_name icon = file_icon_filter(link_name) s = reverse("repo_view_file", args=[repo_id]) + "?p=" + urlquote(path) a_tag = ( """<img src="%simg/file/%s" alt="%s" class="vam" /> <a href="%s" target="_blank" class="vam">%s</a>""" ) return a_tag % (MEDIA_URL, icon, icon, s, link_name)
def get_file_view_path_and_perm(request, repo_id, obj_id, path): """ Get path and the permission to view file. Returns: outer fileserver file url, inner fileserver file url, permission """ username = request.user.username filename = os.path.basename(path) # user_perm = get_file_access_permission(repo_id, path, username) or \ # get_repo_access_permission(repo_id, username) user_perm = check_repo_access_permission(repo_id, request.user) if user_perm is None: return ('', '', user_perm) else: # Get a token to visit file token = web_get_access_token(repo_id, obj_id, 'view', username) outer_url = gen_file_get_url(token, filename) inner_url = gen_inner_file_get_url(token, filename) return (outer_url, inner_url, user_perm)
def repl(matchobj): if matchobj.group(2): # return origin string in backquotes return matchobj.group(2) linkname = matchobj.group(1).strip() filetype, fileext = get_file_type_and_ext(linkname) filetype = filetype.lower() if fileext == '': # convert linkname that extension is missing to a markdown page filename = linkname + ".md" path = "/" + filename if get_file_id_by_path(repo_id, path): a_tag = "<a href='%s'>%s</a>" return a_tag % (reverse('group_wiki', args=[group.id, linkname]), linkname) else: a_tag = '''<a class="wiki-page-missing" href='%s'>%s</a>''' return a_tag % (reverse('group_wiki', args=[group.id, linkname.replace('/', '-')]), linkname) elif filetype == 'image': # load image to wiki page path = "/" + linkname filename = os.path.basename(path) obj_id = get_file_id_by_path(repo_id, path) if not obj_id: # Replace '/' in linkname to '-', since wiki name can not # contain '/'. return '''<a class="wiki-page-missing" href='%s'>%s</a>''' % \ (reverse('group_wiki', args=[group.id, linkname.replace('/', '-')]), linkname) token = web_get_access_token(repo_id, obj_id, 'view', username) return '<img src="%s" alt="%s" />' % (gen_file_get_url(token, filename), filename) else: from base.templatetags.seahub_tags import file_icon_filter # convert other types of filelinks to clickable links path = "/" + linkname icon = file_icon_filter(linkname) s = reverse('repo_view_file', args=[repo_id]) + '?p=' + path a_tag = '''<img src="%simg/file/%s" alt="%s" class="vam" /> <a href='%s' target='_blank' class="vam">%s</a>''' return a_tag % (MEDIA_URL, icon, icon, s, linkname)
def repl(matchobj): if matchobj.group(2): # return origin string in backquotes return matchobj.group(2) page_name = matchobj.group(1).strip() filetype, fileext = get_file_type_and_ext(page_name) if fileext == '': # convert page_name that extension is missing to a markdown page dirent = get_wiki_dirent(repo_id, page_name) if dirent is not None: a_tag = "<a href='%s'>%s</a>" return a_tag % (url_prefix + '/' + normalize_page_name(page_name), page_name) else: a_tag = '''<a class="wiki-page-missing" href='%s'>%s</a>''' return a_tag % (url_prefix + '/' + page_name.replace('/', '-'), page_name) elif filetype == IMAGE: # load image to wiki page path = "/" + page_name filename = os.path.basename(path) obj_id = get_file_id_by_path(repo_id, path) if not obj_id: # Replace '/' in page_name to '-', since wiki name can not # contain '/'. return '''<a class="wiki-page-missing" href='%s'>%s</a>''' % \ (url_prefix + '/' + page_name.replace('/', '-'), page_name) token = seaserv.web_get_access_token(repo_id, obj_id, 'view', username) return '<img src="%s" alt="%s" />' % (gen_file_get_url(token, filename), filename) else: from base.templatetags.seahub_tags import file_icon_filter # convert other types of filelinks to clickable links path = "/" + page_name icon = file_icon_filter(page_name) s = reverse('repo_view_file', args=[repo_id]) + \ '?p=' + urllib2.quote(smart_str(path)) a_tag = '''<img src="%simg/file/%s" alt="%s" class="vam" /> <a href='%s' target='_blank' class="vam">%s</a>''' return a_tag % (MEDIA_URL, icon, icon, s, page_name)
def view_raw_shared_file(request, token, obj_id, file_name): """Returns raw content of a shared file. Arguments: - `request`: - `token`: - `obj_id`: - `file_name`: """ fileshare = FileShare.objects.get_valid_file_link_by_token(token) if fileshare is None: raise Http404 repo_id = fileshare.repo_id repo = get_repo(repo_id) if not repo: raise Http404 # Normalize file path based on file or dir share link if fileshare.is_file_share_link(): file_path = fileshare.path.rstrip("/") else: file_path = fileshare.path.rstrip("/") + "/" + file_name real_obj_id = seafile_api.get_file_id_by_path(repo_id, file_path) if not real_obj_id: raise Http404 if real_obj_id != obj_id: # perm check raise Http404 filename = os.path.basename(file_path) username = request.user.username token = web_get_access_token(repo_id, real_obj_id, "view", username) outer_url = gen_file_get_url(token, filename) return HttpResponseRedirect(outer_url)
def view_raw_shared_file(request, token, obj_id, file_name): """Returns raw content of a shared file. Arguments: - `request`: - `token`: - `obj_id`: - `file_name`: """ fileshare = FileShare.objects.get_valid_file_link_by_token(token) if fileshare is None: raise Http404 repo_id = fileshare.repo_id repo = get_repo(repo_id) if not repo: raise Http404 # Normalize file path based on file or dir share link if fileshare.is_file_share_link(): file_path = fileshare.path.rstrip('/') else: file_path = fileshare.path.rstrip('/') + '/' + file_name real_obj_id = seafile_api.get_file_id_by_path(repo_id, file_path) if not real_obj_id: raise Http404 if real_obj_id != obj_id: # perm check raise Http404 filename = os.path.basename(file_path) username = request.user.username token = web_get_access_token(repo_id, real_obj_id, 'view', username) outer_url = gen_file_get_url(token, filename) return HttpResponseRedirect(outer_url)
def file_edit(request, repo_id): repo = get_repo(repo_id) if not repo: raise Http404 if request.method == 'POST': return file_edit_submit(request, repo_id) if check_repo_access_permission(repo_id, request.user) != 'rw': return render_permission_error(request, _(u'Unable to edit file')) path = request.GET.get('p', '/') if path[-1] == '/': path = path[:-1] u_filename = os.path.basename(path) filename = urllib2.quote(u_filename.encode('utf-8')) head_id = repo.head_cmmt_id obj_id = get_file_id_by_path(repo_id, path) if not obj_id: return render_error(request, _(u'The file does not exist.')) token = web_get_access_token(repo_id, obj_id, 'view', request.user.username) # generate path and link zipped = gen_path_link(path, repo.name) filetype, fileext = get_file_type_and_ext(filename) op = None err = '' file_content = None encoding = None file_encoding_list = FILE_ENCODING_LIST if filetype == TEXT or filetype == MARKDOWN or filetype == SF: if repo.encrypted: repo.password_set = seafile_api.is_password_set( repo_id, request.user.username) if not repo.password_set: op = 'decrypt' if not op: inner_path = gen_inner_file_get_url(token, filename) file_enc = request.GET.get('file_enc', 'auto') if not file_enc in FILE_ENCODING_LIST: file_enc = 'auto' err, file_content, encoding = repo_file_get(inner_path, file_enc) if encoding and encoding not in FILE_ENCODING_LIST: file_encoding_list.append(encoding) else: err = _(u'Edit online is not offered for this type of file.') # Redirect to different place according to from page when user click # cancel button on file edit page. cancel_url = reverse('repo_view_file', args=[repo.id ]) + '?p=' + urlquote(path) page_from = request.GET.get('from', '') gid = request.GET.get('gid', '') wiki_name = os.path.splitext(u_filename)[0] if page_from == 'wiki_page_edit' or page_from == 'wiki_page_new': cancel_url = reverse('group_wiki', args=[gid, wiki_name]) elif page_from == 'personal_wiki_page_edit' or page_from == 'personal_wiki_page_new': cancel_url = reverse('personal_wiki', args=[wiki_name]) return render_to_response('file_edit.html', { 'repo': repo, 'u_filename': u_filename, 'wiki_name': wiki_name, 'path': path, 'zipped': zipped, 'filetype': filetype, 'fileext': fileext, 'op': op, 'err': err, 'file_content': file_content, 'encoding': encoding, 'file_encoding_list': file_encoding_list, 'head_id': head_id, 'from': page_from, 'gid': gid, 'cancel_url': cancel_url, }, context_instance=RequestContext(request))
def file_edit(request, repo_id): repo = get_repo(repo_id) if not repo: raise Http404 if request.method == "POST": return file_edit_submit(request, repo_id) if check_repo_access_permission(repo_id, request.user) != "rw": return render_permission_error(request, _(u"Unable to edit file")) path = request.GET.get("p", "/") if path[-1] == "/": path = path[:-1] u_filename = os.path.basename(path) filename = urllib2.quote(u_filename.encode("utf-8")) head_id = repo.head_cmmt_id obj_id = get_file_id_by_path(repo_id, path) if not obj_id: return render_error(request, _(u"The file does not exist.")) token = web_get_access_token(repo_id, obj_id, "view", request.user.username) # generate path and link zipped = gen_path_link(path, repo.name) filetype, fileext = get_file_type_and_ext(filename) op = None err = "" file_content = None encoding = None file_encoding_list = FILE_ENCODING_LIST if filetype == TEXT or filetype == MARKDOWN or filetype == SF: if repo.encrypted: repo.password_set = seafile_api.is_password_set(repo_id, request.user.username) if not repo.password_set: op = "decrypt" if not op: inner_path = gen_inner_file_get_url(token, filename) file_enc = request.GET.get("file_enc", "auto") if not file_enc in FILE_ENCODING_LIST: file_enc = "auto" err, file_content, encoding = repo_file_get(inner_path, file_enc) if encoding and encoding not in FILE_ENCODING_LIST: file_encoding_list.append(encoding) else: err = _(u"Edit online is not offered for this type of file.") # Redirect to different place according to from page when user click # cancel button on file edit page. cancel_url = reverse("repo_view_file", args=[repo.id]) + "?p=" + urlquote(path) page_from = request.GET.get("from", "") gid = request.GET.get("gid", "") wiki_name = os.path.splitext(u_filename)[0] if page_from == "wiki_page_edit" or page_from == "wiki_page_new": cancel_url = reverse("group_wiki", args=[gid, wiki_name]) elif page_from == "personal_wiki_page_edit" or page_from == "personal_wiki_page_new": cancel_url = reverse("personal_wiki", args=[wiki_name]) return render_to_response( "file_edit.html", { "repo": repo, "u_filename": u_filename, "wiki_name": wiki_name, "path": path, "zipped": zipped, "filetype": filetype, "fileext": fileext, "op": op, "err": err, "file_content": file_content, "encoding": encoding, "file_encoding_list": file_encoding_list, "head_id": head_id, "from": page_from, "gid": gid, "cancel_url": cancel_url, }, context_instance=RequestContext(request), )
def file_edit(request, repo_id): repo = get_repo(repo_id) if not repo: raise Http404 if request.method == 'POST': return file_edit_submit(request, repo_id) if get_user_permission(request, repo_id) != 'rw': return render_permission_error(request, _(u'Unable to edit file')) path = request.GET.get('p', '/') if path[-1] == '/': path = path[:-1] u_filename = os.path.basename(path) filename = urllib2.quote(u_filename.encode('utf-8')) head_id = repo.head_cmmt_id obj_id = get_file_id_by_path(repo_id, path) if not obj_id: return render_error(request, _(u'The file does not exist.')) token = web_get_access_token(repo_id, obj_id, 'view', request.user.username) # generate path and link zipped = gen_path_link(path, repo.name) filetype, fileext = get_file_type_and_ext(filename) op = None err = '' file_content = None encoding = None file_encoding_list = FILE_ENCODING_LIST if filetype == TEXT or filetype == MARKDOWN or filetype == SF: if repo.encrypted: repo.password_set = seafserv_rpc.is_passwd_set(repo_id, request.user.username) if not repo.password_set: op = 'decrypt' if not op: raw_path = gen_file_get_url(token, filename) file_enc = request.GET.get('file_enc', 'auto') if not file_enc in FILE_ENCODING_LIST: file_enc = 'auto' err, file_content, encoding = repo_file_get(raw_path, file_enc) if encoding and encoding not in FILE_ENCODING_LIST: file_encoding_list.append(encoding) else: err = _(u'Edit online is not offered for this type of file.') # Redirect to different place according to from page when user click # cancel button on file edit page. cancel_url = reverse('repo_view_file', args=[repo.id]) + '?p=' + urlquote(path) page_from = request.GET.get('from', '') gid = request.GET.get('gid', '') wiki_name = os.path.splitext(u_filename)[0] if page_from == 'wiki_page_edit' or page_from == 'wiki_page_new': cancel_url = reverse('group_wiki', args=[gid, wiki_name]) elif page_from == 'personal_wiki_page_edit' or page_from == 'personal_wiki_page_new': cancel_url = reverse('personal_wiki', args=[wiki_name]) search_repo_id = None if not repo.encrypted: search_repo_id = repo.id return render_to_response('file_edit.html', { 'repo':repo, 'u_filename':u_filename, 'wiki_name': wiki_name, 'path':path, 'zipped':zipped, 'filetype':filetype, 'fileext':fileext, 'op':op, 'err':err, 'file_content':file_content, 'encoding': encoding, 'file_encoding_list':file_encoding_list, 'head_id': head_id, 'from': page_from, 'gid': gid, 'cancel_url': cancel_url, 'search_repo_id': search_repo_id, }, context_instance=RequestContext(request))
def file_edit(request, repo_id): repo = get_repo(repo_id) if not repo: raise Http404 if request.method == "POST": return file_edit_submit(request, repo_id) if get_user_permission(request, repo_id) != "rw": return render_permission_error(request, _(u"Unable to edit file")) path = request.GET.get("p", "/") if path[-1] == "/": path = path[:-1] u_filename = os.path.basename(path) filename = urllib2.quote(u_filename.encode("utf-8")) head_id = repo.head_cmmt_id obj_id = get_file_id_by_path(repo_id, path) if not obj_id: return render_error(request, _(u"The file does not exist.")) token = web_get_access_token(repo_id, obj_id, "view", request.user.username) # generate path and link zipped = gen_path_link(path, repo.name) filetype, fileext = get_file_type_and_ext(filename) op = None err = "" file_content = None encoding = None file_encoding_list = FILE_ENCODING_LIST if filetype == TEXT or filetype == MARKDOWN or filetype == SF: if repo.encrypted: repo.password_set = seafserv_rpc.is_passwd_set(repo_id, request.user.username) if not repo.password_set: op = "decrypt" if not op: raw_path = gen_file_get_url(token, filename) file_enc = request.GET.get("file_enc", "auto") if not file_enc in FILE_ENCODING_LIST: file_enc = "auto" err, file_content, encoding = repo_file_get(raw_path, file_enc) if encoding and encoding not in FILE_ENCODING_LIST: file_encoding_list.append(encoding) else: err = _(u"Edit online is not offered for this type of file.") return render_to_response( "file_edit.html", { "repo": repo, "u_filename": u_filename, "wiki_name": os.path.splitext(u_filename)[0], "path": path, "zipped": zipped, "filetype": filetype, "fileext": fileext, "op": op, "err": err, "file_content": file_content, "encoding": encoding, "file_encoding_list": file_encoding_list, "head_id": head_id, "from": request.GET.get("from", ""), "gid": request.GET.get("gid", ""), }, context_instance=RequestContext(request), )