From ab7175248906d42ede8cb4ffb3aaf4855550f578 Mon Sep 17 00:00:00 2001 From: sumedh Date: Mon, 5 Aug 2024 23:28:24 +0530 Subject: [PATCH 1/8] date in simple format added --- .../com/olympus/apollo/controllers/KSFileController.java | 2 ++ src/main/java/com/olympus/apollo/models/KSDocument.java | 1 + src/main/java/com/olympus/apollo/services/KSIngestor.java | 2 ++ .../java/com/olympus/apollo/services/StorageProperties.java | 6 +++--- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/olympus/apollo/controllers/KSFileController.java b/src/main/java/com/olympus/apollo/controllers/KSFileController.java index 94fced1..24ac279 100644 --- a/src/main/java/com/olympus/apollo/controllers/KSFileController.java +++ b/src/main/java/com/olympus/apollo/controllers/KSFileController.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Date; +import java.text.SimpleDateFormat; import org.codelibs.jhighlight.fastutil.Hash; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +45,7 @@ public class KSFileController { ksDocument.setName(file.getOriginalFilename()); ksDocument.setDescription(fileUploadDTO.getDescription()); ksDocument.setIngestionStatus("NEW"); + ksDocument.setIngestionDateFormat(new SimpleDateFormat("MM/dd/yy").format(new Date())); Date now = new Date(); ksDocument.setIngestionDate(now); diff --git a/src/main/java/com/olympus/apollo/models/KSDocument.java b/src/main/java/com/olympus/apollo/models/KSDocument.java index 411adf8..6f16fa4 100644 --- a/src/main/java/com/olympus/apollo/models/KSDocument.java +++ b/src/main/java/com/olympus/apollo/models/KSDocument.java @@ -25,6 +25,7 @@ public class KSDocument { private String ingestionStatus; //private String ingestionMessage; private Date ingestionDate; + private String ingestionDateFormat; private KSIngestionInfo ingestionInfo; diff --git a/src/main/java/com/olympus/apollo/services/KSIngestor.java b/src/main/java/com/olympus/apollo/services/KSIngestor.java index 654177c..c8ae1b4 100644 --- a/src/main/java/com/olympus/apollo/services/KSIngestor.java +++ b/src/main/java/com/olympus/apollo/services/KSIngestor.java @@ -1,6 +1,7 @@ package com.olympus.apollo.services; import java.util.*; +import java.text.SimpleDateFormat; import com.olympus.apollo.dto.IngestionOutput; import com.olympus.apollo.models.KSDocument; @@ -82,6 +83,7 @@ public class KSIngestor { }); ksDocument.setIngestionStatus("INGESTED");//we have to set to DONE ksDocument.setIngestionDate(new Date()); + ksDocument.setIngestionDateFormat(new SimpleDateFormat("MM/dd/yy").format(new Date())); ksDocumentRepository.save(ksDocument); diff --git a/src/main/java/com/olympus/apollo/services/StorageProperties.java b/src/main/java/com/olympus/apollo/services/StorageProperties.java index fab5fb6..ba8f790 100644 --- a/src/main/java/com/olympus/apollo/services/StorageProperties.java +++ b/src/main/java/com/olympus/apollo/services/StorageProperties.java @@ -4,10 +4,10 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties("storage") public class StorageProperties { -/** + /** * Folder location for storing files */ - private String location = "C:\\Users\\andrea.terzani\\dev\\olympus\\upload-dir"; + private String location = "C:\\Users\\s.shamrao.shinde\\GenAIStorage"; public String getLocation() { return location; @@ -17,4 +17,4 @@ public class StorageProperties { this.location = location; } -} +} \ No newline at end of file From bee1dad1311e5ad257b05c89cdcb244ea908115a Mon Sep 17 00:00:00 2001 From: sumedh Date: Wed, 7 Aug 2024 12:13:47 +0530 Subject: [PATCH 2/8] vector datatable code added --- .../FeApi/VectorStoreController.java | 42 +++++++++++++++++++ .../apollo/controllers/KSFileController.java | 9 +--- .../apollo/{models => dto}/FileUploadDTO.java | 2 +- .../olympus/apollo/dto/IngestionOutput.java | 2 - .../apollo/dto/VectorStoreDetails.java | 10 +++++ .../dto/VectorStoreMetadataDetails.java | 15 +++++++ .../olympus/apollo/models/VectorStore.java | 20 +++++++++ .../repository/VectorStoreRepository.java | 24 +++++++++++ .../olympus/apollo/services/KSIngestor.java | 2 +- 9 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java rename src/main/java/com/olympus/apollo/{models => dto}/FileUploadDTO.java (93%) create mode 100644 src/main/java/com/olympus/apollo/dto/VectorStoreDetails.java create mode 100644 src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java create mode 100644 src/main/java/com/olympus/apollo/models/VectorStore.java create mode 100644 src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java diff --git a/src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java b/src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java new file mode 100644 index 0000000..3b0e480 --- /dev/null +++ b/src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java @@ -0,0 +1,42 @@ +package com.olympus.apollo.controllers.FeApi; + +import com.olympus.apollo.dto.VectorStoreDetails; +import com.olympus.apollo.models.VectorStore; +import com.olympus.apollo.repository.VectorStoreRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/fe-api/vector-store") +@CrossOrigin(origins = "http://localhost:5173") +public class VectorStoreController { + @Autowired + private VectorStoreRepository vectorStoreRepository; + + @GetMapping("") + public List getAllVectorStore(){ + List result = (List) vectorStoreRepository.findAll(); + return result; + } + + @GetMapping("/{id}") + public VectorStore getVectorData(@PathVariable String id){ + VectorStore result = vectorStoreRepository.findById(id).get(); + return result; + } + + @GetMapping("/ids") + public List getAllVectorStoreIds(){ + List ids = vectorStoreRepository.findAllIds(); + return ids; + } + + @GetMapping("/details") + public List getAllVectorStoreDetails(){ + return vectorStoreRepository.findAllDetails(); + } + +} diff --git a/src/main/java/com/olympus/apollo/controllers/KSFileController.java b/src/main/java/com/olympus/apollo/controllers/KSFileController.java index 24ac279..65d4f85 100644 --- a/src/main/java/com/olympus/apollo/controllers/KSFileController.java +++ b/src/main/java/com/olympus/apollo/controllers/KSFileController.java @@ -1,18 +1,13 @@ package com.olympus.apollo.controllers; import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.Date; import java.text.SimpleDateFormat; -import org.codelibs.jhighlight.fastutil.Hash; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.olympus.apollo.models.KSDocument; import com.olympus.apollo.models.KSIngestionInfo; @@ -20,7 +15,7 @@ import com.olympus.apollo.repository.KSDocumentRepository; import com.olympus.apollo.repository.KSIngestionInfoRepository; import com.olympus.apollo.services.StorageFileNotFoundException; import com.olympus.apollo.services.StorageService; -import com.olympus.apollo.models.FileUploadDTO; +import com.olympus.apollo.dto.FileUploadDTO; @CrossOrigin @RestController public class KSFileController { @@ -57,7 +52,7 @@ public class KSFileController { HashMap metadata = new HashMap<>(); metadata.put("KsApplicationName", fileUploadDTO.getKsApplicationName()); metadata.put("KsDoctype", fileUploadDTO.getKsDocType()); - metadata.put("KsDocSource", fileUploadDTO.getKsDocType()); + metadata.put("KsDocSource", fileUploadDTO.getKsDocSource()); metadata.put("Source", file.getOriginalFilename()); ksIngestionInfo.setMetadata(metadata); diff --git a/src/main/java/com/olympus/apollo/models/FileUploadDTO.java b/src/main/java/com/olympus/apollo/dto/FileUploadDTO.java similarity index 93% rename from src/main/java/com/olympus/apollo/models/FileUploadDTO.java rename to src/main/java/com/olympus/apollo/dto/FileUploadDTO.java index 26e6c8e..38161b4 100644 --- a/src/main/java/com/olympus/apollo/models/FileUploadDTO.java +++ b/src/main/java/com/olympus/apollo/dto/FileUploadDTO.java @@ -1,4 +1,4 @@ -package com.olympus.apollo.models; +package com.olympus.apollo.dto; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/olympus/apollo/dto/IngestionOutput.java b/src/main/java/com/olympus/apollo/dto/IngestionOutput.java index fd256c1..ac03133 100644 --- a/src/main/java/com/olympus/apollo/dto/IngestionOutput.java +++ b/src/main/java/com/olympus/apollo/dto/IngestionOutput.java @@ -15,6 +15,4 @@ public class IngestionOutput { public IngestionOutput(){ ingestedDocumentId=new ArrayList(); } - - } diff --git a/src/main/java/com/olympus/apollo/dto/VectorStoreDetails.java b/src/main/java/com/olympus/apollo/dto/VectorStoreDetails.java new file mode 100644 index 0000000..8c93cd6 --- /dev/null +++ b/src/main/java/com/olympus/apollo/dto/VectorStoreDetails.java @@ -0,0 +1,10 @@ +package com.olympus.apollo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter +public class VectorStoreDetails { + private String id; + private VectorStoreMetadataDetails metadata; +} diff --git a/src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java b/src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java new file mode 100644 index 0000000..e891af5 --- /dev/null +++ b/src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java @@ -0,0 +1,15 @@ +package com.olympus.apollo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter +public class VectorStoreMetadataDetails { + + private String KsApplicationName; + private String KsDoctype; + private String KsDocSource; + private String source; + private String Source; + +} diff --git a/src/main/java/com/olympus/apollo/models/VectorStore.java b/src/main/java/com/olympus/apollo/models/VectorStore.java new file mode 100644 index 0000000..2f00870 --- /dev/null +++ b/src/main/java/com/olympus/apollo/models/VectorStore.java @@ -0,0 +1,20 @@ +package com.olympus.apollo.models; + +import lombok.Getter; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.util.HashMap; + +@Document(collection = "vector_store") +@Getter +public class VectorStore { + private @Id String id; + + private HashMap metadata; + private String content; + private String media; + private String embedding; + private HashMap contentFormatter; + +} diff --git a/src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java b/src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java new file mode 100644 index 0000000..33ee6cb --- /dev/null +++ b/src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java @@ -0,0 +1,24 @@ +package com.olympus.apollo.repository; + +import com.olympus.apollo.dto.VectorStoreDetails; +import com.olympus.apollo.dto.VectorStoreMetadataDetails; +import com.olympus.apollo.models.VectorStore; +import org.springframework.data.mongodb.repository.Aggregation; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +@Repository +public interface VectorStoreRepository extends MongoRepository { + @Aggregation(pipeline = { + "{ $project: { _id: 1 } }" + }) + List findAllIds(); + + @Aggregation(pipeline = { + "{ $project: { _id: 1, metadata: 1 } }" + }) + List findAllDetails(); +} diff --git a/src/main/java/com/olympus/apollo/services/KSIngestor.java b/src/main/java/com/olympus/apollo/services/KSIngestor.java index c8ae1b4..276932e 100644 --- a/src/main/java/com/olympus/apollo/services/KSIngestor.java +++ b/src/main/java/com/olympus/apollo/services/KSIngestor.java @@ -146,7 +146,7 @@ public class KSIngestor { }); ksDocument.setIngestionStatus("INGESTED"); ksDocument.setIngestionDate(new Date()); - + ksDocument.setIngestionDateFormat(new SimpleDateFormat("MM/dd/yy").format(new Date())); ksDocumentRepository.save(ksDocument); ingestionLoopOutput.getIngestedDocumentId().add(ksDocument.getId()); From 0ce79eca381b145fda3bb127462fa4d83a13ccb4 Mon Sep 17 00:00:00 2001 From: sumedh Date: Thu, 8 Aug 2024 10:36:38 +0530 Subject: [PATCH 3/8] Deletion of data from collections implemented --- .../FeApi/VectorStoreController.java | 12 +++- .../apollo/controllers/KSFileController.java | 2 +- .../apollo/controllers/TestController.java | 4 +- .../olympus/apollo/dto/DeletionRequest.java | 15 ++++ .../dto/VectorStoreMetadataDetails.java | 5 +- .../repository/VectorStoreRepository.java | 5 +- .../apollo/services/DeletionService.java | 70 +++++++++++++++++++ .../olympus/apollo/services/KSIngestor.java | 4 +- src/main/resources/application.properties | 4 +- 9 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/olympus/apollo/dto/DeletionRequest.java create mode 100644 src/main/java/com/olympus/apollo/services/DeletionService.java diff --git a/src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java b/src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java index 3b0e480..38a808c 100644 --- a/src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java +++ b/src/main/java/com/olympus/apollo/controllers/FeApi/VectorStoreController.java @@ -1,13 +1,14 @@ package com.olympus.apollo.controllers.FeApi; +import com.olympus.apollo.dto.DeletionRequest; import com.olympus.apollo.dto.VectorStoreDetails; import com.olympus.apollo.models.VectorStore; import com.olympus.apollo.repository.VectorStoreRepository; +import com.olympus.apollo.services.DeletionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.stream.Collectors; @RestController @RequestMapping("/fe-api/vector-store") @@ -16,6 +17,9 @@ public class VectorStoreController { @Autowired private VectorStoreRepository vectorStoreRepository; + @Autowired + private DeletionService deletionService; + @GetMapping("") public List getAllVectorStore(){ List result = (List) vectorStoreRepository.findAll(); @@ -39,4 +43,10 @@ public class VectorStoreController { return vectorStoreRepository.findAllDetails(); } + @PostMapping("/deleteRecords") + public String deleteRecords(@RequestBody DeletionRequest deletionRequest){ + deletionService.deleteRecords(deletionRequest); + return "Records Deleted Successfully"; + } + } diff --git a/src/main/java/com/olympus/apollo/controllers/KSFileController.java b/src/main/java/com/olympus/apollo/controllers/KSFileController.java index 65d4f85..54c7520 100644 --- a/src/main/java/com/olympus/apollo/controllers/KSFileController.java +++ b/src/main/java/com/olympus/apollo/controllers/KSFileController.java @@ -53,7 +53,7 @@ public class KSFileController { metadata.put("KsApplicationName", fileUploadDTO.getKsApplicationName()); metadata.put("KsDoctype", fileUploadDTO.getKsDocType()); metadata.put("KsDocSource", fileUploadDTO.getKsDocSource()); - metadata.put("Source", file.getOriginalFilename()); + metadata.put("KsFileSource", file.getOriginalFilename()); ksIngestionInfo.setMetadata(metadata); ksIngestionInfo.setDefaultChunkSize(fileUploadDTO.getDefaultChunkSize()); diff --git a/src/main/java/com/olympus/apollo/controllers/TestController.java b/src/main/java/com/olympus/apollo/controllers/TestController.java index 761aabd..fb55a50 100644 --- a/src/main/java/com/olympus/apollo/controllers/TestController.java +++ b/src/main/java/com/olympus/apollo/controllers/TestController.java @@ -34,8 +34,8 @@ public class TestController { } @GetMapping("test/query_vector") - public List testSimilaritySearch(@RequestParam String query, @RequestParam String type) { - return ksIngestor.testSimilaritySearch(query,type); + public List testSimilaritySearch(@RequestParam String query, @RequestParam String filterQuery) { + return ksIngestor.testSimilaritySearch(query,filterQuery); } @GetMapping("test/delete") diff --git a/src/main/java/com/olympus/apollo/dto/DeletionRequest.java b/src/main/java/com/olympus/apollo/dto/DeletionRequest.java new file mode 100644 index 0000000..034d6d5 --- /dev/null +++ b/src/main/java/com/olympus/apollo/dto/DeletionRequest.java @@ -0,0 +1,15 @@ +package com.olympus.apollo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter +public class DeletionRequest { + private String ksDocumentId; + private String ksIngestionInfoId; + private String ksDoctype; + private String ksDocSource; + private String ksFileSource; + private String ksApplicationName; +} + diff --git a/src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java b/src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java index e891af5..8a7cd41 100644 --- a/src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java +++ b/src/main/java/com/olympus/apollo/dto/VectorStoreMetadataDetails.java @@ -9,7 +9,6 @@ public class VectorStoreMetadataDetails { private String KsApplicationName; private String KsDoctype; private String KsDocSource; - private String source; - private String Source; - + private String KsFileSource; } + diff --git a/src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java b/src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java index 33ee6cb..968437a 100644 --- a/src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java +++ b/src/main/java/com/olympus/apollo/repository/VectorStoreRepository.java @@ -1,10 +1,10 @@ package com.olympus.apollo.repository; import com.olympus.apollo.dto.VectorStoreDetails; -import com.olympus.apollo.dto.VectorStoreMetadataDetails; import com.olympus.apollo.models.VectorStore; import org.springframework.data.mongodb.repository.Aggregation; import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; @@ -21,4 +21,7 @@ public interface VectorStoreRepository extends MongoRepository findAllDetails(); + + @Query("{'metadata.KsDoctype': ?0, 'metadata.KsDocSource': ?1, 'metadata.KsFileSource': ?2, 'metadata.KsApplicationName': ?3}") + List findByMetadata(String ksDoctype, String ksDocSource, String ksFileSource, String ksApplicationName); } diff --git a/src/main/java/com/olympus/apollo/services/DeletionService.java b/src/main/java/com/olympus/apollo/services/DeletionService.java new file mode 100644 index 0000000..650c666 --- /dev/null +++ b/src/main/java/com/olympus/apollo/services/DeletionService.java @@ -0,0 +1,70 @@ +package com.olympus.apollo.services; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.olympus.apollo.dto.DeletionRequest; +import com.olympus.apollo.dto.VectorStoreMetadataDetails; +import com.olympus.apollo.models.VectorStore; +import com.olympus.apollo.repository.KSDocumentRepository; +import com.olympus.apollo.repository.KSIngestionInfoRepository; +import com.olympus.apollo.repository.VectorStoreRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class DeletionService { + + private static final Logger logger = LoggerFactory.getLogger(DeletionService.class); + + @Autowired + private KSDocumentRepository ksDocumentRepository; + + @Autowired + private KSIngestionInfoRepository ksIngestionInfoRepository; + + @Autowired + private VectorStoreRepository vectorStoreRepository; + + public void deleteRecords(DeletionRequest deletionRequest) { + try { + boolean KSDocumentExists = deletionRequest.getKsDocumentId() != null && !deletionRequest.getKsDocumentId().isEmpty() && ksDocumentRepository.existsById(deletionRequest.getKsDocumentId()); + boolean KSIngestionInfoExists = deletionRequest.getKsIngestionInfoId() != null && !deletionRequest.getKsIngestionInfoId().isEmpty() && ksIngestionInfoRepository.existsById(deletionRequest.getKsIngestionInfoId()); + boolean vectorStoreExists = deletionRequest.getKsApplicationName() != null && deletionRequest.getKsDocSource() != null && deletionRequest.getKsFileSource() != null && deletionRequest.getKsDoctype() != null; + + List vectorStoreMetadataDetails = vectorStoreExists ? vectorStoreRepository.findByMetadata(deletionRequest.getKsDoctype(), deletionRequest.getKsDocSource(), deletionRequest.getKsFileSource(), deletionRequest.getKsApplicationName()) : List.of(); + + if (KSDocumentExists && KSIngestionInfoExists && !vectorStoreMetadataDetails.isEmpty()) { + if (deletionRequest.getKsDocumentId() != null && !deletionRequest.getKsDocumentId().isEmpty()) { + ksDocumentRepository.deleteById(deletionRequest.getKsDocumentId()); + logger.info("KSDocument with id {} deleted successfully.", deletionRequest.getKsDocumentId()); + } + + if (deletionRequest.getKsIngestionInfoId() != null && !deletionRequest.getKsIngestionInfoId().isEmpty()) { + ksIngestionInfoRepository.deleteById(deletionRequest.getKsIngestionInfoId()); + logger.info("KSIngestionInfo with id {} deleted successfully.", deletionRequest.getKsIngestionInfoId()); + } + + for (VectorStore store : vectorStoreMetadataDetails) { + vectorStoreRepository.deleteById(store.getId()); + logger.info("VectorStore with id {} deleted successfully.", store.getId()); + } + logger.info("All records deleted successfully."); + } else { + if (!KSDocumentExists) { + logger.warn("KSDocument with id {} does not exist.", deletionRequest.getKsDocumentId()); + } else if (!KSIngestionInfoExists) { + logger.warn("KSIngestionInfo with id {} does not exist.", deletionRequest.getKsIngestionInfoId()); + } else if (vectorStoreMetadataDetails.isEmpty()) { + logger.warn("No VectorStore Data available"); + + } + } + } catch (Exception e) { + logger.error("An error occurred while deleting records: ", e); + throw new RuntimeException("An error occurred while deleting records", e); + } + } +} diff --git a/src/main/java/com/olympus/apollo/services/KSIngestor.java b/src/main/java/com/olympus/apollo/services/KSIngestor.java index 276932e..a692e4b 100644 --- a/src/main/java/com/olympus/apollo/services/KSIngestor.java +++ b/src/main/java/com/olympus/apollo/services/KSIngestor.java @@ -174,12 +174,12 @@ public class KSIngestor { } } - public List testSimilaritySearch(String query,String filter_doc_type) { + public List testSimilaritySearch(String query,String filterQuery) { List docs = vectorStore.similaritySearch( SearchRequest.defaults() .withQuery(query) .withTopK(5).withSimilarityThreshold(0.8) - .withFilterExpression("'KsDoctype'=='"+filter_doc_type+"'")); + .withFilterExpression(filterQuery)); List result = new ArrayList(); for (Document doc : docs) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b9f6efe..121bc5b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -24,6 +24,6 @@ spring.ai.vectorstore.mongodb.initialize-schema=false spring.ai.openai.api-key=sk-proj-j3TFJ0h348DIzMrYYfyUT3BlbkFJjk4HMc8A2ux2Asg8Y7H1 #size filter -spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB +spring.servlet.multipart.max-file-size=100MB +spring.servlet.multipart.max-request-size=100MB From a6b40301412aaad27f3b72dd793f016bf33615ca Mon Sep 17 00:00:00 2001 From: sumedh Date: Thu, 8 Aug 2024 13:19:44 +0530 Subject: [PATCH 4/8] authentication method done --- pom.xml | 21 +++++ .../apollo/security/config/CorsConfig.java | 17 ++++ .../security/config/SecurityConfig.java | 89 ++++++++++++++++++ .../security/controllers/AuthController.java | 90 +++++++++++++++++++ .../security/dto/AuthenticationRequest.java | 16 ++++ .../security/dto/AuthenticationResponse.java | 19 ++++ .../security/dto/FetchUserResponse.java | 23 +++++ .../olympus/apollo/security/entity/Role.java | 5 ++ .../olympus/apollo/security/entity/User.java | 43 +++++++++ .../security/filter/JwtTokenFilter.java | 53 +++++++++++ .../security/repository/UserRepository.java | 14 +++ .../services/CustomUserDetailsService.java | 35 ++++++++ .../utility/JwtAuthenticationEntryPoint.java | 29 ++++++ .../security/utility/JwtTokenProvider.java | 76 ++++++++++++++++ src/main/resources/application.properties | 2 + 15 files changed, 532 insertions(+) create mode 100644 src/main/java/com/olympus/apollo/security/config/CorsConfig.java create mode 100644 src/main/java/com/olympus/apollo/security/config/SecurityConfig.java create mode 100644 src/main/java/com/olympus/apollo/security/controllers/AuthController.java create mode 100644 src/main/java/com/olympus/apollo/security/dto/AuthenticationRequest.java create mode 100644 src/main/java/com/olympus/apollo/security/dto/AuthenticationResponse.java create mode 100644 src/main/java/com/olympus/apollo/security/dto/FetchUserResponse.java create mode 100644 src/main/java/com/olympus/apollo/security/entity/Role.java create mode 100644 src/main/java/com/olympus/apollo/security/entity/User.java create mode 100644 src/main/java/com/olympus/apollo/security/filter/JwtTokenFilter.java create mode 100644 src/main/java/com/olympus/apollo/security/repository/UserRepository.java create mode 100644 src/main/java/com/olympus/apollo/security/services/CustomUserDetailsService.java create mode 100644 src/main/java/com/olympus/apollo/security/utility/JwtAuthenticationEntryPoint.java create mode 100644 src/main/java/com/olympus/apollo/security/utility/JwtTokenProvider.java diff --git a/pom.xml b/pom.xml index 1c685a1..8865359 100644 --- a/pom.xml +++ b/pom.xml @@ -98,6 +98,27 @@ 6.8.0.202311291450-r + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + + + + org.springframework.boot + spring-boot-starter-security + + diff --git a/src/main/java/com/olympus/apollo/security/config/CorsConfig.java b/src/main/java/com/olympus/apollo/security/config/CorsConfig.java new file mode 100644 index 0000000..7c6e6bb --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/config/CorsConfig.java @@ -0,0 +1,17 @@ +package com.olympus.apollo.security.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class CorsConfig implements WebMvcConfigurer { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedHeaders("*") + .allowedMethods("GET", "POST", "PUT", "DELETE"); + } +} + diff --git a/src/main/java/com/olympus/apollo/security/config/SecurityConfig.java b/src/main/java/com/olympus/apollo/security/config/SecurityConfig.java new file mode 100644 index 0000000..f3db6bb --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/config/SecurityConfig.java @@ -0,0 +1,89 @@ +package com.olympus.apollo.security.config; + +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import org.springframework.context.annotation.Lazy; +import org.springframework.security.authentication.AuthenticationManager; + +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.password.NoOpPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +import com.olympus.apollo.security.filter.JwtTokenFilter; +import com.olympus.apollo.security.services.CustomUserDetailsService; + +@EnableWebSecurity +@Configuration +public class SecurityConfig { + + @Autowired + CustomUserDetailsService userDetailsService; + + /* @Autowired + private AuthEntryPointJwt unauthorizedHandler; + */ + @Bean + public JwtTokenFilter authenticationJwtTokenFilter() { + return new JwtTokenFilter(); + } + +//@Override +//public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { +// authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); +//} + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); + + authProvider.setUserDetailsService(userDetailsService); + authProvider.setPasswordEncoder(passwordEncoder()); + + return authProvider; + } + +//@Bean +//@Override +//public AuthenticationManager authenticationManagerBean() throws Exception { +// return super.authenticationManagerBean(); +//} + + @Bean + public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { + return authConfig.getAuthenticationManager(); + } + + + @Bean + PasswordEncoder passwordEncoder() { + return NoOpPasswordEncoder.getInstance(); + } + + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.csrf(csrf -> csrf.disable()) + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests(auth -> auth.requestMatchers("/api/auth/**").permitAll().requestMatchers("/api/test/**") + .permitAll().anyRequest().authenticated()); + + http.authenticationProvider(authenticationProvider()); + + http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); + + return http.build(); + } + +} \ No newline at end of file diff --git a/src/main/java/com/olympus/apollo/security/controllers/AuthController.java b/src/main/java/com/olympus/apollo/security/controllers/AuthController.java new file mode 100644 index 0000000..46cc661 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/controllers/AuthController.java @@ -0,0 +1,90 @@ +package com.olympus.apollo.security.controllers; + +import java.security.Principal; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.CrossOrigin; +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.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.olympus.apollo.security.dto.AuthenticationRequest; +import com.olympus.apollo.security.dto.AuthenticationResponse; +import com.olympus.apollo.security.dto.FetchUserResponse; +import com.olympus.apollo.security.entity.User; +import com.olympus.apollo.security.utility.JwtTokenProvider; + +@RestController +@CrossOrigin +@RequestMapping("/api/auth") +public class AuthController { + + @Autowired + private AuthenticationManager authenticationManager; + + @Autowired + private JwtTokenProvider jwtTokenProvider; + + @PostMapping("/login") + public ResponseEntity authenticateUser(@RequestBody AuthenticationRequest authenticationRequest) { + + Authentication authentication = authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken( + authenticationRequest.getUsername(), + authenticationRequest.getPassword() + ) + ); + + SecurityContextHolder.getContext().setAuthentication(authentication); + String jwt = jwtTokenProvider.createToken(authentication); + + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("authorization", jwt); + httpHeaders.add("access-control-expose-headers", "authorization"); + AuthenticationResponse authenticationResponse = new AuthenticationResponse(jwt, (User) authentication.getPrincipal()); + + return ResponseEntity.ok().headers(httpHeaders).body(authenticationResponse); + + } + + @GetMapping("/fetch-user") + public FetchUserResponse fetchUser(Authentication authentication) { + User principal = (User) authentication.getPrincipal(); + principal.setPassword(null); + FetchUserResponse fetchUserResponse = new FetchUserResponse(); + fetchUserResponse.setData(principal); + return fetchUserResponse; + + } + + + @GetMapping("/refresh-token") + public ResponseEntity refreshToken(Authentication authentication) { + + + SecurityContextHolder.getContext().setAuthentication(authentication); + String jwt = jwtTokenProvider.createToken(authentication); + + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("authorization", jwt); + httpHeaders.add("access-control-expose-headers", "authorization"); + AuthenticationResponse authenticationResponse = new AuthenticationResponse(jwt, (User) authentication.getPrincipal()); + + return ResponseEntity.ok().headers(httpHeaders).body(authenticationResponse); + } + + @GetMapping("/test") + public ResponseEntity test() { + return ResponseEntity.ok(" you have access now "); + } +} diff --git a/src/main/java/com/olympus/apollo/security/dto/AuthenticationRequest.java b/src/main/java/com/olympus/apollo/security/dto/AuthenticationRequest.java new file mode 100644 index 0000000..4c4accc --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/dto/AuthenticationRequest.java @@ -0,0 +1,16 @@ +package com.olympus.apollo.security.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class AuthenticationRequest { + + private String username; + private String password; +} diff --git a/src/main/java/com/olympus/apollo/security/dto/AuthenticationResponse.java b/src/main/java/com/olympus/apollo/security/dto/AuthenticationResponse.java new file mode 100644 index 0000000..53dcd46 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/dto/AuthenticationResponse.java @@ -0,0 +1,19 @@ +package com.olympus.apollo.security.dto; + +import com.olympus.apollo.security.entity.User; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class AuthenticationResponse { + + private String accessToken; + private User data; + +} diff --git a/src/main/java/com/olympus/apollo/security/dto/FetchUserResponse.java b/src/main/java/com/olympus/apollo/security/dto/FetchUserResponse.java new file mode 100644 index 0000000..41f5aed --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/dto/FetchUserResponse.java @@ -0,0 +1,23 @@ +package com.olympus.apollo.security.dto; + +import java.util.Collection; +import java.util.List; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +import com.olympus.apollo.security.entity.Role; +import com.olympus.apollo.security.entity.User; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class FetchUserResponse { + private User data; + + + +} + diff --git a/src/main/java/com/olympus/apollo/security/entity/Role.java b/src/main/java/com/olympus/apollo/security/entity/Role.java new file mode 100644 index 0000000..1b56158 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/entity/Role.java @@ -0,0 +1,5 @@ +package com.olympus.apollo.security.entity; + +public enum Role { + ADMIN,USER +} diff --git a/src/main/java/com/olympus/apollo/security/entity/User.java b/src/main/java/com/olympus/apollo/security/entity/User.java new file mode 100644 index 0000000..0524cac --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/entity/User.java @@ -0,0 +1,43 @@ +package com.olympus.apollo.security.entity; + +import java.util.Collection; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import java.util.List; + + +@Document(collection = "users") +@Getter @Setter +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class User implements UserDetails{ + @Id + private String id; + private String username; + private String password; + private String name; + private String surname; + + private Role role; + + @Override + public Collection getAuthorities() { + return List.of(new SimpleGrantedAuthority(role.name())); + } + + +} + diff --git a/src/main/java/com/olympus/apollo/security/filter/JwtTokenFilter.java b/src/main/java/com/olympus/apollo/security/filter/JwtTokenFilter.java new file mode 100644 index 0000000..208b1d4 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/filter/JwtTokenFilter.java @@ -0,0 +1,53 @@ +package com.olympus.apollo.security.filter; + +import java.io.IOException; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import com.olympus.apollo.security.utility.JwtTokenProvider; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +@Component +@AllArgsConstructor +@NoArgsConstructor +public class JwtTokenFilter extends OncePerRequestFilter { + + @Autowired + private JwtTokenProvider jwtTokenProvider; + + @Autowired + private UserDetailsService userDetailsService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + String token = jwtTokenProvider.resolveToken(request); + + if (token != null && jwtTokenProvider.validateToken(token)) { + + UserDetails userDetails = userDetailsService.loadUserByUsername(jwtTokenProvider.getUsername(token)); + + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); + + authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + filterChain.doFilter(request, response); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/olympus/apollo/security/repository/UserRepository.java b/src/main/java/com/olympus/apollo/security/repository/UserRepository.java new file mode 100644 index 0000000..e1ce363 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/repository/UserRepository.java @@ -0,0 +1,14 @@ +package com.olympus.apollo.security.repository; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; +import org.springframework.stereotype.Repository; + +import com.olympus.apollo.security.entity.User; + +@Repository +public interface UserRepository extends MongoRepository { + + @Query("{username:'?0'}") + User findUserByUsername(String username); +} diff --git a/src/main/java/com/olympus/apollo/security/services/CustomUserDetailsService.java b/src/main/java/com/olympus/apollo/security/services/CustomUserDetailsService.java new file mode 100644 index 0000000..b231ee7 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/services/CustomUserDetailsService.java @@ -0,0 +1,35 @@ +package com.olympus.apollo.security.services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import com.olympus.apollo.security.entity.User; +import com.olympus.apollo.security.repository.UserRepository; + +@Configuration +@Service +public class CustomUserDetailsService implements UserDetailsService { + + @Autowired + private UserRepository userRepository; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + try { + User user = userRepository.findUserByUsername(username); + if(user != null){ + return user; + }else{ + throw new Exception("user Not found "); + } + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/com/olympus/apollo/security/utility/JwtAuthenticationEntryPoint.java b/src/main/java/com/olympus/apollo/security/utility/JwtAuthenticationEntryPoint.java new file mode 100644 index 0000000..b7d7526 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/utility/JwtAuthenticationEntryPoint.java @@ -0,0 +1,29 @@ +package com.olympus.apollo.security.utility; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import io.jsonwebtoken.io.IOException; + + +@Component +public class JwtAuthenticationEntryPoint extends BasicAuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException, java.io.IOException { + + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType("application/json"); + response.getWriter().write("{ \"message\": \"" + authException.getMessage() + "\" }"); + } + + @Override + public void afterPropertiesSet() { + setRealmName("JWT Authentication"); + super.afterPropertiesSet(); + } +} diff --git a/src/main/java/com/olympus/apollo/security/utility/JwtTokenProvider.java b/src/main/java/com/olympus/apollo/security/utility/JwtTokenProvider.java new file mode 100644 index 0000000..55c13c2 --- /dev/null +++ b/src/main/java/com/olympus/apollo/security/utility/JwtTokenProvider.java @@ -0,0 +1,76 @@ +package com.olympus.apollo.security.utility; + +import org.springframework.stereotype.Component; + +import io.jsonwebtoken.*; +import io.jsonwebtoken.security.Keys; +import io.jsonwebtoken.security.SignatureException; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import java.security.Key; +import java.util.Date; + +@Component +@Slf4j +public class JwtTokenProvider { + + Key key = Keys.secretKeyFor(SignatureAlgorithm.HS512); + + public String createToken(Authentication authentication) { + + UserDetails userDetails = (UserDetails) authentication.getPrincipal(); + Date now = new Date(); + Date expiryDate = new Date(now.getTime() + 3600000); + + return Jwts.builder() + .setSubject(userDetails.getUsername()) + .setIssuedAt(new Date()) + .setExpiration(expiryDate) + .signWith(SignatureAlgorithm.HS512, key) + .compact(); + } + + + public String resolveToken(HttpServletRequest request) { + + String bearerToken = request.getHeader("Authorization"); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { + return bearerToken.substring(7); + } + return null; + } + + // Check if the token is valid and not expired + public boolean validateToken(String token) { + + try { + Jwts.parser().setSigningKey(key).parseClaimsJws(token); + return true; + } catch (MalformedJwtException ex) { + log.error("Invalid JWT token"); + } catch (ExpiredJwtException ex) { + log.error("Expired JWT token"); + } catch (UnsupportedJwtException ex) { + log.error("Unsupported JWT token"); + } catch (IllegalArgumentException ex) { + log.error("JWT claims string is empty"); + } catch (SignatureException e) { + log.error("there is an error with the signature of you token "); + } + return false; + } + + // Extract the username from the JWT token + public String getUsername(String token) { + + return Jwts.parser() + .setSigningKey(key) + .parseClaimsJws(token) + .getBody() + .getSubject(); + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 121bc5b..f7da776 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -27,3 +27,5 @@ spring.ai.openai.api-key=sk-proj-j3TFJ0h348DIzMrYYfyUT3BlbkFJjk4HMc8A2ux2Asg8Y7H spring.servlet.multipart.max-file-size=100MB spring.servlet.multipart.max-request-size=100MB +spring.main.allow-circular-references=true + From c74879b5bcf7637fc1c6458edac815876ecd79b7 Mon Sep 17 00:00:00 2001 From: Sumedh Date: Thu, 8 Aug 2024 13:12:06 +0000 Subject: [PATCH 5/8] Dockerfile Created --- Dockerfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a00638b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM amazoncorretto:21-al2023 +VOLUME /tmp +EXPOSE 8082 + +ARG JAR_FILE=target/apollo-0.0.1-SNAPSHOT.jar + + + +# Add the application's jar to the container +ADD ${JAR_FILE} /apollo.jar + + +ENTRYPOINT ["java","-jar","/apollo.jar"] From 7e10c87051c592cf73b305fcb2c53d41901ac1e7 Mon Sep 17 00:00:00 2001 From: Sumedh Date: Thu, 8 Aug 2024 13:14:15 +0000 Subject: [PATCH 6/8] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..9168d4f --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,49 @@ + + +stages: # List of stages for jobs, and their order of execution + - maven_build + - docker_build + +build-job: + stage: maven_build + image: maven:3.9.8-amazoncorretto-21-al2023 + script: + - echo "Building the project..." + - mvn clean install -DskipTests + - ls target/*.jar + artifacts: + paths: + - target/*.jar + tags: + - OLYMPUS + +docker_build-job: # This job runs in the test stage. + stage: docker_build # It only starts when the job in the build stage completes successfully. + image: gcr.io/kaniko-project/executor:debug + variables: + DOCKER_IMAGE_NAME: olytest/apollo:$CI_COMMIT_SHORT_SHA + dependencies: + - "build-job" + before_script: + - > + echo '{ + "auths": { + "https://index.docker.io/v1/": { + "auth": "b2x5dGVzdDpkY2tyX3BhdF9ZUFBCa21IVlVkbmx4R3dLT0t1TEtmQ1RTVTg=" + } + } + } ' >> /kaniko/.docker/config.json + script: + - /kaniko/executor + --context "${CI_PROJECT_DIR}" + --dockerfile "${CI_PROJECT_DIR}/Dockerfile" + --destination "${DOCKER_IMAGE_NAME}" + # Run this job in a branch where a Dockerfile exists + rules: + - if: $CI_COMMIT_BRANCH + exists: + - Dockerfile + tags: + - OLYMPUS + + From 73e9d63330770bb9ffabdb09f6544aeada22cdd0 Mon Sep 17 00:00:00 2001 From: Sumedh Date: Thu, 8 Aug 2024 13:21:08 +0000 Subject: [PATCH 7/8] Update pom.xml --- pom.xml | 57 --------------------------------------------------------- 1 file changed, 57 deletions(-) diff --git a/pom.xml b/pom.xml index 8865359..5fe161e 100644 --- a/pom.xml +++ b/pom.xml @@ -129,61 +129,4 @@ - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - false - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - false - - - - jgit-repository - https://repo.eclipse.org/content/groups/releases/ - - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - false - - - - From 552e291ccbbb6e80ba6ce4a023b731df8c90af72 Mon Sep 17 00:00:00 2001 From: sumedh Date: Fri, 9 Aug 2024 00:26:30 +0530 Subject: [PATCH 8/8] gitlab manual trigger set --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9168d4f..b961b52 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,6 +14,7 @@ build-job: artifacts: paths: - target/*.jar + when: manual tags: - OLYMPUS @@ -43,6 +44,7 @@ docker_build-job: # This job runs in the test stage. - if: $CI_COMMIT_BRANCH exists: - Dockerfile + when: manual tags: - OLYMPUS