Skip to content

Commit 3f7e72b

Browse files
committed
Merge branch 'dev' of https://github.com/touchmegit1/SmallTrend into dev
2 parents 5c53209 + 98f4c17 commit 3f7e72b

File tree

124 files changed

+3715
-512
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+3715
-512
lines changed

backend/.env.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ MAIL_PASSWORD=your_app_password
4242
# Optional override recipients for inventory notify-manager API (comma-separated emails)
4343
APP_NOTIFICATIONS_INVENTORY_MANAGER_RECIPIENTS=
4444

45+
# CORS allowed origins (comma-separated). Add your devtunnel frontend URL here when using devtunnels.
46+
# Example for devtunnels: CORS_ALLOWED_ORIGINS=http://localhost:5173,http://localhost:5174,https://7qb3wvmd-5173.asse.devtunnels.ms
47+
CORS_ALLOWED_ORIGINS=http://localhost:5173,http://localhost:5174,http://localhost:3000, https://7qb3wvmd-5173.asse.devtunnels.ms/
48+
4549
# Optional recipients for out-of-stock alerts (fallback: active MANAGER accounts)
4650
APP_NOTIFICATIONS_INVENTORY_OUT_OF_STOCK_RECIPIENTS=
4751
# Enable/disable daily out-of-stock summary email

backend/src/main/java/com/smalltrend/config/SecurityConfig.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.smalltrend.config;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.springframework.beans.factory.annotation.Value;
45
import org.springframework.context.annotation.Bean;
56
import org.springframework.context.annotation.Configuration;
67
import org.springframework.security.authentication.AuthenticationManager;
@@ -21,6 +22,7 @@
2122
import org.springframework.web.cors.CorsConfigurationSource;
2223
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
2324

25+
import java.util.ArrayList;
2426
import java.util.Arrays;
2527
import java.util.List;
2628

@@ -30,6 +32,9 @@
3032
@RequiredArgsConstructor
3133
public class SecurityConfig {
3234

35+
@Value("${cors.allowed-origins:http://localhost:5173,http://localhost:5174,http://localhost:3000}")
36+
private String corsAllowedOrigins;
37+
3338
private final JwtAuthenticationFilter jwtAuthFilter;
3439
private final UserDetailsService userDetailsService;
3540

@@ -57,8 +62,14 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
5762
@Bean
5863
public CorsConfigurationSource corsConfigurationSource() {
5964
CorsConfiguration configuration = new CorsConfiguration();
60-
configuration.setAllowedOrigins(
61-
Arrays.asList("http://localhost:5173", "http://localhost:5174", "http://localhost:3000"));
65+
List<String> origins = new ArrayList<>(Arrays.stream(corsAllowedOrigins.split(","))
66+
.map(String::trim)
67+
.filter(s -> !s.isEmpty())
68+
.toList());
69+
origins.add("https://*.devtunnels.ms");
70+
origins.add("http://localhost:*");
71+
origins.add("https://localhost:*");
72+
configuration.setAllowedOriginPatterns(origins.stream().distinct().toList());
6273
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
6374
configuration.setAllowedHeaders(List.of("*"));
6475
configuration.setAllowCredentials(true);

backend/src/main/java/com/smalltrend/config/WebConfig.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,43 @@
11
package com.smalltrend.config;
22

3+
import org.springframework.beans.factory.annotation.Value;
34
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.lang.NonNull;
6+
import org.springframework.web.servlet.config.annotation.CorsRegistry;
47
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
58
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
69

710
import java.nio.file.Path;
811
import java.nio.file.Paths;
12+
import java.util.ArrayList;
13+
import java.util.Arrays;
14+
import java.util.List;
915

1016
@Configuration
1117
public class WebConfig implements WebMvcConfigurer {
1218

19+
@Value("${cors.allowed-origins:http://localhost:5173,http://localhost:5174,http://localhost:3000}")
20+
private String corsAllowedOrigins;
21+
22+
@Override
23+
public void addCorsMappings(@NonNull CorsRegistry registry) {
24+
List<String> origins = new ArrayList<>(Arrays.stream(corsAllowedOrigins.split(","))
25+
.map(String::trim)
26+
.filter(origin -> !origin.isEmpty())
27+
.toList());
28+
origins.add("https://*.devtunnels.ms");
29+
origins.add("http://localhost:*");
30+
origins.add("https://localhost:*");
31+
32+
registry.addMapping("/**")
33+
.allowedOriginPatterns(origins.stream().distinct().toArray(String[]::new))
34+
.allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS")
35+
.allowedHeaders("*")
36+
.allowCredentials(true);
37+
}
38+
1339
@Override
14-
public void addResourceHandlers(ResourceHandlerRegistry registry) {
40+
public void addResourceHandlers(@NonNull ResourceHandlerRegistry registry) {
1541
Path uploadDir = Paths.get("uploads");
1642
String uploadPath = uploadDir.toFile().getAbsolutePath();
1743

backend/src/main/java/com/smalltrend/controller/AiChatController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
@RestController
1313
@RequestMapping("/api/ai")
1414
@RequiredArgsConstructor
15-
@CrossOrigin(origins = {"http://localhost:5173", "http://localhost:5174", "http://localhost:3000"})
1615
public class AiChatController {
1716

1817
private final AiChatService aiChatService;

backend/src/main/java/com/smalltrend/controller/AuditLogController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
@RestController
1515
@RequestMapping("/api/audit-logs")
1616
@RequiredArgsConstructor
17-
@CrossOrigin(origins = { "http://localhost:5173", "http://localhost:5174", "http://localhost:3000" })
1817
public class AuditLogController {
1918

2019
private final AuditLogService auditLogService;

backend/src/main/java/com/smalltrend/controller/AuthController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
@RestController
2828
@RequestMapping("/api/auth")
2929
@RequiredArgsConstructor
30-
@CrossOrigin(origins = {"http://localhost:5173", "http://localhost:5174", "http://localhost:3000"})
3130
public class AuthController {
3231

3332
private final UserService userService;

backend/src/main/java/com/smalltrend/controller/CRM/CampaignController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
@RestController
1616
@RequestMapping("/api/crm/campaigns")
1717
@RequiredArgsConstructor
18-
@CrossOrigin(origins = { "http://localhost:5173", "http://localhost:5174", "http://localhost:3000" })
1918
public class CampaignController {
2019

2120
private final CampaignService campaignService;

backend/src/main/java/com/smalltrend/controller/CRM/CouponController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
@RestController
1616
@RequestMapping("/api/crm/coupons")
1717
@RequiredArgsConstructor
18-
@CrossOrigin(origins = { "http://localhost:5173", "http://localhost:5174", "http://localhost:3000" })
1918
public class CouponController {
2019

2120
private final CouponService couponService;

backend/src/main/java/com/smalltrend/controller/CRM/CustomerController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
@RestController
1616
@RequestMapping("/api/crm")
1717
@RequiredArgsConstructor
18-
@CrossOrigin(origins = {"http://localhost:5173", "http://localhost:5174", "http://localhost:3000"})
1918
public class CustomerController {
2019

2120
private final CustomerService customerService;

backend/src/main/java/com/smalltrend/controller/CRM/CustomerTierController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
@RestController
1313
@RequestMapping("/api/crm/tiers")
1414
@RequiredArgsConstructor
15-
@CrossOrigin(origins = { "http://localhost:5173", "http://localhost:5174", "http://localhost:3000" })
1615
public class CustomerTierController {
1716

1817
private final CustomerTierService customerTierService;

0 commit comments

Comments
 (0)