def copy_to_theme(request): selected_theme = request.GET.get("theme_edit", get_theme()) if not is_valid_theme(selected_theme): raise Http404(_('Specified theme does not exist')) if is_theme_read_only(selected_theme): raise Http403 app = request.GET.get("app", None) current_dir = request.GET.get("dir", '') if current_dir: current_dir = current_dir.replace('\\', '/') current_dir = current_dir.strip('/') current_dir = current_dir.replace('////', '/') current_dir = current_dir.replace('///', '/') current_dir = current_dir.replace('//', '/') chosen_file = request.GET.get("file", '') if chosen_file: chosen_file = chosen_file.replace('\\', '/') chosen_file = chosen_file.strip('/') chosen_file = chosen_file.replace('////', '/') chosen_file = chosen_file.replace('///', '/') chosen_file = chosen_file.replace('//', '/') if app in app_templates: root = app_templates[app] elif is_valid_theme(app): root = os.path.join(get_theme_root(app), 'templates') else: if '/' in app and app.split('/')[0] == 'builtin': builtin_base_name = app.split('/')[1] root = os.path.join( settings.TENDENCI_ROOT, "themes/{}/templates".format(builtin_base_name)) else: raise Http404(_('Specified theme or app does not exist')) if (not is_valid_path(root, current_dir) or not is_valid_path(root, os.path.join(current_dir, chosen_file))): raise Http403 full_filename = os.path.join(root, current_dir, chosen_file) if not os.path.isfile(full_filename): raise Http404 copy_file_to_theme(full_filename, selected_theme, os.path.join('templates', current_dir), chosen_file) msg_string = 'Successfully copied %s/%s to theme' % (current_dir, chosen_file) messages.add_message(request, messages.SUCCESS, _(msg_string)) EventLog.objects.log() return redirect('theme_editor.editor')
def callback(file_path, uuid, selected_theme=selected_theme, file_dir=file_dir, overwrite=overwrite): theme_root = get_theme_root(selected_theme) file_name = os.path.basename(file_path) full_filename = os.path.join(file_dir, file_name) if (not is_valid_path(theme_root, file_dir) or not is_valid_path(theme_root, full_filename)): raise Http403 if os.path.isfile(os.path.join(theme_root, full_filename)) and not overwrite: msg_string = 'File %s already exists in that folder.' % (file_name) raise uploader.CallbackError(msg_string) copy_file_to_theme(file_path, selected_theme, file_dir, file_name) EventLog.objects.log()