////////////////////////////////////////////////////////////////////////////////////////
//Document Ready
////////////////////////////////////////////////////////////////////////////////////////
function execDocReady() {
var pluginGroups = [
[
"../reference/lightblue4/docs/lib/widgster/widgster.js",
"../reference/lightblue4/docs/lib/slimScroll/jquery.slimscroll.min.js",
"../reference/light-blue/lib/vendor/jquery.ui.widget.js"
],
[
"../reference/jquery-plugins/select2-4.0.2/dist/css/select2_lightblue4.css",
"../reference/jquery-plugins/select2-4.0.2/dist/js/select2.min.js",
"../reference/lightblue4/docs/lib/parsleyjs/dist/parsley.min.js",
"../reference/lightblue4/docs/lib/parsleyjs/dist/i18n/ko.js"
],
[
"../reference/jquery-plugins/dataTables-1.10.16/media/css/jquery.dataTables_lightblue4.css",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/css/responsive.dataTables_lightblue4.css",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/css/select.dataTables_lightblue4.css",
"../reference/jquery-plugins/dataTables-1.10.16/media/js/jquery.dataTables.min.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/js/dataTables.responsive.min.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/js/dataTables.select.min.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/RowGroup/js/dataTables.rowsGroup.min.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/dataTables.buttons.min.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.html5.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.print.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/jszip.min.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/pdfmake.min.js",
"../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/vfs_fonts.js"
],
["../arms/js/common/table_new.js"]
// 추가적인 플러그인 그룹들을 이곳에 추가하면 됩니다.
];
loadPluginGroupsParallelAndSequential(pluginGroups)
.then(function () {
console.log("모든 플러그인 로드 완료");
// 사이드 메뉴 색상 설정
$(".widget").widgster();
setSideMenu("sidebar_menu_security", "sidebar_menu_security_user");
var resetUserForm = function () {
$("#select_role").val("").trigger("change");
$("#select_group").val("").trigger("change");
$("#user_form").trigger("reset");
$("#profile_image").empty();
$("#profile_image").append($("").addClass("fa fa-user").css({ fontSize: "50px", paddingTop: "8px" }));
};
$("#user_table")
.trigger($.Event("init.user_list"))
.on("select.table", function (event, selectedData) {
resetUserForm();
$("#input_username").attr("disabled", true);
$("#btn_submit").removeClass("btn-primary").addClass("btn-success").text("유저 정보 수정");
$("#btn_delete").removeClass("hidden");
$("#select_role_wrapper").removeClass("hidden");
$("#select_group_wrapper").removeClass("hidden");
$.when(
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id + "/role-mappings/realm",
success: function (data) {
$("#select_role")
.val(
data.map(function (role) {
return role.id;
})
)
.trigger("change");
}
}),
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id + "/groups",
success: function (data) {
$("#select_group")
.val(
data.map(function (group) {
return group.id;
})
)
.trigger("change");
}
})
).done(function () {
$("[data-mh='securityUser']").matchHeight();
});
$("#user_form")
.find("input")
.each(function () {
var $self = $(this);
var key = $self.attr("name");
$self.val(selectedData[key]);
});
})
.on("deselect.table", function () {
$("#input_username").attr("disabled", false);
$("#btn_submit").removeClass("btn-success").addClass("btn-primary").text("신규 유저 생성");
$("#btn_delete").addClass("hidden");
$("#select_role_wrapper").addClass("hidden");
$("#select_group_wrapper").addClass("hidden");
resetUserForm();
$("[data-mh='securityUser']").matchHeight();
})
.one("draw.dt", function () {
var params = new URLSearchParams(window.location.search);
var userId = params.get("userId");
if (userId) {
$(this).table().table.rows({ id: userId }).nodes().to$().trigger("click");
}
});
$.ajax({
url: "/auth-admin/realms/master/roles",
success: function (data) {
$("#select_role")
.select2({
data: data.map(function (role) {
return $.extend(role, { id: role.id, text: role.name });
})
})
.on("select2:select", function (event) {
delete event.params.data.element;
var selectedData = $("#user_table").table().getSelectedData();
if (selectedData) {
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id + "/role-mappings/realm",
type: "post",
contentType: "application/json;charset=utf-8",
data: JSON.stringify([event.params.data])
});
}
})
.on("select2:unselect", function (event) {
delete event.params.data.element;
var selectedData = $("#user_table").table().getSelectedData();
if (selectedData) {
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id + "/role-mappings/realm",
type: "delete",
contentType: "application/json;charset=utf-8",
data: JSON.stringify([event.params.data])
});
}
});
}
});
$.ajax({
url: "/auth-admin/realms/master/groups",
success: function (groups) {
var getGroups = function (accGroup, group) {
accGroup.push($.extend(group, { id: group.id, text: group.path.slice(1) }));
if (group.subGroups.length > 0) {
group.subGroups.forEach(function (subGroup) {
getGroups(accGroup, subGroup);
});
}
return accGroup;
};
$("#select_group")
.select2({
data: groups.reduce(function (accGroup, group) {
return getGroups(accGroup, group);
}, [])
})
.on("select2:select", function (event) {
var selectedData = $("#user_table").table().getSelectedData();
if (selectedData) {
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id + "/groups/" + event.params.data.id,
type: "put"
});
}
})
.on("select2:unselect", function (event) {
var selectedData = $("#user_table").table().getSelectedData();
if (selectedData) {
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id + "/groups/" + event.params.data.id,
type: "delete"
});
}
});
}
});
$("#btn_cancel").on("click", function () {
resetUserForm();
var selectedData = $("#user_table").table().getSelectedData();
if (selectedData) {
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id + "/role-mappings/realm",
success: function (data) {
$("#select_role")
.val(
data.map(function (role) {
return role.id;
})
)
.trigger("change");
}
});
$("#user_form")
.find("input")
.each(function () {
var $self = $(this);
var key = $self.attr("name");
$self.val(selectedData[key]);
});
}
});
$("#delete_user_modal").on("show.bs.modal", function () {
var selectedData = $("#user_table").table().getSelectedData();
$("#deleteUserUsername").text(selectedData.username);
});
$("#btn_confirm_delete").on("click", function () {
var selectedData = $("#user_table").table().getSelectedData();
$.ajax({
url: "/auth-admin/realms/master/user/" + selectedData.id,
type: "delete",
success: function () {
$("#delete_user_modal").modal("hide");
$("#input_username").attr("disabled", false);
$("#btn_submit").removeClass("btn-success").addClass("btn-primary").text("신규 유저 생성");
$("#btn_delete").addClass("hidden");
$("#select_role_wrapper").addClass("hidden");
$("#select_group_wrapper").addClass("hidden");
resetUserForm();
$("#user_table").table().table.ajax.reload();
jSuccess("유저가 삭제되었습니다.");
},
error: function () {
jError("유저 삭제 중 오류가 발생했습니다.");
}
});
});
$("#user_form").on("submit", function (event) {
event.preventDefault();
var selectedData = $("#user_table").table().getSelectedData();
var userRepresentation = Object.fromEntries(new FormData(event.target));
var url = "/auth-admin/realms/master/user";
var type = "post";
var success = function () {
$("#user_table").table().table.ajax.reload();
jSuccess("유저가 생성되었습니다.");
};
var error = function (xhr) {
jError("유저 생성에 실패했습니다: " + (xhr.responseJSON?.error || "알 수 없는 오류"));
};
if (selectedData) {
url += "/" + selectedData.id;
type = "put";
success = function () {
$("#user_table").table().table.ajax.reload();
jSuccess("유저 정보가 수정되었습니다.");
};
error = function (xhr) {
jError("유저 정보 수정에 실패했습니다: " + (xhr.responseJSON?.error || "알 수 없는 오류"));
};
}
$.ajax({
url: url,
withCredentials: true,
type: type,
contentType: "application/json;charset=utf-8",
data: JSON.stringify(userRepresentation),
success: success,
error: error
});
return false;
});
$("#profile").on("change", function (event) {
try {
var reader = new FileReader();
var file = event.target.files[0];
if (file) {
reader.readAsDataURL(file);
reader.onload = function () {
var imageUrl =
typeof reader.result === "string"
? reader.result
: String.fromCharCode.apply(null, new Uint16Array(reader.result));
$("#profile_image").empty();
$("#profile_image").append(
$("
")
.attr("src", imageUrl)
.attr("alt", "Profile Image")
.css({ width: "100%", height: "100%", objectFit: "cover" })
);
};
}
} catch (error) {
console.error(error);
}
});
$("#btn_profile_remove").on("click", function () {
$("#profile_image").empty();
$("#profile_image").append($("").addClass("fa fa-user").css({ fontSize: "50px", paddingTop: "8px" }));
});
})
.catch(function (error) {
console.error("플러그인 로드 중 오류 발생");
console.error(error);
});
}
+(function ($) {
"use strict";
var columnList = [
{
name: "firstName",
title: "FIRST NAME",
data: "firstName",
render: function (data) {
return ![null, undefined, ""].includes(data)
? "" + data + ""
: "N/A";
}
},
{
name: "lastName",
title: "LAST NAME",
data: "lastName",
render: function (data) {
return ![null, undefined, ""].includes(data)
? "" + data + ""
: "N/A";
}
},
{
name: "username",
title: "ID",
data: "username",
render: function (data) {
return ![null, undefined, ""].includes(data)
? "" + data + ""
: "N/A";
}
},
{
name: "createdTimestamp",
title: "Created Date",
data: "createdTimestamp",
render: function (data) {
return ![null, undefined, ""].includes(data)
? "" + data + ""
: "N/A";
}
}
];
$(document).on("init.user_list", function (event) {
$(event.target).table({
columns: columnList,
dom: "Blfrtip",
buttons: [
{
extend: "excel",
charset: "UTF-8",
bom: true,
className: "btn btn-default btn-sm margin-bottom"
}
],
ajax: {
url: "/auth-admin/realms/master/users",
dataSrc: function (json) {
return json.reduce(function (users, user) {
return users.concat($.extend(user, { createdTimestamp: new Date(user.createdTimestamp).toLocaleString() }));
}, []);
}
},
drawCallback: function () {
$("[data-mh='securityUser']").matchHeight();
}
});
});
})(jQuery);