def get_file_view_path_and_perm(request, repo_id, obj_id, path): """ Get path and the permission to view file. Returns: outer httpserver file url, inner httpserver 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 = get_repo_access_permission(repo_id, username) 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 get_file_view_path_and_perm(request, repo_id, obj_id, path): """ Get path and the permission to view file. Returns: outer httpserver file url, inner httpserver 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 = get_repo_access_permission(repo_id, username) 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 file_edit_submit(request, repo_id): content_type = 'application/json; charset=utf-8' def error_json(error_msg=_(u'Internal Error'), op=None): return HttpResponse(json.dumps({'error': error_msg, 'op': op}), status=400, content_type=content_type) username = request.user.username if get_repo_access_permission(repo_id, username) != 'rw': return error_json(_(u'Permission denied')) repo = get_repo(repo_id) if not repo: return error_json(_(u'The library does not exist.')) if repo.encrypted: repo.password_set = seafile_api.is_password_set(repo_id, username) if not repo.password_set: return error_json(_(u'The library is encrypted.'), 'decrypt') content = request.POST.get('content') encoding = request.POST.get('encoding') path = request.GET.get('p') if content is None or not path or encoding not in ["gbk", "utf-8"]: return error_json(_(u'Invalid arguments')) head_id = request.GET.get('head', None) content = content.encode(encoding) # first dump the file content to a tmp file, then update the file fd, tmpfile = mkstemp() def remove_tmp_file(): try: os.remove(tmpfile) except: pass try: bytesWritten = os.write(fd, content) except: bytesWritten = -1 finally: os.close(fd) if bytesWritten != len(content): remove_tmp_file() return error_json() req_from = request.GET.get('from', '') if req_from == 'wiki_page_edit' or req_from == 'wiki_page_new': try: gid = int(request.GET.get('gid', 0)) except ValueError: gid = 0 wiki_name = os.path.splitext(os.path.basename(path))[0] next = reverse('group_wiki', args=[gid, wiki_name]) elif req_from == 'personal_wiki_page_edit' or req_from == 'personal_wiki_page_new': wiki_name = os.path.splitext(os.path.basename(path))[0] next = reverse('personal_wiki', args=[wiki_name]) else: next = reverse('repo_view_file', args=[repo_id]) + '?p=' + urlquote(path) parent_dir = os.path.dirname(path).encode('utf-8') filename = os.path.basename(path).encode('utf-8') try: seafserv_threaded_rpc.put_file(repo_id, tmpfile, parent_dir, filename, username, head_id) remove_tmp_file() return HttpResponse(json.dumps({'href': next}), content_type=content_type) except SearpcError, e: remove_tmp_file() return error_json(str(e))
def file_edit_submit(request, repo_id): content_type = 'application/json; charset=utf-8' def error_json(error_msg=_(u'Internal Error'), op=None): return HttpResponse(json.dumps({'error': error_msg, 'op': op}), status=400, content_type=content_type) username = request.user.username if get_repo_access_permission(repo_id, username) != 'rw': return error_json(_(u'Permission denied')) repo = get_repo(repo_id) if not repo: return error_json(_(u'The library does not exist.')) if repo.encrypted: repo.password_set = seafile_api.is_password_set(repo_id, username) if not repo.password_set: return error_json(_(u'The library is encrypted.'), 'decrypt') content = request.POST.get('content') encoding = request.POST.get('encoding') path = request.GET.get('p') if content is None or not path or encoding not in ["gbk", "utf-8"]: return error_json(_(u'Invalid arguments')) head_id = request.GET.get('head', None) content = content.encode(encoding) # first dump the file content to a tmp file, then update the file fd, tmpfile = mkstemp() def remove_tmp_file(): try: os.remove(tmpfile) except: pass try: bytesWritten = os.write(fd, content) except: bytesWritten = -1 finally: os.close(fd) if bytesWritten != len(content): remove_tmp_file() return error_json() req_from = request.GET.get('from', '') if req_from == 'wiki_page_edit' or req_from == 'wiki_page_new': try: gid = int(request.GET.get('gid', 0)) except ValueError: gid = 0 wiki_name = os.path.splitext(os.path.basename(path))[0] next = reverse('group_wiki', args=[gid, wiki_name]) elif req_from == 'personal_wiki_page_edit' or req_from == 'personal_wiki_page_new': wiki_name = os.path.splitext(os.path.basename(path))[0] next = reverse('personal_wiki', args=[wiki_name]) else: next = reverse('repo_view_file', args=[repo_id]) + '?p=' + urlquote(path) parent_dir = os.path.dirname(path).encode('utf-8') filename = os.path.basename(path).encode('utf-8') try: seafserv_threaded_rpc.put_file(repo_id, tmpfile, parent_dir, filename, username, head_id) remove_tmp_file() return HttpResponse(json.dumps({'href': next}), content_type=content_type) except SearpcError, e: remove_tmp_file() return error_json(str(e))