[api] SSO 관리 작업
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
package com.alist.api.modules.admin.sso;
|
||||
|
||||
import com.alist.api.common.response.ApiResponse;
|
||||
import com.alist.api.common.response.ApiResponseCode;
|
||||
import com.alist.api.modules.admin.sso.form.AdminSsoAddForm;
|
||||
import com.alist.api.modules.admin.sso.form.AdminSsoDeleteForm;
|
||||
import com.alist.api.modules.admin.sso.form.AdminSsoListForm;
|
||||
import com.alist.api.modules.admin.sso.form.AdminSsoModifyForm;
|
||||
import com.alist.api.modules.admin.sso.service.AdminSsoService;
|
||||
import com.alist.api.modules.admin.sso.vo.*;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name = "505. SSO 클라이언트 관리", description = "관리자 SSO 클라이언트 관리 API")
|
||||
@RestController
|
||||
@RequestMapping("/admin/sso")
|
||||
public class AdminSsoController {
|
||||
private final AdminSsoService adminSsoService;
|
||||
|
||||
public AdminSsoController(AdminSsoService adminSsoService) {
|
||||
this.adminSsoService = adminSsoService;
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "SSO 클라이언트 목록 조회"
|
||||
, description = "관리자가 SSO 클라이언트 목록을 검색 조건과 페이징으로 조회합니다."
|
||||
)
|
||||
@GetMapping("/list")
|
||||
public ResponseEntity<ApiResponse<AdminSsoListVo>> adminSsoList(
|
||||
@ModelAttribute AdminSsoListForm adminSsoListForm
|
||||
) {
|
||||
AdminSsoListVo adminSsoListVo = adminSsoService.selectAdminSsoList(adminSsoListForm.toDto());
|
||||
|
||||
if (adminSsoListVo.getSsoList() == null || adminSsoListVo.getSsoList().isEmpty()) {
|
||||
return ApiResponse.entity(adminSsoListVo, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(adminSsoListVo, ApiResponseCode.CODE_2001, "SSO 클라이언트");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "SSO 클라이언트 상세 조회"
|
||||
, description = "관리자가 SSO 클라이언트 PK 기준으로 상세 정보를 조회합니다."
|
||||
)
|
||||
@GetMapping("/view")
|
||||
public ResponseEntity<ApiResponse<AdminSsoViewVo>> adminSsoView(
|
||||
@RequestParam Integer ssoClientIdx
|
||||
) {
|
||||
AdminSsoViewVo adminSsoViewVo = adminSsoService.selectAdminSsoView(ssoClientIdx);
|
||||
|
||||
if (adminSsoViewVo == null) {
|
||||
return ApiResponse.entity((AdminSsoViewVo) null, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(adminSsoViewVo, ApiResponseCode.CODE_2001, "SSO 클라이언트");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "SSO 클라이언트 등록"
|
||||
, description = "관리자가 SSO 클라이언트를 등록합니다. CLIENT_ID가 중복되면 등록하지 않습니다."
|
||||
)
|
||||
@PostMapping("/add")
|
||||
public ResponseEntity<ApiResponse<AdminSsoAddVo>> adminSsoAdd(
|
||||
@Valid @RequestBody AdminSsoAddForm adminSsoAddForm
|
||||
) {
|
||||
AdminSsoAddVo adminSsoAddVo = adminSsoService.insertAdminSsoAdd(adminSsoAddForm.toDto());
|
||||
|
||||
if (adminSsoAddVo.getResultCode() == 401) {
|
||||
return ApiResponse.entity(adminSsoAddVo, ApiResponseCode.CODE_401);
|
||||
}
|
||||
|
||||
if (!adminSsoAddVo.isProcessed()) {
|
||||
return ApiResponse.entity(adminSsoAddVo, ApiResponseCode.CODE_2004, "SSO 클라이언트");
|
||||
}
|
||||
|
||||
return ApiResponse.entity(adminSsoAddVo, ApiResponseCode.CODE_2002, "SSO 클라이언트");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "SSO 클라이언트 수정"
|
||||
, description = "관리자가 SSO 클라이언트 PK 기준으로 클라이언트 ID, 이름, redirect URI 등 기본 정보를 수정합니다."
|
||||
)
|
||||
@PutMapping("/modify")
|
||||
public ResponseEntity<ApiResponse<AdminSsoModifyVo>> adminSsoModify(
|
||||
@Valid @RequestBody AdminSsoModifyForm adminSsoModifyForm
|
||||
) {
|
||||
AdminSsoModifyVo adminSsoModifyVo = adminSsoService.updateAdminSsoModify(adminSsoModifyForm.toDto());
|
||||
|
||||
if (adminSsoModifyVo.getResultCode() == 401) {
|
||||
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_401);
|
||||
}
|
||||
|
||||
if (adminSsoModifyVo.getResultCode() == 2004) {
|
||||
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_2004, "SSO 클라이언트");
|
||||
}
|
||||
|
||||
if (!adminSsoModifyVo.isProcessed()) {
|
||||
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(adminSsoModifyVo, ApiResponseCode.CODE_2005, "SSO 클라이언트 수정");
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "SSO 클라이언트 삭제"
|
||||
, description = "관리자가 SSO 클라이언트 PK 기준으로 삭제 처리합니다. 실제 삭제가 아닌 DEL_YN 변경 방식입니다."
|
||||
)
|
||||
@PatchMapping("/delete")
|
||||
public ResponseEntity<ApiResponse<AdminSsoDeleteVo>> adminSsoDelete(
|
||||
@Valid @RequestBody AdminSsoDeleteForm adminSsoDeleteForm
|
||||
) {
|
||||
AdminSsoDeleteVo adminSsoDeleteVo = adminSsoService.updateAdminSsoDelete(adminSsoDeleteForm.toDto());
|
||||
|
||||
if (adminSsoDeleteVo.getResultCode() == 401) {
|
||||
return ApiResponse.entity(adminSsoDeleteVo, ApiResponseCode.CODE_401);
|
||||
}
|
||||
|
||||
if (!adminSsoDeleteVo.isProcessed()) {
|
||||
return ApiResponse.entity(adminSsoDeleteVo, ApiResponseCode.CODE_2003);
|
||||
}
|
||||
|
||||
return ApiResponse.entity(adminSsoDeleteVo, ApiResponseCode.CODE_2005, "SSO 클라이언트 삭제");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.alist.api.modules.admin.sso.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoAddDto {
|
||||
private Integer ssoClientIdx;
|
||||
private String clientId;
|
||||
private String clientName;
|
||||
private String redirectUri;
|
||||
private String memo;
|
||||
private String useYn;
|
||||
private Integer createMember;
|
||||
private Integer updateMember;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.alist.api.modules.admin.sso.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoDeleteDto {
|
||||
private Integer ssoClientIdx;
|
||||
private Integer updateMember;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.alist.api.modules.admin.sso.dto;
|
||||
|
||||
import com.alist.api.common.paging.PageRequest;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoListDto extends PageRequest {
|
||||
private String keyword;
|
||||
private String useYn;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.alist.api.modules.admin.sso.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoModifyDto {
|
||||
private Integer ssoClientIdx;
|
||||
private String clientId;
|
||||
private String clientName;
|
||||
private String redirectUri;
|
||||
private String memo;
|
||||
private String useYn;
|
||||
private Integer updateMember;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.alist.api.modules.admin.sso.form;
|
||||
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoAddDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 등록 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoAddForm {
|
||||
@NotBlank
|
||||
@Size(max = 100)
|
||||
@Schema(description = "클라이언트 식별자", example = "a-campus-client", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String clientId;
|
||||
|
||||
@NotBlank
|
||||
@Size(max = 200)
|
||||
@Schema(description = "클라이언트명", example = "a-campus.co.kr", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String clientName;
|
||||
|
||||
@NotBlank
|
||||
@Size(max = 500)
|
||||
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/auth/callback", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String redirectUri;
|
||||
|
||||
@Size(max = 500)
|
||||
@Schema(description = "비고", example = "운영")
|
||||
private String memo;
|
||||
|
||||
@Pattern(regexp = "Y|N")
|
||||
@Schema(description = "사용 여부. Y: 사용, N: 미사용. 미입력 시 Y", example = "Y")
|
||||
private String useYn;
|
||||
|
||||
public AdminSsoAddDto toDto() {
|
||||
AdminSsoAddDto adminSsoAddDto = new AdminSsoAddDto();
|
||||
adminSsoAddDto.setClientId(clientId.trim());
|
||||
adminSsoAddDto.setClientName(clientName.trim());
|
||||
adminSsoAddDto.setRedirectUri(redirectUri.trim());
|
||||
adminSsoAddDto.setMemo(memo == null ? null : memo.trim());
|
||||
adminSsoAddDto.setUseYn(useYn == null || useYn.trim().isEmpty() ? "Y" : useYn.trim());
|
||||
return adminSsoAddDto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.alist.api.modules.admin.sso.form;
|
||||
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 삭제 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoDeleteForm {
|
||||
@NotNull
|
||||
@Schema(description = "SSO 클라이언트 PK", example = "19", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer ssoClientIdx;
|
||||
|
||||
public AdminSsoDeleteDto toDto() {
|
||||
AdminSsoDeleteDto adminSsoDeleteDto = new AdminSsoDeleteDto();
|
||||
adminSsoDeleteDto.setSsoClientIdx(ssoClientIdx);
|
||||
return adminSsoDeleteDto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.alist.api.modules.admin.sso.form;
|
||||
|
||||
import com.alist.api.common.paging.PageRequest;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoListDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 목록 검색 조건")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoListForm extends PageRequest {
|
||||
@Schema(description = "검색어. 클라이언트 ID, 클라이언트명, redirect URI, 비고를 대상으로 검색합니다.", example = "client")
|
||||
private String keyword;
|
||||
|
||||
@Schema(description = "사용 여부. Y: 사용, N: 미사용", example = "Y")
|
||||
private String useYn;
|
||||
|
||||
public AdminSsoListDto toDto() {
|
||||
AdminSsoListDto adminSsoListDto = new AdminSsoListDto();
|
||||
adminSsoListDto.setPage(getPage());
|
||||
adminSsoListDto.setSize(getSize());
|
||||
adminSsoListDto.setKeyword(keyword == null ? null : keyword.trim());
|
||||
adminSsoListDto.setUseYn(useYn == null ? null : useYn.trim());
|
||||
return adminSsoListDto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.alist.api.modules.admin.sso.form;
|
||||
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 수정 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoModifyForm {
|
||||
@NotNull
|
||||
@Schema(description = "SSO 클라이언트 PK", example = "19", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer ssoClientIdx;
|
||||
|
||||
@NotBlank
|
||||
@Size(max = 100)
|
||||
@Schema(description = "클라이언트 식별자", example = "a-campus-client", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String clientId;
|
||||
|
||||
@NotBlank
|
||||
@Size(max = 200)
|
||||
@Schema(description = "클라이언트명", example = "a-campus.co.kr", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String clientName;
|
||||
|
||||
@NotBlank
|
||||
@Size(max = 500)
|
||||
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/auth/callback", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String redirectUri;
|
||||
|
||||
@Size(max = 500)
|
||||
@Schema(description = "비고", example = "운영")
|
||||
private String memo;
|
||||
|
||||
@Pattern(regexp = "Y|N")
|
||||
@Schema(description = "사용 여부. Y: 사용, N: 미사용. 미입력 시 Y", example = "Y")
|
||||
private String useYn;
|
||||
|
||||
public AdminSsoModifyDto toDto() {
|
||||
AdminSsoModifyDto adminSsoModifyDto = new AdminSsoModifyDto();
|
||||
adminSsoModifyDto.setSsoClientIdx(ssoClientIdx);
|
||||
adminSsoModifyDto.setClientId(clientId.trim());
|
||||
adminSsoModifyDto.setClientName(clientName.trim());
|
||||
adminSsoModifyDto.setRedirectUri(redirectUri.trim());
|
||||
adminSsoModifyDto.setMemo(memo == null ? null : memo.trim());
|
||||
adminSsoModifyDto.setUseYn(useYn == null || useYn.trim().isEmpty() ? "Y" : useYn.trim());
|
||||
return adminSsoModifyDto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.alist.api.modules.admin.sso.mapper;
|
||||
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoAddDto;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoListDto;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto;
|
||||
import com.alist.api.modules.admin.sso.vo.AdminSsoViewVo;
|
||||
import com.alist.api.modules.admin.sso.vo.AdminSsoVo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface AdminSsoMapper {
|
||||
int selectAdminSsoCount(AdminSsoListDto adminSsoListDto);
|
||||
|
||||
List<AdminSsoVo> selectAdminSsoList(AdminSsoListDto adminSsoListDto);
|
||||
|
||||
AdminSsoViewVo selectAdminSsoView(Integer ssoClientIdx);
|
||||
|
||||
int selectAdminSsoDuplicateCount(AdminSsoAddDto adminSsoAddDto);
|
||||
|
||||
int insertAdminSsoAdd(AdminSsoAddDto adminSsoAddDto);
|
||||
|
||||
int selectAdminSsoModifyDuplicateCount(AdminSsoModifyDto adminSsoModifyDto);
|
||||
|
||||
int updateAdminSsoModify(AdminSsoModifyDto adminSsoModifyDto);
|
||||
|
||||
int updateAdminSsoDelete(AdminSsoDeleteDto adminSsoDeleteDto);
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
package com.alist.api.modules.admin.sso.service;
|
||||
|
||||
import com.alist.api.common.utils.SecurityUtil;
|
||||
import com.alist.api.modules.admin.auth.mapper.AdminAuthMapper;
|
||||
import com.alist.api.modules.admin.auth.vo.AdminAuthLoginVo;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoAddDto;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoListDto;
|
||||
import com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto;
|
||||
import com.alist.api.modules.admin.sso.mapper.AdminSsoMapper;
|
||||
import com.alist.api.modules.admin.sso.vo.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class AdminSsoService {
|
||||
private final AdminSsoMapper adminSsoMapper;
|
||||
private final AdminAuthMapper adminAuthMapper;
|
||||
|
||||
public AdminSsoService(AdminSsoMapper adminSsoMapper, AdminAuthMapper adminAuthMapper) {
|
||||
this.adminSsoMapper = adminSsoMapper;
|
||||
this.adminAuthMapper = adminAuthMapper;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public AdminSsoListVo selectAdminSsoList(AdminSsoListDto adminSsoListDto) {
|
||||
int totalCount = adminSsoMapper.selectAdminSsoCount(adminSsoListDto);
|
||||
List<AdminSsoVo> ssoList = adminSsoMapper.selectAdminSsoList(adminSsoListDto);
|
||||
|
||||
AdminSsoListVo adminSsoListVo = new AdminSsoListVo();
|
||||
adminSsoListVo.setSsoList(ssoList);
|
||||
adminSsoListVo.setPaging(adminSsoListDto, totalCount);
|
||||
|
||||
return adminSsoListVo;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public AdminSsoViewVo selectAdminSsoView(Integer ssoClientIdx) {
|
||||
return adminSsoMapper.selectAdminSsoView(ssoClientIdx);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public AdminSsoAddVo insertAdminSsoAdd(AdminSsoAddDto adminSsoAddDto) {
|
||||
AdminSsoAddVo adminSsoAddVo = new AdminSsoAddVo();
|
||||
|
||||
Integer loginUserTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||
|
||||
if (loginUserTokenIdx == null) {
|
||||
adminSsoAddVo.setResultCode(401);
|
||||
adminSsoAddVo.setProcessed(false);
|
||||
return adminSsoAddVo;
|
||||
}
|
||||
|
||||
AdminAuthLoginVo adminAuthLoginVo = adminAuthMapper.selectAdminTokenByUserTokenIdx(loginUserTokenIdx);
|
||||
|
||||
if (adminAuthLoginVo == null || adminAuthLoginVo.getUserIdx() == null) {
|
||||
adminSsoAddVo.setResultCode(401);
|
||||
adminSsoAddVo.setProcessed(false);
|
||||
return adminSsoAddVo;
|
||||
}
|
||||
|
||||
adminSsoAddDto.setCreateMember(adminAuthLoginVo.getUserIdx());
|
||||
adminSsoAddDto.setUpdateMember(adminAuthLoginVo.getUserIdx());
|
||||
|
||||
int duplicateCount = adminSsoMapper.selectAdminSsoDuplicateCount(adminSsoAddDto);
|
||||
|
||||
if (duplicateCount > 0) {
|
||||
adminSsoAddVo.setResultCode(2004);
|
||||
adminSsoAddVo.setProcessed(false);
|
||||
return adminSsoAddVo;
|
||||
}
|
||||
|
||||
int insertCount = adminSsoMapper.insertAdminSsoAdd(adminSsoAddDto);
|
||||
|
||||
adminSsoAddVo.setResultCode(2002);
|
||||
adminSsoAddVo.setProcessed(insertCount > 0);
|
||||
adminSsoAddVo.setSsoClientIdx(adminSsoAddDto.getSsoClientIdx());
|
||||
|
||||
return adminSsoAddVo;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public AdminSsoModifyVo updateAdminSsoModify(AdminSsoModifyDto adminSsoModifyDto) {
|
||||
AdminSsoModifyVo adminSsoModifyVo = new AdminSsoModifyVo();
|
||||
|
||||
Integer loginUserTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||
|
||||
if (loginUserTokenIdx == null) {
|
||||
adminSsoModifyVo.setResultCode(401);
|
||||
adminSsoModifyVo.setProcessed(false);
|
||||
return adminSsoModifyVo;
|
||||
}
|
||||
|
||||
AdminAuthLoginVo adminAuthLoginVo = adminAuthMapper.selectAdminTokenByUserTokenIdx(loginUserTokenIdx);
|
||||
|
||||
if (adminAuthLoginVo == null || adminAuthLoginVo.getUserIdx() == null) {
|
||||
adminSsoModifyVo.setResultCode(401);
|
||||
adminSsoModifyVo.setProcessed(false);
|
||||
return adminSsoModifyVo;
|
||||
}
|
||||
|
||||
adminSsoModifyDto.setUpdateMember(adminAuthLoginVo.getUserIdx());
|
||||
|
||||
int duplicateCount = adminSsoMapper.selectAdminSsoModifyDuplicateCount(adminSsoModifyDto);
|
||||
|
||||
if (duplicateCount > 0) {
|
||||
adminSsoModifyVo.setResultCode(2004);
|
||||
adminSsoModifyVo.setProcessed(false);
|
||||
return adminSsoModifyVo;
|
||||
}
|
||||
|
||||
int updateCount = adminSsoMapper.updateAdminSsoModify(adminSsoModifyDto);
|
||||
|
||||
adminSsoModifyVo.setResultCode(2005);
|
||||
adminSsoModifyVo.setProcessed(updateCount > 0);
|
||||
|
||||
return adminSsoModifyVo;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public AdminSsoDeleteVo updateAdminSsoDelete(AdminSsoDeleteDto adminSsoDeleteDto) {
|
||||
AdminSsoDeleteVo adminSsoDeleteVo = new AdminSsoDeleteVo();
|
||||
|
||||
Integer loginUserTokenIdx = SecurityUtil.getLoginUserTokenIdx();
|
||||
|
||||
if (loginUserTokenIdx == null) {
|
||||
adminSsoDeleteVo.setResultCode(401);
|
||||
adminSsoDeleteVo.setProcessed(false);
|
||||
return adminSsoDeleteVo;
|
||||
}
|
||||
|
||||
AdminAuthLoginVo adminAuthLoginVo = adminAuthMapper.selectAdminTokenByUserTokenIdx(loginUserTokenIdx);
|
||||
|
||||
if (adminAuthLoginVo == null || adminAuthLoginVo.getUserIdx() == null) {
|
||||
adminSsoDeleteVo.setResultCode(401);
|
||||
adminSsoDeleteVo.setProcessed(false);
|
||||
return adminSsoDeleteVo;
|
||||
}
|
||||
|
||||
adminSsoDeleteDto.setUpdateMember(adminAuthLoginVo.getUserIdx());
|
||||
|
||||
int updateCount = adminSsoMapper.updateAdminSsoDelete(adminSsoDeleteDto);
|
||||
|
||||
adminSsoDeleteVo.setResultCode(2005);
|
||||
adminSsoDeleteVo.setProcessed(updateCount > 0);
|
||||
|
||||
return adminSsoDeleteVo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.alist.api.modules.admin.sso.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 등록 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoAddVo {
|
||||
@Schema(description = "SSO 클라이언트 등록 여부", example = "true")
|
||||
private boolean processed;
|
||||
|
||||
@Schema(description = "등록된 SSO 클라이언트 PK", example = "19")
|
||||
private Integer ssoClientIdx;
|
||||
|
||||
@JsonIgnore
|
||||
@Schema(hidden = true)
|
||||
private int resultCode;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.alist.api.modules.admin.sso.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 삭제 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoDeleteVo {
|
||||
@Schema(description = "SSO 클라이언트 삭제 여부", example = "true")
|
||||
private boolean processed;
|
||||
|
||||
@JsonIgnore
|
||||
@Schema(hidden = true)
|
||||
private int resultCode;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.alist.api.modules.admin.sso.vo;
|
||||
|
||||
import com.alist.api.common.paging.PageResponse;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 목록 조회 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoListVo extends PageResponse {
|
||||
@Schema(description = "SSO 클라이언트 목록")
|
||||
private List<AdminSsoVo> ssoList;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.alist.api.modules.admin.sso.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 수정 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoModifyVo {
|
||||
@Schema(description = "SSO 클라이언트 수정 여부", example = "true")
|
||||
private boolean processed;
|
||||
|
||||
@JsonIgnore
|
||||
@Schema(hidden = true)
|
||||
private int resultCode;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.alist.api.modules.admin.sso.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 상세 조회 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoViewVo {
|
||||
@Schema(description = "SSO 클라이언트 PK", example = "19")
|
||||
private Integer ssoClientIdx;
|
||||
|
||||
@Schema(description = "클라이언트 식별자", example = "a-campus-client")
|
||||
private String clientId;
|
||||
|
||||
@Schema(description = "클라이언트명", example = "a-campus.co.kr")
|
||||
private String clientName;
|
||||
|
||||
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/")
|
||||
private String redirectUri;
|
||||
|
||||
@Schema(description = "비고", example = "운영")
|
||||
private String memo;
|
||||
|
||||
@Schema(description = "사용 여부", example = "Y")
|
||||
private String useYn;
|
||||
|
||||
@Schema(description = "삭제 여부", example = "N")
|
||||
private String delYn;
|
||||
|
||||
@Schema(description = "등록일시", example = "2026-04-06 17:28:56")
|
||||
private LocalDateTime createDate;
|
||||
|
||||
@Schema(description = "등록자", example = "1")
|
||||
private Integer createMember;
|
||||
|
||||
@Schema(description = "수정일시", example = "2026-04-06 17:28:56")
|
||||
private LocalDateTime updateDate;
|
||||
|
||||
@Schema(description = "마지막 수정자", example = "1")
|
||||
private Integer updateMember;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.alist.api.modules.admin.sso.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "관리자 SSO 클라이언트 목록 항목")
|
||||
@Getter
|
||||
@Setter
|
||||
public class AdminSsoVo {
|
||||
@Schema(description = "SSO 클라이언트 PK", example = "19")
|
||||
private Integer ssoClientIdx;
|
||||
|
||||
@Schema(description = "클라이언트 식별자", example = "a-campus-client")
|
||||
private String clientId;
|
||||
|
||||
@Schema(description = "클라이언트명", example = "https://a-campus.co.kr/")
|
||||
private String clientName;
|
||||
|
||||
@Schema(description = "허용 redirect URI", example = "https://a-campus.co.kr/")
|
||||
private String redirectUri;
|
||||
|
||||
@Schema(description = "비고", example = "운영")
|
||||
private String memo;
|
||||
|
||||
@Schema(description = "사용 여부", example = "Y")
|
||||
private String useYn;
|
||||
|
||||
@Schema(description = "생성일", example = "2026-04-06 17:28:56")
|
||||
private LocalDateTime createDate;
|
||||
|
||||
@Schema(description = "수정일", example = "2026-04-06 17:28:56")
|
||||
private LocalDateTime updateDate;
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class SsoClientVo {
|
||||
private Long ssoClientIdx;
|
||||
private Integer ssoClientIdx;
|
||||
private String clientId;
|
||||
private String clientName;
|
||||
private String redirectUri;
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.alist.api.modules.admin.sso.mapper.AdminSsoMapper">
|
||||
<sql id="adminSsoWhere">
|
||||
FROM ALISTLMS.SSO_CLIENT SC
|
||||
WHERE SC.DEL_YN = 'N'
|
||||
<if test="keyword != null and keyword != ''">
|
||||
AND (
|
||||
SC.CLIENT_ID LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR SC.CLIENT_NAME LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR SC.REDIRECT_URI LIKE CONCAT('%', #{keyword}, '%')
|
||||
OR SC.MEMO LIKE CONCAT('%', #{keyword}, '%')
|
||||
)
|
||||
</if>
|
||||
<if test="useYn != null and useYn != ''">
|
||||
AND SC.USE_YN = #{useYn}
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<select id="selectAdminSsoCount" resultType="int">
|
||||
/*AdminSsoMapper.selectAdminSsoCount*/
|
||||
SELECT COUNT(*)
|
||||
<include refid="adminSsoWhere"/>
|
||||
</select>
|
||||
|
||||
<select id="selectAdminSsoList" resultType="com.alist.api.modules.admin.sso.vo.AdminSsoVo">
|
||||
/*AdminSsoMapper.selectAdminSsoList*/
|
||||
SELECT SC.SSO_CLIENT_IDX
|
||||
, SC.CLIENT_ID
|
||||
, SC.CLIENT_NAME
|
||||
, SC.REDIRECT_URI
|
||||
, SC.MEMO
|
||||
, SC.USE_YN
|
||||
, SC.CREATE_DATE
|
||||
, SC.UPDATE_DATE
|
||||
<include refid="adminSsoWhere"/>
|
||||
ORDER BY SC.SSO_CLIENT_IDX DESC
|
||||
LIMIT #{limit}
|
||||
OFFSET #{offset}
|
||||
</select>
|
||||
|
||||
<select id="selectAdminSsoView" resultType="com.alist.api.modules.admin.sso.vo.AdminSsoViewVo">
|
||||
/*AdminSsoMapper.selectAdminSsoView*/
|
||||
SELECT SC.SSO_CLIENT_IDX
|
||||
, SC.CLIENT_ID
|
||||
, SC.CLIENT_NAME
|
||||
, SC.REDIRECT_URI
|
||||
, SC.MEMO
|
||||
, SC.USE_YN
|
||||
, SC.DEL_YN
|
||||
, SC.CREATE_DATE
|
||||
, SC.CREATE_MEMBER
|
||||
, SC.UPDATE_DATE
|
||||
, SC.UPDATE_MEMBER
|
||||
FROM ALISTLMS.SSO_CLIENT SC
|
||||
WHERE SC.SSO_CLIENT_IDX = #{ssoClientIdx}
|
||||
AND SC.DEL_YN = 'N'
|
||||
</select>
|
||||
|
||||
<select id="selectAdminSsoDuplicateCount" resultType="int">
|
||||
/*AdminSsoMapper.selectAdminSsoDuplicateCount*/
|
||||
SELECT COUNT(*)
|
||||
FROM ALISTLMS.SSO_CLIENT SC
|
||||
WHERE SC.DEL_YN = 'N'
|
||||
AND SC.CLIENT_ID = #{clientId}
|
||||
</select>
|
||||
|
||||
<select id="selectAdminSsoModifyDuplicateCount" resultType="int">
|
||||
/*AdminSsoMapper.selectAdminSsoModifyDuplicateCount*/
|
||||
SELECT COUNT(*)
|
||||
FROM ALISTLMS.SSO_CLIENT SC
|
||||
WHERE SC.DEL_YN = 'N'
|
||||
AND SC.CLIENT_ID = #{clientId}
|
||||
AND SC.SSO_CLIENT_IDX != #{ssoClientIdx}
|
||||
</select>
|
||||
|
||||
<insert id="insertAdminSsoAdd" parameterType="com.alist.api.modules.admin.sso.dto.AdminSsoAddDto" useGeneratedKeys="true" keyProperty="ssoClientIdx">
|
||||
/*AdminSsoMapper.insertAdminSsoAdd*/
|
||||
INSERT INTO ALISTLMS.SSO_CLIENT (
|
||||
CLIENT_ID
|
||||
, CLIENT_NAME
|
||||
, REDIRECT_URI
|
||||
, MEMO
|
||||
, USE_YN
|
||||
, DEL_YN
|
||||
, CREATE_MEMBER
|
||||
, UPDATE_MEMBER
|
||||
) VALUES (
|
||||
#{clientId}
|
||||
, #{clientName}
|
||||
, #{redirectUri}
|
||||
, #{memo}
|
||||
, #{useYn}
|
||||
, 'N'
|
||||
, #{createMember}
|
||||
, #{updateMember}
|
||||
)
|
||||
</insert>
|
||||
|
||||
|
||||
<update id="updateAdminSsoModify" parameterType="com.alist.api.modules.admin.sso.dto.AdminSsoModifyDto">
|
||||
/*AdminSsoMapper.updateAdminSsoModify*/
|
||||
UPDATE ALISTLMS.SSO_CLIENT
|
||||
SET CLIENT_ID = #{clientId}
|
||||
, CLIENT_NAME = #{clientName}
|
||||
, REDIRECT_URI = #{redirectUri}
|
||||
, MEMO = #{memo}
|
||||
, USE_YN = #{useYn}
|
||||
, UPDATE_MEMBER = #{updateMember}
|
||||
WHERE SSO_CLIENT_IDX = #{ssoClientIdx}
|
||||
AND DEL_YN = 'N'
|
||||
</update>
|
||||
|
||||
<update id="updateAdminSsoDelete" parameterType="com.alist.api.modules.admin.sso.dto.AdminSsoDeleteDto">
|
||||
/*AdminSsoMapper.updateAdminSsoDelete*/
|
||||
UPDATE ALISTLMS.SSO_CLIENT
|
||||
SET DEL_YN = 'Y'
|
||||
, UPDATE_MEMBER = #{updateMember}
|
||||
WHERE SSO_CLIENT_IDX = #{ssoClientIdx}
|
||||
AND DEL_YN = 'N'
|
||||
</update>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user