controller/

LedgerController.java

package com.example.pkscl.controller;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.example.pkscl.data.dto.ReceiptModel;
import com.example.pkscl.service.LedgerService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import lombok.extern.slf4j.Slf4j;


@Slf4j
// ๋ฌธ์ œ์  1.  majorNumber๋ž‘ API๋กœ ์ˆ˜์ •ํ•˜๊ณ ์žํ•˜๋Š” ๊ณณ์ด ๋‹ค๋ฅด๋ฉด 403์„ ๋„์›Œ์•ผํ•จ.. ๊ทผ๋ฐ ์ด๋งŽ์€๊ฑธ ๋‹ค ์–ด๋–ป๊ฒŒ?
@RestController
public class LedgerController {

    private final LedgerService ledgerService;

    @Autowired
    public LedgerController(LedgerService ledgerService) {
        this.ledgerService = ledgerService;
    }

    @GetMapping(value = "/major-info")
    public Map<String, Object> getLedger(HttpServletRequest request, HttpServletResponse response) {
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String position = (String) request.getSession(false).getAttribute("position");
        String status = (String) request.getSession(false).getAttribute("status");

        if(!status.equals("approval")) {
            response.setStatus(403);
            return null;
        }

        return ledgerService.getLedgerData(majorNumber, position);
    }

    @GetMapping(value = "/major-info/admin")
    public Map<String, Object> getLedgerAdmin(@RequestParam(value = "major-number", required = true) String majorNumber, HttpServletRequest request, HttpServletResponse response) {
        String position = (String) request.getSession(false).getAttribute("position");

        return ledgerService.getLedgerData(majorNumber, position);
    }

    @GetMapping(value = "/temp-major-info")
    public Map<String, Object> getTempLedger(HttpServletRequest request, HttpServletResponse response){
        return ledgerService.getLedgerData("0", "president");
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @PostMapping(value = "/event")
    public void addLedger(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String position = (String) request.getSession(false).getAttribute("position");
        String status = (String) request.getSession(false).getAttribute("status");
        String quarter = (String) body.get("quarter");

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval")) {
            response.setStatus(403);
            return;
        }

        ledgerService.addEvent(majorNumber, quarter);
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @DeleteMapping(value = "/event")
    public void deleteLedger(@RequestParam(value = "event-number", required = true) String eventNumber, HttpServletRequest request, HttpServletResponse response) {
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String status = (String) request.getSession(false).getAttribute("status");

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval") || !ledgerService.checkMajor("event", eventNumber, majorNumber)) {
            response.setStatus(403);
            return;
        }
        

        ledgerService.deleteEvent(eventNumber);
    }

    @GetMapping(value = "/ledger-date")
    public Map<String, Object> getLedgerDate(@RequestParam(value = "major-number", required = false) String adminMajorNumber, HttpServletRequest request, HttpServletResponse response) {
        String position = (String) request.getSession(false).getAttribute("position");
        if(position.equals("admin")) {
            return ledgerService.getLedgerDate(adminMajorNumber);
        }
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");

        return ledgerService.getLedgerDate(majorNumber);
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @PutMapping(value = "/ledger-date")
    public void putLedgerDate(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String status = (String) request.getSession(false).getAttribute("status");
        String quarter = (String) body.get("quarter");
        String openDate = (String) body.get("openDate");
        String closeDate = (String) body.get("closeDate");

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval")) {
            response.setStatus(403);
            return;
        }

        ledgerService.putLedgerDate(majorNumber, quarter, openDate, closeDate);
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @PatchMapping(value = "/event")
    public void patchEvent(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String status = (String) request.getSession(false).getAttribute("status");
        String eventNumber = (String) body.get("eventNumber");
        String eventTitle = (String) body.get("eventTitle");
        String eventContext = (String) body.get("eventContext");

        if(!position.equals("president")){
            log.info("position error");
        }
        if(!status.equals("approval")) {
            log.info("status error");
        }
        if(!ledgerService.checkMajor("event", eventNumber, majorNumber)) {
            log.info("majorNumber error");
        }
        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval") || !ledgerService.checkMajor("event", eventNumber, majorNumber)) {
            response.setStatus(403);
            return;
        }

        ledgerService.patchEvent(eventNumber, eventTitle, eventContext);
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @PostMapping(value = "/receipt")
    public void postReceipt(@ModelAttribute ReceiptModel receiptModel, HttpServletRequest request, HttpServletResponse response) {
        
        // receiptModel์ถœ๋ ฅ
        System.out.println(receiptModel);
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String status = (String) request.getSession(false).getAttribute("status");

        //403 Forbidden
        if(!position.equals("president") || !status.equals("approval") || !ledgerService.checkMajor("event", receiptModel.getEventNumber(), majorNumber)) {
            response.setStatus(403);
            return;
        }

        ledgerService.postReceipt(receiptModel);
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @PutMapping(value = "/receipt")
    public void putReceipt(@ModelAttribute ReceiptModel receiptModel, HttpServletRequest request, HttpServletResponse response) {

        // receiptModel์ถœ๋ ฅ
        System.out.println(receiptModel);
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String status = (String) request.getSession(false).getAttribute("status");

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval") || !ledgerService.checkMajor("receipt", receiptModel.getReceiptNumber(), majorNumber)) {
            response.setStatus(403);
            return;
        }

        ledgerService.putReceipt(receiptModel);
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @DeleteMapping(value = "/receipt")
    public void deleteReceipt(@RequestParam(value = "receipt-number", required = true) String receiptNumberList, HttpServletRequest request, HttpServletResponse response) {
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String status = (String) request.getSession(false).getAttribute("status");

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval")) {
            response.setStatus(403);
            return;
        }


        ledgerService.deleteReceiptList(receiptNumberList, majorNumber, response);
    }

    @Transactional(isolation = Isolation.SERIALIZABLE)
    @PatchMapping(value = "/event-sequence")
    public void patchEventSequence(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String status = (String) request.getSession(false).getAttribute("status");
        List<String> eventNumberList = (List<String>) body.get("eventNumberList");

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval")) {
            response.setStatus(403);
            return;
        }
        for(String eventNumber : eventNumberList) {
            if(!ledgerService.checkMajor("event", eventNumber, majorNumber)) {
                response.setStatus(403);
                return;
            }
        }

        ledgerService.patchEventSequence(eventNumberList);
    }

    

}

MemberManagementController.java

package com.example.pkscl.controller;

import com.example.pkscl.service.MemberManagementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

@RestController
public class MemberManagementController {

    private final MemberManagementService memberManagementService;

    @Autowired
    public MemberManagementController(MemberManagementService memberManagementService) {
        this.memberManagementService = memberManagementService;
    }
    
    @GetMapping(value = "/student-list")
    public Map<String,Object> studentList(HttpServletRequest request, HttpServletResponse response) {

        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String position = (String) request.getSession(false).getAttribute("position");
        String status = (String) request.getSession(false).getAttribute("status");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");

        // 400 Bad Request
        if(majorNumber == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return null;
        }

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval")) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            return null;
        }

        // ์„œ๋น„์Šค ํ˜ธ์ถœ ๋ฐ ๋ฐ˜ํ™˜
        return memberManagementService.getStudentData(majorNumber);
    }

    @PatchMapping(value = "/student-list")
    public void patchStudentStatus(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {

        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String position = (String) request.getSession(false).getAttribute("position");
        String status = (String) request.getSession(false).getAttribute("status");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String patchStatus = (String) body.get("status");
        List<String> emailList = (List<String>) body.get("email");

        // 400 Bad Request
        if(emailList == null || emailList.size() == 0 || patchStatus == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }

        // 403 Forbidden
        if(!position.equals("president") || !status.equals("approval")) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            return;
        }

        // ์„œ๋น„์Šค ํ˜ธ์ถœ
        for(String email : emailList) {
            memberManagementService.patchStudentStatus(email, patchStatus, majorNumber);
        }
    }

    @GetMapping(value = "/president-list")
    public Map<String,Object> presidentList(HttpServletRequest request, HttpServletResponse response) {

        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String position = (String) request.getSession(false).getAttribute("position");
        
        // 403 Forbidden
        if(!position.equals("admin")) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            return null;
        }

        // ์„œ๋น„์Šค ํ˜ธ์ถœ ๋ฐ ๋ฐ˜ํ™˜
        return memberManagementService.getPresidentData();
    }

    @PatchMapping(value = "/president-list")
    public void patchPresidentStatus(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {

        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String position = (String) request.getSession(false).getAttribute("position");
        String patchStatus = (String) body.get("status");
        List<String> emailList = (List<String>) body.get("email");

        // 400 Bad Request
        if(emailList == null || emailList.size() == 0 || patchStatus == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }

        // 409 Conflict


        // 403 Forbidden
        if(!position.equals("admin")) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            return;
        }

        // ์„œ๋น„์Šค ํ˜ธ์ถœ
        for(String email : emailList) {
            memberManagementService.patchPresidentStatus(email, patchStatus, response);
        }
    }

    @PatchMapping(value = "/major-president")
    public void patchMajorPresident(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {

        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String position = (String) request.getSession(false).getAttribute("position");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String presidentEmail = (String) request.getSession(false).getAttribute("email");
        String newPresidentEmail = (String) body.get("email");

        // 403 Forbidden
        if(!position.equals("president")) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            return;
        }

        // ์„œ๋น„์Šค ํ˜ธ์ถœ
        memberManagementService.patchMajorPresident(presidentEmail, newPresidentEmail, majorNumber, response);
    }

}

ProfileController.java

package com.example.pkscl.controller;

import com.example.pkscl.data.dto.PresidentProfileModel;
import com.example.pkscl.data.dto.StudentProfileModel;
import com.example.pkscl.service.ProfileService;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@RestController
public class ProfileController {
    private final ProfileService profileService;
    private final PasswordEncoder passwordEncoder;

    @Autowired
    public ProfileController(ProfileService profileService, PasswordEncoder passwordEncoder) {
        this.profileService = profileService;
        this.passwordEncoder = passwordEncoder;
    }

    // ํ•™์ƒ ๋ฐ ํ•™๊ณผํšŒ์žฅ ์ •๋ณด๋กœ๋“œ
    @GetMapping(value = "/profile")
    public Map<String,Object> studentProfile(HttpServletRequest request, HttpServletResponse response) {



        // ์„ธ์…˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์„ค์ •
        String email = (String) request.getSession(false).getAttribute("email");
        String majorNumber = (String) request.getSession(false).getAttribute("majorNumber");
        String position = (String) request.getSession(false).getAttribute("position");



        // 400 Bad Request
        if(majorNumber == null || email==null || position==null) {
            Map<String,Object> errorMsg = new LinkedHashMap<>();
            errorMsg.put("errorMessage", "์กด์žฌํ•˜์ง€ ์•Š๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.");
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

            return errorMsg;
        }

        // ์„œ๋น„์Šค ํ˜ธ์ถœ ๋ฐ ๋ฐ˜ํ™˜
        return profileService.getProfileData(position, email, majorNumber);
    }

    // ํ•™์ƒ ์ •๋ณด ๋ณ€๊ฒฝ
    @PutMapping(value = "/profile/student") //president๋กœ ๋‚˜๋ˆ ์•ผํ•จ form์–‘์‹์ด ๋‹ฌ๋ผ์„œ
    public void patchStudentStatus(@ModelAttribute StudentProfileModel studentProfileModel, MultipartFile certFile,  HttpServletRequest request, HttpServletResponse response) throws Exception{

        // 403
        if(studentProfileModel.getStdID().equals(null) || studentProfileModel.getMajorNumber() == 0 ||
            studentProfileModel.getName().equals(null)) {
            Map<String,Object> errorMsg = new LinkedHashMap<>();
            response.setStatus(403);
            return;
        }

        // ์„ธ์…˜์„œ ์ด๋ฉ”์ผ๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค.
        String email = (String) request.getSession(false).getAttribute("email");

        String stdID = studentProfileModel.getStdID();
        int major =  studentProfileModel.getMajorNumber();
        String name  = studentProfileModel.getName();

        String fileName = null;

        if(certFile != null) {
            fileName = new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS").format(new java.util.Date());
            fileName = fileName + certFile.getOriginalFilename().substring(certFile.getOriginalFilename().lastIndexOf("."));
            profileService.fileUploadStd(fileName, certFile);

        }

        // ๋ ˆํฌ์— ์—…๋ฐ์ดํŠธ
        profileService.putStudentProfileData(email, stdID, major, name, fileName);


    }

    @PutMapping(value = "/profile/president") //president๋กœ ๋‚˜๋ˆ ์•ผํ•จ form์–‘์‹์ด ๋‹ฌ๋ผ์„œ
    public void patchPresidentStatus(@ModelAttribute PresidentProfileModel presidentProfileModel, MultipartFile majorLogo,  HttpServletRequest request, HttpServletResponse response) throws Exception{

        // 403 Forbidden
        if(presidentProfileModel.getStdID().equals(null) || presidentProfileModel.getPhoneNumber().equals(null) ||
            presidentProfileModel.getName().equals(null)) {
            response.setStatus(403);
            return;
        }

        String email = (String) request.getSession(false).getAttribute("email");

        String stdID = presidentProfileModel.getStdID();
        String name = presidentProfileModel.getName();
        String phoneNumber= presidentProfileModel.getPhoneNumber();
        String majorNumber = presidentProfileModel.getMajorNumber();


        String fileName = null;

        if(majorLogo != null) {
            fileName = new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS").format(new java.util.Date());
            fileName = fileName + majorLogo.getOriginalFilename().substring(majorLogo.getOriginalFilename().lastIndexOf("."));
            profileService.fileUploadLogo(fileName, majorLogo);

        }
        profileService.putPresidentProfileData(email, stdID, name, phoneNumber, fileName, majorNumber);
    }

    @PatchMapping(value = "/password")
    public void patchPassword(@RequestBody Map<String, Object> body,  HttpServletRequest request, HttpServletResponse response){

        String email =(String) request.getSession(false).getAttribute("email");
        String position = (String) request.getSession(false).getAttribute("position");
        
        String inputPassword = (String) body.get("inputPassword");
        String inputNewPassword = (String) body.get("inputNewPassword");
        String inputCheckNewPassword = (String) body.get("inputCheckNewPassword");

        // 403 Forbidden
        if(inputPassword.equals(null) || inputNewPassword .equals(null)||  !inputNewPassword.equals(inputCheckNewPassword)) {
            response.setStatus(403); return;
        }

        else if(position.equals("student")){
        // ํ•™์ƒ ๊ธฐ์กด ๋น„๋ฒˆ์ด๋ž‘ ๊ฐ™์€์ง€ ์ฒดํฌ
            if (!passwordEncoder.matches(inputPassword, profileService.getStudentPassword(email))) {
                response.setStatus(401); return;
            }
            else profileService.patchStudentPassword(email, inputNewPassword);
        }

        else if(position.equals("president")){
        // ํ•™์ƒ ๊ธฐ์กด ๋น„๋ฒˆ์ด๋ž‘ ๊ฐ™์€์ง€ ์ฒดํฌ
            if(!passwordEncoder.matches(inputPassword, profileService.getPresidentPassword(email))) {
                response.setStatus(401); return;
            }
            else profileService.patchPresidentPassword(email, inputNewPassword);
        }

 }
}

SignInController.java

package com.example.pkscl.controller;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.example.pkscl.service.SignInService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SignInController {

    private final SignInService signInService;
    
    @Autowired  
    public SignInController(SignInService signInService) {
        this.signInService = signInService;
    }

    @PostMapping(value = "/login/student")
    public void studentSignIn(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {
        
        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String email = (String) body.get("email");
        String password = (String) body.get("password");

        // 400 Bad Request
        if(email == null || password == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }

        // 401 Unauthorized
        boolean match = signInService.studentMatch(password, email);
        if(!match) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
        }
        
        // ์„ธ์…˜ ์„ค์ •
        String majorNumber = signInService.getStudentMajor(email)+"";
        String status = signInService.getStudentStatus(email);
        HttpSession session = request.getSession();
        session.setAttribute("position", "student");
        session.setAttribute("email", email);
        session.setAttribute("majorNumber", majorNumber);
        session.setAttribute("status", status);
        
    }

    @PostMapping(value = "/login/president")
    public void presidentSignIn(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {
    
        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String email = (String) body.get("email");
        String password = (String) body.get("password");

        // 400 Bad Request
        if (email == null || password == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }

        // 401 Unauthorized
        boolean match = signInService.presidentMatch(password, email);
        if(!match) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
        }

        // ์„ธ์…˜ ์ƒ์„ฑ
        String majorNumber = signInService.getPresidentMajor(email)+"";
        String status = signInService.getPresidentStatus(email);
        HttpSession session = request.getSession();
        session.setAttribute("position", "president");
        session.setAttribute("email", email);
        session.setAttribute("majorNumber", majorNumber);
        session.setAttribute("status", status);
            
    }

    @PostMapping(value = "/login/admin")
    public void adminSignIn(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) {
        
        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        String id = (String) body.get("email");
        String password = (String) body.get("password");

        // 400 bad request
        if (id == null || password == null) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }

        // 401 unauthorized
        boolean match = signInService.adminMatch(password, id);
        if(!match){
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
        }

        // ์„ธ์…˜ ์ƒ์„ฑ
        HttpSession session = request.getSession();
        session.setAttribute("position", "admin");
        session.setAttribute("id", id);

    }

    @PostMapping("/logout") 
    public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException
    { 
        HttpSession session = request.getSession(false);
        session.invalidate();
        response.setStatus(HttpServletResponse.SC_OK);
    }

    @PostMapping("/withdrawal")
    public void secession(@RequestBody Map<String, Object> body, HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        // ์„œ๋น„์Šค ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •
        HttpSession session = request.getSession(false);
        String position = (String) session.getAttribute("position");
        String email = (String) session.getAttribute("email");
        String checkemail = (String) body.get("inputEmail");
        String password = (String) body.get("inputPassword");

        // 400 bad request
        if (checkemail == null || password == null) {

            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;

        }

        if(position.equals("student")) {

            // 401 unauthorized
            // ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ
            if(!checkemail.equals(email) || !signInService.studentMatch(password, email)) {
                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                return;
            }

            // ํƒˆํ‡ด 
            signInService.withdrawalStudent(email);

        } else if(position.equals("president")) {

            // 401 unauthorized
            // ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ
            if(!checkemail.equals(email) || !signInService.presidentMatch(password, email)) {
                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                return;
            }

            // ํƒˆํ‡ด
            signInService.withdrawalPresident(email);

        }

        // ์„ธ์…˜ ์‚ญ์ œ
        session.invalidate();
        response.setStatus(HttpServletResponse.SC_OK);

    }

    @GetMapping("/status")
    public Map<String, Object> getStatus(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        HttpSession session = request.getSession(false);
        String status = (String) session.getAttribute("status");

        LinkedHashMap<String, Object> result = new LinkedHashMap<>();
        result.put("status", status);

        return result;
    }

    @GetMapping("/position")
    public Map<String, Object> getPosition(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        HttpSession session = request.getSession(false);
        String position = (String) session.getAttribute("position");

        LinkedHashMap<String, Object> result = new LinkedHashMap<>();
        result.put("position", position);

        return result;
    }

}

SignUpController.java

package com.example.pkscl.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import com.example.pkscl.data.entity.member.President;
import com.example.pkscl.data.dto.PresidentModel;
import com.example.pkscl.data.entity.member.Student;
import com.example.pkscl.data.dto.StudentModel;
import com.example.pkscl.service.SignUpService;

@RestController
public class SignUpController {

    private final SignUpService signUpService;
    
    @Autowired
    public SignUpController(SignUpService signUpService) {
        this.signUpService = signUpService;
    }

    @PostMapping(value = "/signup/student")
    public void signUpStudent(@ModelAttribute StudentModel studentModel, MultipartFile certFile, HttpServletResponse response) throws Exception {

        Student student = new Student();
        student.setEmail(studentModel.getEmail());
        String password = studentModel.getPassword();

        // 401 Unauthorized
        if(!password.equals(studentModel.getCheckPassword())) {
            response.setStatus(401);
            return;
        }
        student.setPassword(password);
        student.setMajornumber(studentModel.getMajor());
        student.setStudentid(studentModel.getStdID());
        student.setName(studentModel.getName());
        
        // file_name์„ ํ˜„์žฌ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ yyyyMMddHHmmssSSS.jpg ํ˜•ํƒœ๋กœ ์„ค์ •
        String dir = "./static/studentCertFile/";
        String filename = new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS").format(new java.util.Date());
        String ext = certFile.getOriginalFilename().substring(certFile.getOriginalFilename().lastIndexOf("."));
        student.setCertfilepath(dir + filename + ext);

        //์ค‘๋ณตํ™•์ธํ›„ 400๋ฐ˜ํ™˜
        if(!signUpService.studentCheckEmail(student.getEmail())) {
            response.setStatus(409);
            return;
        }

        signUpService.fileUpload(filename+ext, certFile);
        if(!signUpService.signUpStudent(student)) {
            response.setStatus(403);
        }
        
    }

    @PostMapping(value = "/signup/president")
    public void signUpPresident(@ModelAttribute PresidentModel presidentModel, MultipartFile certFile, HttpServletResponse response) throws Exception {

        President president = new President();
        president.setEmail(presidentModel.getEmail());
        String password = presidentModel.getPassword();

        // 401 Unauthorized
        if(!password.equals(presidentModel.getCheckPassword())) {
            response.setStatus(401);
            return;
        }
        president.setPassword(password);
        president.setName(presidentModel.getName());
        president.setMajornumber(presidentModel.getMajor());
        president.setStudentid(presidentModel.getStdID());
        president.setPhonenumber(presidentModel.getPhoneNumber());
        
        //์ค‘๋ณตํ™•์ธํ›„ 400๋ฐ˜ํ™˜
        if(!signUpService.presidentCheckEmail(president.getEmail())) {
            response.setStatus(409);
            return;
        }

        if(!signUpService.signUpPresident(president)) {
            response.setStatus(403);
        }
    }

    @GetMapping(value = "/major-list")
    public Map<String,Object> getMajorList() {
        return signUpService.getMajorList();
    }

}

SMTPController.java

package com.example.pkscl.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import com.example.pkscl.service.SMTPService;
import com.example.pkscl.service.SignUpService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SMTPController {
    
    private static final String VERIFY_SUCCESS_MESSAGE = "<script>alert('์ด๋ฉ”์ผ ์ธ์ฆ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํšŒ์›๊ฐ€์ž…์„ ๊ณ„์† ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.'); </script>";
    private static final String VERIFY_FAIL_MESSAGE = "<script>alert('์ธ์ฆ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.');</script>";
    private final SMTPService smtpService;
    private final SignUpService signUpService;

    @Autowired
    public SMTPController(SMTPService smtpService, SignUpService signUpService) {
        this.smtpService = smtpService;
        this.signUpService = signUpService;
    }

    @PostMapping(value = "/email/{position}")
    public void sendEmail(@RequestBody Map<String, Object> body, @PathVariable String position, HttpServletResponse response) {

        String email = (String) body.get("email");

        // ์ด๋ฉ”์ผ ํ˜•์‹ ํ™•์ธ
        if (!smtpService.checkEmailForm(email)) {
            response.setStatus(HttpStatus.BAD_REQUEST.value());
            return;
        }

        // ์ค‘๋ณตํ™•์ธ
        if(position.equals("student")){
            if(!signUpService.studentCheckEmail(email)) {
                response.setStatus(HttpStatus.CONFLICT.value());
                return;
            }
        }else if(position.equals("president")){
            if(!signUpService.presidentCheckEmail(email)) {
                response.setStatus(HttpStatus.CONFLICT.value());
                return;
            }
        }else{
            response.setStatus(HttpStatus.BAD_REQUEST.value());
            return;
        }

        smtpService.sendEmailAuth(email, position);
    }

    @GetMapping(value = "/verify/token/{position}")
    public void verifyToken(@RequestParam String token, @PathVariable String position, HttpServletResponse response) throws IOException {
        if(position.equals("student")){
            if(!smtpService.studentVerifyToken(token)){
                response.setContentType("text/html; charset=euc-kr");
                PrintWriter out = response.getWriter();
                // alert ์ฐฝ ํ™•์ธ์‹œ ์ฐฝ ๋‹ซ๊ธฐ
                out.println(VERIFY_FAIL_MESSAGE);
                out.flush();
                return;
            }
        }else if(position.equals("president")){
            if(!smtpService.presidentVerifyToken(token)){
                response.setContentType("text/html; charset=euc-kr");
                PrintWriter out = response.getWriter();
                // alert ์ฐฝ ํ™•์ธ์‹œ ์ฐฝ ๋‹ซ๊ธฐ
                out.println(VERIFY_FAIL_MESSAGE);
                out.flush();
                return;
            }
        }else{
            response.setContentType("text/html; charset=euc-kr");
            PrintWriter out = response.getWriter();
            // alert ์ฐฝ ํ™•์ธ์‹œ ์ฐฝ ๋‹ซ๊ธฐ
            out.println(VERIFY_FAIL_MESSAGE);
            out.flush();
            return;
        }

        response.setContentType("text/html; charset=euc-kr");
        PrintWriter out = response.getWriter();
        // alert ์ฐฝ ํ™•์ธ์‹œ ์ฐฝ ๋‹ซ๊ธฐ
        out.println(VERIFY_SUCCESS_MESSAGE);
        out.flush();
    }
    
    // ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐœ๊ธ‰
    @PostMapping(value = "/newpwd/{position}")
    public void newPassword(@RequestBody Map<String, Object> param, @PathVariable String position, HttpServletResponse response) {
        String email = (String) param.get("email");
        String name = (String) param.get("name");
        String studentId = (String) param.get("stdID");
        if(position.equals("student")){
            if(smtpService.studentTempPassword(email, name, studentId) < 0) response.setStatus(HttpStatus.BAD_REQUEST.value());
        }else if(position.equals("president")){
            if(smtpService.presidentTempPassword(email, name, studentId) < 0) response.setStatus(HttpStatus.BAD_REQUEST.value());
        }else{
            response.setStatus(HttpStatus.BAD_REQUEST.value());
        }
    }
    
}

TestController.java

package com.example.pkscl.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    
    @GetMapping("/whoami")
    // ์„ธ์…˜์œผ๋กœ๋ถ€ํ„ฐ email, position ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    public String whoami(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        String email = (String) session.getAttribute("email");
        String position = (String) session.getAttribute("position");
        String majorNumber = (String) session.getAttribute("majorNumber");
        String status = (String) session.getAttribute("status");
        return "email: " + email + ", position: " + position + ", majorNumber: " + majorNumber + ", status: " + status;
    }
}

WebController.java

package com.example.pkscl.controller;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class WebController implements ErrorController {
    
        @GetMapping("/error")
        public String error() {
            return "/index.html";
        }
    
}

Last updated