mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-12 23:27:22 +00:00
65 lines
3.1 KiB
Python
65 lines
3.1 KiB
Python
# This file is part of the Indico plugins.
|
|
# Copyright (C) 2002 - 2022 CERN
|
|
#
|
|
# The Indico plugins are free software; you can redistribute
|
|
# them and/or modify them under the terms of the MIT License;
|
|
# see the LICENSE file for more details.
|
|
|
|
import mimetypes
|
|
|
|
import requests
|
|
from flask import flash, session
|
|
from flask_pluginengine import render_plugin_template
|
|
|
|
from indico.core.db import db
|
|
from indico.modules.attachments.controllers.management.base import (_get_folders_protection_info,
|
|
_render_attachment_list, _render_protection_message)
|
|
from indico.modules.attachments.controllers.management.category import RHCategoryAttachmentManagementBase
|
|
from indico.modules.attachments.controllers.management.event import RHEventAttachmentManagementBase
|
|
from indico.modules.attachments.models.attachments import Attachment, AttachmentFile, AttachmentType
|
|
from indico.modules.attachments.models.folders import AttachmentFolder
|
|
from indico.util.fs import secure_client_filename
|
|
from indico.web.util import jsonify_data, jsonify_template
|
|
|
|
from indico_owncloud import _
|
|
from indico_owncloud.forms import AddAttachmentOwncloudForm
|
|
|
|
|
|
class AddAttachmentOwncloudMixin:
|
|
"""Add cloud storage attachment."""
|
|
|
|
def _process(self):
|
|
form = AddAttachmentOwncloudForm(linked_object=self.object)
|
|
if form.validate_on_submit():
|
|
files = form.data['owncloud_filepicker']['files']
|
|
folder = form.data['folder'] or AttachmentFolder.get_or_create_default(linked_object=self.object)
|
|
for f in files:
|
|
filename = f.split('/')[-1].split('?')[0]
|
|
local_filename = secure_client_filename(filename)
|
|
attachment = Attachment(folder=folder, user=session.user, title=local_filename,
|
|
type=AttachmentType.file, protection_mode=form.data['protection_mode'])
|
|
if attachment.is_self_protected:
|
|
attachment.acl = form.data['acl']
|
|
content_type = mimetypes.guess_type(local_filename)[0] or 'application/octet-stream'
|
|
attachment.file = AttachmentFile(user=session.user, filename=local_filename, content_type=content_type)
|
|
|
|
file_response = requests.get(f)
|
|
file_response.raise_for_status()
|
|
attachment.file.save(file_response.content)
|
|
|
|
db.session.add(attachment)
|
|
db.session.flush()
|
|
flash(_('Attachment added'))
|
|
return jsonify_data(attachment_list=_render_attachment_list(self.object))
|
|
return jsonify_template('add_owncloud_files.html', _render_func=render_plugin_template, form=form,
|
|
protection_message=_render_protection_message(self.object),
|
|
folders_protection_info=_get_folders_protection_info(self.object))
|
|
|
|
|
|
class RHAddCategoryAttachmentOwncloud(AddAttachmentOwncloudMixin, RHCategoryAttachmentManagementBase):
|
|
pass
|
|
|
|
|
|
class RHAddEventAttachmentOwncloud(AddAttachmentOwncloudMixin, RHEventAttachmentManagementBase):
|
|
pass
|