Feature: Clone existing user via web admin (#259)

UI based cloning of an existing user. The "add user" screen is prepopulated with existing user data.

Resolves drakkan/sftpgo#225
This commit is contained in:
Jochen Munz
2020-12-26 14:58:59 +01:00
committed by GitHub
parent 2a95d031ea
commit bc397002d4
2 changed files with 32 additions and 2 deletions

View File

@@ -678,7 +678,26 @@ func handleGetWebUsers(w http.ResponseWriter, r *http.Request) {
}
func handleWebAddUserGet(w http.ResponseWriter, r *http.Request) {
renderAddUserPage(w, dataprovider.User{Status: 1}, "")
if r.URL.Query().Get("cloneFromId") != "" {
id, err := strconv.ParseInt(r.URL.Query().Get("cloneFromId"), 10, 64)
if err != nil {
renderBadRequestPage(w, err)
return
}
user, err := dataprovider.GetUserByID(id)
if err == nil {
user.ID = 0
user.Username = ""
renderAddUserPage(w, user, "")
} else if _, ok := err.(*dataprovider.RecordNotFoundError); ok {
renderNotFoundPage(w, err)
} else {
renderInternalServerErrorPage(w, err)
}
} else {
user := dataprovider.User{Status: 1}
renderAddUserPage(w, user, "")
}
}
func handleWebUpdateUserGet(w http.ResponseWriter, r *http.Request) {

View File

@@ -147,6 +147,16 @@
enabled: false
};
$.fn.dataTable.ext.buttons.clone = {
text: 'Clone',
action: function (e, dt, node, config) {
var userID = dt.row({ selected: true }).data()[0];
var path = '{{.UserURL}}' + "?cloneFromId=" + userID;
window.location.href = path;
},
enabled: false
};
$.fn.dataTable.ext.buttons.delete = {
text: 'Delete',
action: function (e, dt, node, config) {
@@ -212,7 +222,7 @@
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
select: true,
buttons: [
'add', 'edit', 'delete', 'quota_scan'
'add', 'edit', 'clone', 'delete', 'quota_scan'
],
"columnDefs": [
{
@@ -230,6 +240,7 @@
table.button(1).enable(selectedRows == 1);
table.button(2).enable(selectedRows == 1);
table.button(3).enable(selectedRows == 1);
table.button(4).enable(selectedRows == 1);
});
});
</script>