aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <213943+nickvergessen@users.noreply.github.com>2022-03-31 13:43:09 +0200
committerGitHub <noreply@github.com>2022-03-31 13:43:09 +0200
commiteea05b05edb229a5834df43983ab6bd97de63e8e (patch)
tree948bee835b54bcb5428b140a3b8c46302587afa5
parent87e079d2ad46cd68cc6693467aa0b855719f7585 (diff)
parentb0b88059b8458bf12528d4fd86451613a3bb5759 (diff)
downloadnextcloud-server-eea05b05edb229a5834df43983ab6bd97de63e8e.tar.gz
nextcloud-server-eea05b05edb229a5834df43983ab6bd97de63e8e.zip
Merge pull request #31737 from nextcloud/fix/oc_oauth2_migration
Wrap oauth2 migrations inside conditions
-rw-r--r--lib/private/Repair/Owncloud/MigrateOauthTables.php37
1 files changed, 24 insertions, 13 deletions
diff --git a/lib/private/Repair/Owncloud/MigrateOauthTables.php b/lib/private/Repair/Owncloud/MigrateOauthTables.php
index 274c2ee28db..4011a043f20 100644
--- a/lib/private/Repair/Owncloud/MigrateOauthTables.php
+++ b/lib/private/Repair/Owncloud/MigrateOauthTables.php
@@ -55,23 +55,34 @@ class MigrateOauthTables implements IRepairStep {
$output->info("Update the oauth2_access_tokens table schema.");
$schema = new SchemaWrapper($this->db);
$table = $schema->getTable('oauth2_access_tokens');
- $table->addColumn('hashed_code', 'string', [
- 'notnull' => true,
- 'length' => 128,
- ]);
- $table->addColumn('encrypted_token', 'string', [
- 'notnull' => true,
- 'length' => 786,
- ]);
- $table->addUniqueIndex(['hashed_code'], 'oauth2_access_hash_idx');
- $table->addIndex(['client_id'], 'oauth2_access_client_id_idx');
-
+ if (!$table->hasColumn('hashed_code')) {
+ $table->addColumn('hashed_code', 'string', [
+ 'notnull' => true,
+ 'length' => 128,
+ ]);
+ }
+ if (!$table->hasColumn('encrypted_token')) {
+ $table->addColumn('encrypted_token', 'string', [
+ 'notnull' => true,
+ 'length' => 786,
+ ]);
+ }
+ if (!$table->hasIndex('oauth2_access_hash_idx')) {
+ $table->addUniqueIndex(['hashed_code'], 'oauth2_access_hash_idx');
+ }
+ if (!$table->hasIndex('oauth2_access_client_id_idx')) {
+ $table->addIndex(['client_id'], 'oauth2_access_client_id_idx');
+ }
$output->info("Update the oauth2_clients table schema.");
$schema = new SchemaWrapper($this->db);
$table = $schema->getTable('oauth2_clients');
- $table->getColumn('name')->setLength(64);
- $table->dropColumn('allow_subdomains');
+ if ($table->getColumn('name')->getLength() !== 64) {
+ $table->getColumn('name')->setLength(64);
+ }
+ if ($table->hasColumn('allow_subdomains')) {
+ $table->dropColumn('allow_subdomains');
+ }
if (!$schema->getTable('oauth2_clients')->hasColumn('client_identifier')) {
$table->addColumn('client_identifier', 'string', [
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
$(document).ready(function() {

	if (typeof FileActions !== 'undefined') {
		FileActions.register('all', 'Restore', OC.PERMISSION_READ, OC.imagePath('core', 'actions/history'), function(filename) {
			var tr=$('tr').filterAttr('data-file', filename);
			var spinner = '<img class="move2trash" title="'+t('files_trashbin', 'perform restore operation')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
			var undeleteAction = $('tr').filterAttr('data-file',filename).children("td.date");
			var files = tr.attr('data-file');
			undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner;
			disableActions();
			$.post(OC.filePath('files_trashbin','ajax','undelete.php'),
				{files:JSON.stringify([files]), dirlisting:tr.attr('data-dirlisting') },
				function(result){
					for (var i = 0; i < result.data.success.length; i++) {
						var row = document.getElementById(result.data.success[i].filename);
						row.parentNode.removeChild(row);
					}
					if (result.status !== 'success') {
						OC.dialogs.alert(result.data.message, t('core', 'Error'));
					}
					enableActions();
					FileList.updateFileSummary();
				});

			});
		};

		FileActions.register('all', 'Delete', OC.PERMISSION_READ, function () {
			return OC.imagePath('core', 'actions/delete');
		}, function (filename) {
			$('.tipsy').remove();

			var tr=$('tr').filterAttr('data-file', filename);
			var deleteAction = $('tr').filterAttr('data-file',filename).children("td.date").children(".action.delete");
			var oldHTML = deleteAction[0].outerHTML;
			var newHTML = '<img class="move2trash" data-action="Delete" title="'+t('files', 'delete file permanently')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
			var files = tr.attr('data-file');
			deleteAction[0].outerHTML = newHTML;
			disableActions();
			$.post(OC.filePath('files_trashbin','ajax','delete.php'),
				{files:JSON.stringify([files]), dirlisting:tr.attr('data-dirlisting') },
				function(result){
					for (var i = 0; i < result.data.success.length; i++) {
						var row = document.getElementById(result.data.success[i].filename);
						row.parentNode.removeChild(row);
					}
					if (result.status !== 'success') {
						OC.dialogs.alert(result.data.message, t('core', 'Error'));
					}
					enableActions();
					FileList.updateFileSummary();
				});

			});

		// Sets the select_all checkbox behaviour :
		$('#select_all').click(function() {
			if($(this).attr('checked')){
				// Check all
				$('td.filename input:checkbox').attr('checked', true);
				$('td.filename input:checkbox').parent().parent().addClass('selected');
			}else{
				// Uncheck all
				$('td.filename input:checkbox').attr('checked', false);
				$('td.filename input:checkbox').parent().parent().removeClass('selected');
			}
			processSelection();
		});

		$('td.filename input:checkbox').live('change',function(event) {
			if (event.shiftKey) {
				var last = $(lastChecked).parent().parent().prevAll().length;
				var first = $(this).parent().parent().prevAll().length;
				var start = Math.min(first, last);
				var end = Math.max(first, last);
				var rows = $(this).parent().parent().parent().children('tr');
				for (var i = start; i < end; i++) {
					$(rows).each(function(index) {
						if (index === i) {
							var checkbox = $(this).children().children('input:checkbox');
							$(checkbox).attr('checked', 'checked');
							$(checkbox).parent().parent().addClass('selected');
						}
					});
				}
			}
			var selectedCount=$('td.filename input:checkbox:checked').length;
			$(this).parent().parent().toggleClass('selected');
			if(!$(this).attr('checked')){
				$('#select_all').attr('checked',false);
			}else{
				if(selectedCount==$('td.filename input:checkbox').length){
					$('#select_all').attr('checked',true);
				}
			}
			processSelection();
		});

		$('.undelete').click('click',function(event) {
			event.preventDefault();
			var spinner = '<img class="move2trash" title="'+t('files_trashbin', 'perform restore operation')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
			var files=getSelectedFiles('file');
			var fileslist = JSON.stringify(files);
			var dirlisting=getSelectedFiles('dirlisting')[0];
			disableActions();
			for (var i=0; i<files.length; i++) {
				var undeleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date");
				undeleteAction[0].innerHTML = undeleteAction[0].innerHTML+spinner;
			}

			$.post(OC.filePath('files_trashbin','ajax','undelete.php'),
					{files:fileslist, dirlisting:dirlisting},
					function(result){
						for (var i = 0; i < result.data.success.length; i++) {
							var row = document.getElementById(result.data.success[i].filename);
							row.parentNode.removeChild(row);
						}
						if (result.status !== 'success') {
							OC.dialogs.alert(result.data.message, t('core', 'Error'));
						}
						enableActions();
					});
			});

		$('.delete').click('click',function(event) {
			event.preventDefault();
			console.log("delete selected");
			var spinner = '<img class="move2trash" title="'+t('files_trashbin', 'Delete permanently')+'" src="'+ OC.imagePath('core', 'loading.gif') +'"></a>';
			var files=getSelectedFiles('file');
			var fileslist = JSON.stringify(files);
			var dirlisting=getSelectedFiles('dirlisting')[0];

			disableActions();
			for (var i=0; i<files.length; i++) {
				var deleteAction = $('tr').filterAttr('data-file',files[i]).children("td.date");
				deleteAction[0].innerHTML = deleteAction[0].innerHTML+spinner;
			}

			$.post(OC.filePath('files_trashbin','ajax','delete.php'),
					{files:fileslist, dirlisting:dirlisting},
					function(result){
						for (var i = 0; i < result.data.success.length; i++) {
							var row = document.getElementById(result.data.success[i].filename);
							row.parentNode.removeChild(row);
						}
						if (result.status !== 'success') {
							OC.dialogs.alert(result.data.message, t('core', 'Error'));
						}
						enableActions();
					});
			});

	$('#fileList').on('click', 'td.filename a', function(event) {
		var mime = $(this).parent().parent().data('mime');
		if (mime !== 'httpd/unix-directory') {
			event.preventDefault();
		}
		var filename = $(this).parent().parent().attr('data-file');
		var tr = $('tr').filterAttr('data-file',filename);
		var renaming = tr.data('renaming');
		if(!renaming && !FileList.isLoading(filename)){
			if(mime.substr(0, 5) === 'text/'){ //no texteditor for now
				return;
			}
			var type = $(this).parent().parent().data('type');
			var permissions = $(this).parent().parent().data('permissions');
			var action = FileActions.getDefault(mime, type, permissions);
			if(action){
				event.preventDefault();
				action(filename);
			}
		}

		// event handlers for breadcrumb items
		$('#controls').delegate('.crumb:not(.home) a', 'click', onClickBreadcrumb);
	});

	FileActions.actions.dir = {
		// only keep 'Open' action for navigation
		'Open': FileActions.actions.dir.Open
	};
});

function processSelection(){
	var selected=getSelectedFiles();
	var selectedFiles=selected.filter(function(el){return el.type === 'file'});
	var selectedFolders=selected.filter(function(el){return el.type === 'dir'});
	if(selectedFiles.length === 0 && selectedFolders.length === 0) {
		$('#headerName>span.name').text(t('files','Name'));
		$('#modified').text(t('files','Deleted'));
		$('table').removeClass('multiselect');
		$('.selectedActions').hide();
	}
	else {
		$('.selectedActions').show();
		var selection='';
		if(selectedFolders.length>0){
			selection += n('files', '%n folder', '%n folders', selectedFolders.length);
			if(selectedFiles.length>0){
				selection+=' & ';
			}
		}
		if(selectedFiles.length>0){
			selection += n('files', '%n file', '%n files', selectedFiles.length);
		}
		$('#headerName>span.name').text(selection);
		$('#modified').text('');
		$('table').addClass('multiselect');
	}
}

/**
 * @brief get a list of selected files
 * @param string property (option) the property of the file requested
 * @return array
 *
 * possible values for property: name, mime, size and type
 * if property is set, an array with that property for each file is returnd
 * if it's ommited an array of objects with all properties is returned
 */
function getSelectedFiles(property){
	var elements=$('td.filename input:checkbox:checked').parent().parent();
	var files=[];
	elements.each(function(i,element){
		var file={
			name:$(element).attr('data-filename'),
			file:$(element).attr('data-file'),
			timestamp:$(element).attr('data-timestamp'),
			type:$(element).attr('data-type'),
			dirlisting:$(element).attr('data-dirlisting')
		};
		if(property){
			files.push(file[property]);
		}else{
			files.push(file);
		}
	});
	return files;
}

function fileDownloadPath(dir, file) {
	return OC.filePath('files_trashbin', '', 'download.php') + '?file='+encodeURIComponent(file);
}

function enableActions() {
	$(".action").css("display", "inline");
	$(":input:checkbox").css("display", "inline");
}

function disableActions() {
	$(".action").css("display", "none");
	$(":input:checkbox").css("display", "none");
}
function onClickBreadcrumb(e){
	var $el = $(e.target).closest('.crumb');
	e.preventDefault();
	FileList.changeDirectory(decodeURIComponent($el.data('dir')));
}