diff --git a/Dockerfile b/Dockerfile index 20b30a2c607ad7dcc1cc62fdf2afe44e32ffc12c..98a4934bf5ca11e265f4ed9cbdbf57d766e658ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,5 +24,5 @@ COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 # Run the application -CMD ["java", "-jar", "app.jar"] +CMD ["java", "-DAPI_URL=https://api.sparesti.org", "-DFRONTEND_URL=https://sparesti.org", "-jar", "app.jar"] diff --git a/src/main/java/no/ntnu/idi/stud/savingsapp/SparestiApplication.java b/src/main/java/no/ntnu/idi/stud/savingsapp/SparestiApplication.java index ed46dfcf1d76a663ed198ec09335124e46c0c73a..b080fcf4d66fe7f78b6646468e15850cc5bb526c 100644 --- a/src/main/java/no/ntnu/idi/stud/savingsapp/SparestiApplication.java +++ b/src/main/java/no/ntnu/idi/stud/savingsapp/SparestiApplication.java @@ -17,4 +17,20 @@ public class SparestiApplication { public static void main(String[] args) { SpringApplication.run(SparestiApplication.class, args); } + + /** + * Returns the URL for the frontend application. + * @return the URL for the frontend application + */ + public static String getFrontendURL() { + return System.getProperty("FRONTEND_URL", "http://localhost"); + } + + /** + * Returns the URL for the backend application. + * @return the URL for the backend application + */ + public static String getBackendURL() { + return System.getProperty("API_URL", "http://localhost:8080"); + } } diff --git a/src/main/java/no/ntnu/idi/stud/savingsapp/controller/redirect/RedirectController.java b/src/main/java/no/ntnu/idi/stud/savingsapp/controller/redirect/RedirectController.java index 3639ebfc816f6f8bf06084040cbec5e36cbbf5d0..17a2e54ee719c5caca1752539f252b2b99390755 100644 --- a/src/main/java/no/ntnu/idi/stud/savingsapp/controller/redirect/RedirectController.java +++ b/src/main/java/no/ntnu/idi/stud/savingsapp/controller/redirect/RedirectController.java @@ -3,6 +3,7 @@ package no.ntnu.idi.stud.savingsapp.controller.redirect; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import no.ntnu.idi.stud.savingsapp.SparestiApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.*; @@ -33,13 +34,13 @@ public class RedirectController { HttpServletRequest request, HttpServletResponse response) { if (request.getParameterMap().containsKey("code")) { String code = request.getParameterMap().get("code")[0]; - response.setHeader("Location", "http://localhost:5173/redirect?code=" + code + "&state=" + state); + response.setHeader("Location", SparestiApplication.getFrontendURL() + "/redirect?code=" + code + "&state=" + state); response.setStatus(302); return; } // Default redirection if "code" parameter is missing try { - response.sendRedirect("http://localhost:5173/login"); + response.sendRedirect(SparestiApplication.getFrontendURL() + "/login"); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/no/ntnu/idi/stud/savingsapp/controller/user/UserController.java b/src/main/java/no/ntnu/idi/stud/savingsapp/controller/user/UserController.java index e32d27b4efa7eaa18c8d1c6492886098168985c3..259bcfc3b8a9790f204b96b3b7d4ccfe0b2e5659 100644 --- a/src/main/java/no/ntnu/idi/stud/savingsapp/controller/user/UserController.java +++ b/src/main/java/no/ntnu/idi/stud/savingsapp/controller/user/UserController.java @@ -126,6 +126,9 @@ public class UserController { if (updateDTO.getProfileImage() != null) { user.setProfileImage(updateDTO.getProfileImage()); } + if(updateDTO.getBannerImage() != null) { + user.setBannerImage(updateDTO.getBannerImage()); + } if (updateDTO.getConfiguration() != null) { if (updateDTO.getConfiguration().getCommitment() != null) { user.getConfiguration().setCommitment(Commitment.valueOf(updateDTO.getConfiguration().getCommitment())); diff --git a/src/main/java/no/ntnu/idi/stud/savingsapp/dto/user/UserUpdateDTO.java b/src/main/java/no/ntnu/idi/stud/savingsapp/dto/user/UserUpdateDTO.java index d4ca79fb86a9d8a786ae9e260057bc8ebe14f884..ead9c5526147bcf283b8a4c5f026ac6ed3702f7c 100644 --- a/src/main/java/no/ntnu/idi/stud/savingsapp/dto/user/UserUpdateDTO.java +++ b/src/main/java/no/ntnu/idi/stud/savingsapp/dto/user/UserUpdateDTO.java @@ -2,11 +2,9 @@ package no.ntnu.idi.stud.savingsapp.dto.user; import jakarta.validation.Valid; import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotNull; import lombok.Data; import no.ntnu.idi.stud.savingsapp.dto.configuration.ConfigurationDTO; import no.ntnu.idi.stud.savingsapp.validation.Name; -import no.ntnu.idi.stud.savingsapp.validation.Password; @Data public final class UserUpdateDTO { @@ -22,6 +20,8 @@ public final class UserUpdateDTO { private Long profileImage; + private Long bannerImage; + @Valid private ConfigurationDTO configuration; } diff --git a/src/main/java/no/ntnu/idi/stud/savingsapp/security/SecurityConfig.java b/src/main/java/no/ntnu/idi/stud/savingsapp/security/SecurityConfig.java index 9e106a396e9b082f755ec5e4615bab153b76b3fe..07e94e7bd390141021e83c3b27b004c23afe0b0a 100644 --- a/src/main/java/no/ntnu/idi/stud/savingsapp/security/SecurityConfig.java +++ b/src/main/java/no/ntnu/idi/stud/savingsapp/security/SecurityConfig.java @@ -1,6 +1,7 @@ package no.ntnu.idi.stud.savingsapp.security; import jakarta.servlet.DispatcherType; +import no.ntnu.idi.stud.savingsapp.SparestiApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -66,7 +67,7 @@ public class SecurityConfig { public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration config = new CorsConfiguration(); config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")); - config.setAllowedOrigins(List.of("http://localhost")); + config.setAllowedOrigins(List.of(SparestiApplication.getFrontendURL())); config.setAllowedHeaders(Arrays.asList("Authorization", "Content-Type", "Cache-Control")); config.setAllowCredentials(true); diff --git a/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/EmailService.java b/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/EmailService.java index 3d598962c7f7006b57169d0d9af64edf14ee494b..eb9f8e1e20f66dbfebb234115cc3cd703cccc69b 100644 --- a/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/EmailService.java +++ b/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/EmailService.java @@ -2,6 +2,7 @@ package no.ntnu.idi.stud.savingsapp.service.impl; import jakarta.mail.MessagingException; import jakarta.mail.internet.MimeMessage; +import no.ntnu.idi.stud.savingsapp.SparestiApplication; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.mail.javamail.JavaMailSender; @@ -40,6 +41,7 @@ public class EmailService { ClassPathResource htmlResource = new ClassPathResource("reset-password/reset-password.html"); String html = StreamUtils.copyToString(htmlResource.getInputStream(), StandardCharsets.UTF_8); html = html.replace("{RESET_TOKEN}", token); + html = html.replace("{FRONTEND_URL}", SparestiApplication.getFrontendURL()); helper.setText(html, true); helper.addInline("logo", new ClassPathResource("reset-password/assets/logo.png")); diff --git a/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/UserServiceImpl.java b/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/UserServiceImpl.java index b5063e2e4e7790e50273a86270d29fbdf86cdc31..8429166abee85fcb295e6543be8a519d4e057a9e 100644 --- a/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/UserServiceImpl.java +++ b/src/main/java/no/ntnu/idi/stud/savingsapp/service/impl/UserServiceImpl.java @@ -3,6 +3,7 @@ package no.ntnu.idi.stud.savingsapp.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.mail.MessagingException; import lombok.extern.slf4j.Slf4j; +import no.ntnu.idi.stud.savingsapp.SparestiApplication; import no.ntnu.idi.stud.savingsapp.bank.model.Account; import no.ntnu.idi.stud.savingsapp.bank.service.AccountService; import no.ntnu.idi.stud.savingsapp.exception.auth.InvalidCredentialsException; @@ -151,7 +152,7 @@ public class UserServiceImpl implements UserService { httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + "ZGVtby1wcmVwcm9kOm1xWi1fNzUtZjJ3TnNpUVRPTmI3T240YUFaN3pjMjE4bXJSVmsxb3VmYTg="); List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair("client_id", "demo-preprod")); - params.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080/redirect")); + params.add(new BasicNameValuePair("redirect_uri", SparestiApplication.getBackendURL() + "/redirect")); params.add(new BasicNameValuePair("grant_type", "authorization_code")); params.add(new BasicNameValuePair("code", code)); httpPost.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8)); diff --git a/src/main/resources/reset-password/reset-password.html b/src/main/resources/reset-password/reset-password.html index 17b770b06a2ef064c5f30c63c64aaed8b16b202a..8e4e427fd8f51dc98fb36cdf9355afbe6294282c 100644 --- a/src/main/resources/reset-password/reset-password.html +++ b/src/main/resources/reset-password/reset-password.html @@ -60,7 +60,7 @@ <img alt="Sparesti logo" src="cid:logo" id="logo"> <h1>Password Recovery</h1> <p>You've requested to reset your password. Click the button below to proceed:</p> - <a href="http://localhost:5173/change-password/{RESET_TOKEN}" class="btn" + <a href="{FRONTEND_URL}/change-password/{RESET_TOKEN}" class="btn" style="font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 16px; color: #ffffff; font-weight: 400; text-decoration: none;font-size: 14px;display:inline-block; padding: 10px 24px;background-color: #4184F3; border-radius: 5px; min-width: 90px;">Reset Password</a>