# HG changeset patch
# User Ludovic Chabant The file is accessible with the following syntax: The file URL is accessible with the following syntax: Media files can be embedded easily in a page:File Uploaded!
{%raw%}{{file: {%endraw%}{{success.example}}{%raw%}}}{%endraw%}
[[file: {{success.example}}]]
+
[[image: {{success.example}}]]
Note: this syntax is valid only on the current page.
+Note: these syntaxes are only valid on the current page.
{% endif %} {% else %} diff -r 038b22935250 -r faa4c8467291 wikked/views/edit.py --- a/wikked/views/edit.py Wed Jan 10 22:51:39 2018 -0800 +++ b/wikked/views/edit.py Wed Jan 10 22:52:42 2018 -0800 @@ -98,27 +98,28 @@ @requires_permission('create') def upload_file(): p = request.args.get('p') + p_url = url_from_viewarg(p) data = { 'post_back': url_for('upload_file', p=p), - 'for_page': p + 'for_page': p_url } add_auth_data(data) - add_navigation_data(p, data) + add_navigation_data(p_url, data) if request.method == 'GET': return render_template('upload-file.html', **data) if request.method == 'POST': - wiki = get_wiki() - user = current_user.get_id() or request.remote_addr - for_url = None is_page_specific = (request.form.get('is_page_specific') == 'true') if is_page_specific: - for_url = p + for_url = p_url + wiki = get_wiki() + user = current_user.get_id() res = do_upload_file( wiki, user, request.files.get('file'), + commit_user=(user or request.remote_addr), for_url=for_url) data['success'] = { diff -r 038b22935250 -r faa4c8467291 wikked/webimpl/edit.py --- a/wikked/webimpl/edit.py Wed Jan 10 22:51:39 2018 -0800 +++ b/wikked/webimpl/edit.py Wed Jan 10 22:52:42 2018 -0800 @@ -2,12 +2,14 @@ import logging import urllib.parse from werkzeug.utils import secure_filename +from wikked.auth import PERM_UPLOAD, PERM_WIKIUPLOAD from wikked.page import Page, PageData from wikked.formatter import PageFormatter, FormattingContext from wikked.resolver import PageResolver from wikked.utils import PageNotFoundError from wikked.webimpl import ( - get_page_or_raise, get_page_meta, make_page_title) + get_page_or_raise, get_page_meta, make_page_title, + UserPermissionError) logger = logging.getLogger(__name__) @@ -107,20 +109,31 @@ return dummy.text -def do_upload_file(wiki, user, reqfile, for_url=None, submit=True): +def do_upload_file(wiki, user, reqfile, for_url=None, commit_user=False, + submit=True): if not reqfile: raise Exception("No file was specified.") if not reqfile.filename: raise Exception("No file name was specified.") - # TODO: check permissions for the user. + # Check permissions for the user. + if for_url: + for_page = get_page_or_raise(wiki, for_url, + fields=['url', 'local_meta']) + if not wiki.auth.hasPagePermission(for_page, user, PERM_UPLOAD): + raise UserPermissionError( + "You don't have permission to upload files to this page.") + else: + if not wiki.auth.hasPermission(user, PERM_WIKIUPLOAD): + raise UserPermissionError( + "You don't have permission to upload files.") filename = secure_filename(reqfile.filename) - files_dir = os.path.join(wiki.root, '_files') - upload_dir = files_dir + upload_dir = os.path.join(wiki.root, '_files') if for_url: - upload_dir = os.path.join(wiki.root, for_url) + fs_info = wiki.fs.findPageInfo(for_url) + upload_dir, _ = os.path.splitext(fs_info.path) path = os.path.join(upload_dir, filename) path = os.path.normpath(path) @@ -134,14 +147,14 @@ # Commit the file to the source-control. if submit: commit_meta = { - 'author': user, + 'author': commit_user, 'message': "Uploaded '%s'." % filename} wiki.scm.commit([path], commit_meta) if for_url: example = './%s' % filename else: - example = os.path.relpath(path, files_dir) + example = filename result = { 'example': example }