Allow selection of SSL certificates and pgpass files in connection properties. Fixes #2649. Fixes #2650

This commit is contained in:
Murtuza Zabuawala
2017-09-28 10:02:33 +01:00
committed by Dave Page
parent 510bc6c974
commit f855ed88ce
14 changed files with 439 additions and 58 deletions

View File

@@ -156,7 +156,8 @@ class FileManagerModule(PgAdminModule):
'file_manager.get_trans_id',
'file_manager.delete_trans_id',
'file_manager.save_last_dir',
'file_manager.save_file_dialog_view'
'file_manager.save_file_dialog_view',
'file_manager.save_show_hidden_file_option'
]
def get_file_size_preference(self):
@@ -181,6 +182,11 @@ class FileManagerModule(PgAdminModule):
options=[{'label': gettext('List'), 'value': 'list'},
{'label': gettext('Grid'), 'value': 'grid'}]
)
self.show_hidden_files = self.preference.register(
'options', 'show_hidden_files',
gettext("Show hidden files and folders?"), 'boolean', False,
category_label=gettext('Options')
)
# Initialise the module
@@ -243,13 +249,18 @@ def file_manager_config(trans_id):
data = Filemanager.get_trasaction_selection(trans_id)
pref = Preferences.module('file_manager')
file_dialog_view = pref.preference('file_dialog_view').get()
show_hidden_files = pref.preference('show_hidden_files').get()
return Response(response=render_template(
"file_manager/js/file_manager_config.json", _=gettext,
data=data,
file_dialog_view=file_dialog_view),
"file_manager/js/file_manager_config.json",
_=gettext,
data=data,
file_dialog_view=file_dialog_view,
show_hidden_files=show_hidden_files
),
status=200,
mimetype="application/json")
mimetype="application/json"
)
@blueprint.route(
@@ -300,6 +311,17 @@ def save_file_dialog_view(trans_id):
data={'status': True}
)
@blueprint.route(
"/save_show_hidden_file_option/<int:trans_id>", methods=["PUT"],
endpoint='save_show_hidden_file_option'
)
@login_required
def save_show_hidden_file_option(trans_id):
blueprint.show_hidden_files.set(req.json['show_hidden'])
return make_json_response(
data={'status': True}
)
class Filemanager(object):
"""FileManager Class."""
@@ -521,12 +543,14 @@ class Filemanager(object):
kernel32.SetThreadErrorMode(oldmode, ctypes.byref(oldmode))
@staticmethod
def list_filesystem(dir, path, trans_data, file_type):
def list_filesystem(dir, path, trans_data, file_type, show_hidden):
"""
It lists all file and folders within the given
directory.
"""
Filemanager.suspend_windows_warning()
is_show_hidden_files = show_hidden
path = unquote(path)
if hasattr(str, 'decode'):
path = unquote(path).encode('utf-8').decode('utf-8')
@@ -595,8 +619,9 @@ class Filemanager(object):
protected = 0
system_path = os.path.join(os.path.join(orig_path, f))
# continue if file/folder is hidden
if is_folder_hidden(system_path) or f.startswith('.'):
# continue if file/folder is hidden (based on user preference)
if not is_show_hidden_files and \
(is_folder_hidden(system_path) or f.startswith('.')):
continue
user_path = os.path.join(os.path.join(user_dir, f))
@@ -784,7 +809,8 @@ class Filemanager(object):
return thefile
def getfolder(self, path=None, file_type="", name=None, req=None):
def getfolder(self, path=None, file_type="", name=None, req=None,
show_hidden=False):
"""
Returns files and folders in give path
"""
@@ -795,7 +821,7 @@ class Filemanager(object):
if not dir.endswith('/'):
dir += u'/'
filelist = self.list_filesystem(dir, path, trans_data, file_type)
filelist = self.list_filesystem(dir, path, trans_data, file_type, show_hidden)
return filelist
def rename(self, old=None, new=None, req=None):

View File

@@ -555,7 +555,6 @@ button.list span {
.allowed_file_types .change_file_types label {
float: right;
padding-top: 3px;
}
.upload_file .file_upload_main {
@@ -726,3 +725,7 @@ a.dz-remove {
height: 100%;
background: #ccc;
}
div.change_file_types span {
padding-left:10px;
}

View File

@@ -43,6 +43,7 @@ var getFileName = function(name) {
var loadData = function(url) {
return $.ajax({
async: false,
cache: false,
url: url,
dataType: 'jsonp',
contentType: "application/json; charset=utf-8"
@@ -70,6 +71,16 @@ var save_file_dialog_view = function(view, trans_id) {
});
};
var save_show_hidden_file_option = function(option, trans_id) {
return $.ajax({
url: url_for('file_manager.save_show_hidden_file_option', {'trans_id': trans_id}),
type: 'PUT',
async: true,
data: JSON.stringify({'show_hidden': option}),
contentType: 'application/json'
});
};
/*
* preg_replace
@@ -523,7 +534,8 @@ var getFolderInfo = function(path, file_type) {
var post_data = {
'path': path,
'mode': 'getfolder',
'file_type': file_type || "*"
'file_type': file_type || "*",
'show_hidden': $('#show_hidden').prop('checked')
};
var lg = pgAdmin.FileUtils.lg;
@@ -1110,6 +1122,9 @@ pgAdmin.FileUtils = {
have_all_types = false;
var select_box = "<div class='change_file_types'>" +
gettext("Show hidden files and folders") +
"? <input type='checkbox' id='show_hidden' onclick='pgAdmin.FileUtils.handleClick(this)'>" +
"<span></span>" +
"<select name='type'>";
while(i < types_len) {
@@ -1139,6 +1154,31 @@ pgAdmin.FileUtils = {
curr_path = $('.currentpath').val();
getFolderInfo(curr_path, selected_val);
});
// If user have preference to show hidden files
if (config.options.show_hidden_files) {
setTimeout(function() {
$("#show_hidden").click();
}, 10);
}
// handle show hidden files functionality
this.handleClick = function(cb) {
var data = {
'is_checked': false
};
if(cb.checked) {
$("div.allowed_file_types select").val("*").trigger("change");
data['is_checked'] = true;
} else {
// User wants to hide it again
$("div.allowed_file_types select").prop('selectedIndex', 0).trigger("change");
data['is_checked'] = false;
}
// Save it in preference
save_show_hidden_file_option(data['is_checked'], pgAdmin.FileUtils.transId);
return;
}
}
/*---------------------------------------------------------

View File

@@ -6,6 +6,7 @@
"autoload": true,
"showFullPath": false,
"dialog_type": "{{data.dialog_type}}",
"show_hidden_files": {% if show_hidden_files %}true{% else %}false{% endif%},
"fileRoot": "{{data.fileroot}}",
"capabilities": [{% for i in data.capabilities %}{% if loop.index != 1 %}, {% endif %}"{{i}}"{% endfor %}],
"allowed_file_types": [{% for i in data.supported_types %}{% if loop.index != 1 %}, {% endif %}"{{i}}"{% endfor %}],