Skip to content

Commit

Permalink
Merge pull request #704 from bcgov/hotfix/GRAD2-3012
Browse files Browse the repository at this point in the history
GRAD2-3012: task is complete.
  • Loading branch information
infstar authored Nov 25, 2024
2 parents 665d417 + 85ea699 commit ca762a7
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,10 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons

// username
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth instanceof JwtAuthenticationToken) {
JwtAuthenticationToken authenticationToken = (JwtAuthenticationToken) auth;
if (auth instanceof JwtAuthenticationToken authenticationToken) {
Jwt jwt = (Jwt) authenticationToken.getCredentials();
String username = JwtUtil.getName(jwt);
if (username != null) {
ThreadLocalStateUtil.setCurrentUser(username);
}
String username = JwtUtil.getName(jwt, request);
ThreadLocalStateUtil.setCurrentUser(username);
}

return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,8 @@ protected void onPersist() {
if (this.createDate == null) {
this.createDate = LocalDateTime.now();
}
if(this.updateDate == null) {
this.updateDate = LocalDateTime.now();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;

import static ca.bc.gov.educ.api.gradstudent.constant.EventStatus.DB_COMMITTED;

Expand Down Expand Up @@ -82,16 +81,15 @@ public class GraduationStatusService extends GradBaseService {
final HistoryService historyService;
final GradValidation validation;
final EducGradStudentApiConstants constants;
final GraduationStudentRecordSearchRepository graduationStudentRecordSearchRepository;

@Autowired
GraduationStudentRecordSearchRepository graduationStudentRecordSearchRepository;

@Autowired
public GraduationStatusService(WebClient webClient, GraduationStudentRecordRepository graduationStatusRepository, StudentStatusRepository studentStatusRepository, GradStatusEventRepository gradStatusEventRepository, StudentNonGradReasonRepository studentNonGradReasonRepository, GraduationStatusTransformer graduationStatusTransformer, StudentOptionalProgramRepository gradStudentOptionalProgramRepository, GradStudentOptionalProgramTransformer gradStudentOptionalProgramTransformer, StudentCareerProgramRepository gradStudentCareerProgramRepository, GradStudentCareerProgramTransformer gradStudentCareerProgramTransformer, StudentNonGradReasonTransformer studentNonGradReasonTransformer, GradStudentService gradStudentService, HistoryService historyService, GradValidation validation, EducGradStudentApiConstants constants) {
public GraduationStatusService(WebClient webClient, GraduationStudentRecordRepository graduationStatusRepository, StudentStatusRepository studentStatusRepository, GradStatusEventRepository gradStatusEventRepository, StudentNonGradReasonRepository studentNonGradReasonRepository, GraduationStatusTransformer graduationStatusTransformer, StudentOptionalProgramRepository gradStudentOptionalProgramRepository, GraduationStudentRecordSearchRepository graduationStudentRecordSearchRepository, GradStudentOptionalProgramTransformer gradStudentOptionalProgramTransformer, StudentCareerProgramRepository gradStudentCareerProgramRepository, GradStudentCareerProgramTransformer gradStudentCareerProgramTransformer, StudentNonGradReasonTransformer studentNonGradReasonTransformer, GradStudentService gradStudentService, HistoryService historyService, GradValidation validation, EducGradStudentApiConstants constants) {
this.webClient = webClient;
this.graduationStatusRepository = graduationStatusRepository;
this.studentStatusRepository = studentStatusRepository;
this.gradStatusEventRepository = gradStatusEventRepository;
this.graduationStudentRecordSearchRepository = graduationStudentRecordSearchRepository;
this.graduationStatusTransformer = graduationStatusTransformer;
this.gradStudentOptionalProgramRepository = gradStudentOptionalProgramRepository;
this.gradStudentOptionalProgramTransformer = gradStudentOptionalProgramTransformer;
Expand Down Expand Up @@ -202,7 +200,7 @@ public Pair<GraduationStudentRecord, GradStatusEvent> saveGraduationStatus(UUID
if(batchId != null) {
resetBatchFlags(gradEntity, false);
}

gradEntity.setUpdateUser(null);
gradEntity = graduationStatusRepository.saveAndFlush(gradEntity);
historyService.createStudentHistory(gradEntity, GRAD_ALG);
final GradStatusEvent gradStatusEvent = createGradStatusEvent(gradEntity.getUpdateUser(), gradEntity,
Expand Down Expand Up @@ -403,8 +401,8 @@ public GraduationStudentRecordSearchResult searchGraduationStudentRecords(final
Specification<GraduationStudentRecordSearchEntity> spec = new GraduationStudentRecordSearchSpecification(searchCriteria);
List<GraduationStudentRecordSearchEntity> results = graduationStudentRecordSearchRepository.findAll(Specification.where(spec));
List<UUID> students = new ArrayList<>();
if (results != null && !results.isEmpty()) {
students = results.stream().map(GraduationStudentRecordSearchEntity::getStudentID).collect(Collectors.toList());
if (!results.isEmpty()) {
students = results.stream().map(GraduationStudentRecordSearchEntity::getStudentID).toList();
}
searchResult.setStudentIDs(students);
return searchResult;
Expand Down Expand Up @@ -1112,6 +1110,7 @@ public Pair<GraduationStudentRecord, GradStatusEvent> undoCompletionStudent(UUID
gradEntity.setGpa(null);
gradEntity.setSchoolAtGrad(null);
gradEntity.setUpdateUser(null);
gradEntity.setUpdateDate(null);
gradEntity = graduationStatusRepository.save(gradEntity);
historyService.createStudentHistory(gradEntity, USER_UNDO_CMPL);
final GradStatusEvent gradStatusEvent = createGradStatusEvent(gradEntity.getUpdateUser(), gradEntity,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class EducGradStudentApiConstants {
public static final String API_NAME = "GRAD-STUDENT-API";
public static final String STREAM_NAME="GRAD_STATUS_EVENT_STREAM";
public static final String CORRELATION_ID = "correlationID";
public static final String USERNAME = "username";

//API end-point Mapping constants
public static final String API_ROOT_MAPPING = "";
Expand Down
34 changes: 34 additions & 0 deletions api/src/main/java/ca/bc/gov/educ/api/gradstudent/util/JwtUtil.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ca.bc.gov.educ.api.gradstudent.util;

import jakarta.servlet.http.HttpServletRequest;
import lombok.val;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.oauth2.jwt.Jwt;

Expand Down Expand Up @@ -54,6 +56,38 @@ public static String getName(Jwt jwt) {
return sb.toString();
}

/**
* Gets name string
* => If it is service account, get it from request header. Otherwise, get it from jwt
*
* @param jwt the JWT
* @param request the Request Header
* @return the username string
*/
public static String getName(Jwt jwt, HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
if (isServiceAccount(jwt.getClaims())) {
sb.append(getUserNameString(request));
} else {
String givenName = (String) jwt.getClaims().get("given_name");
if (StringUtils.isNotBlank(givenName)) {
sb.append(givenName.charAt(0));
}
String familyName = (String) jwt.getClaims().get("family_name");
sb.append(familyName);
}
return sb.toString();
}

private static String getUserNameString(HttpServletRequest request) {
val username = request.getHeader(EducGradStudentApiConstants.USERNAME);
if (StringUtils.isNotBlank(username)) {
return username;
} else {
return "Batch Process";
}
}

private static boolean isServiceAccount(Map<String, Object> claims) {
return !claims.containsKey("family_name");
}
Expand Down

0 comments on commit ca762a7

Please sign in to comment.