diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java index d57398433e5ebf9595087615701029f63f30cb7e..6740ca49eea7fa57ae789767833d5e9575f148bf 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java @@ -1,15 +1,23 @@ package de.deadlocker8.budgetmaster.controller; +import de.deadlocker8.budgetmaster.authentication.User; +import de.deadlocker8.budgetmaster.authentication.UserRepository; import de.deadlocker8.budgetmaster.entities.Settings; import de.deadlocker8.budgetmaster.repositories.SettingsRepository; import de.deadlocker8.budgetmaster.services.HelpersService; +import de.deadlocker8.budgetmaster.utils.LanguageType; +import de.deadlocker8.budgetmaster.utils.Strings; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; @Controller @@ -18,6 +26,9 @@ public class SettingsController extends BaseController @Autowired private SettingsRepository settingsRepository; + @Autowired + private UserRepository userRepository; + @Autowired private HelpersService helpers; @@ -29,36 +40,41 @@ public class SettingsController extends BaseController } @RequestMapping(value = "/settings/save", method = RequestMethod.POST) - public String post(Model model, @ModelAttribute("Settings") Settings settings, BindingResult bindingResult) + public String post(Model model, @ModelAttribute("Settings") Settings settings, BindingResult bindingResult, + @RequestParam(value = "password") String password, + @RequestParam(value = "languageType") String languageType) { -// CategoryValidator userValidator = new CategoryValidator(); -// userValidator.validate(category, bindingResult); -// -// if(bindingResult.hasErrors()) -// { -// model.addAttribute("error", bindingResult); -// -// if(helpers.getCategoryColorList().contains(category.getColor())) -// { -// model.addAttribute("customColor", "#FFFFFF"); -// } -// else -// { -// model.addAttribute("customColor", category.getColor()); -// } -// -// if(category.getColor() == null) -// { -// category.setColor(ConvertTo.toRGBHexWithoutOpacity(Colors.CATEGORIES_LIGHT_GREY).toLowerCase()); -// } -// model.addAttribute("category", category); -// return "categories/newCategory"; -// } -// else -// { -// category.setType(CategoryType.CUSTOM); -// categoryRepository.save(category); -// } + if(password == null ||password.equals("")) + { + bindingResult.addError(new ObjectError("password", Strings.WARNING_SETTINGS_PASSWORD_EMPTY)); + } + else if(password.length() < 3) + { + bindingResult.addError(new ObjectError("password", Strings.WARNING_SETTINGS_PASSWORD_LENGTH)); + } + + settings.setLanguage(LanguageType.fromName(languageType)); + + if(bindingResult.hasErrors()) + { + model.addAttribute("error", bindingResult); + model.addAttribute("settings", settings); + return "settings"; + } + else + { + if(!password.equals("•••••")) + { + BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + String encryptedPassword = bCryptPasswordEncoder.encode(password); + User user = userRepository.findByName("Default"); + user.setPassword(encryptedPassword); + userRepository.save(user); + } + + settingsRepository.delete(0); + settingsRepository.save(settings); + } return "redirect:/settings"; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java index dc924b1e84d0f49d165e13fcc521ebb363e9f506..520349c7816748a7868ac9e0b69a8fe6031bd67a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java @@ -16,9 +16,6 @@ public class Settings { @Id private int ID; - @NotNull - @Size(min = 1) - private String password; private String currency; private LanguageType language; private boolean restActivated; @@ -33,7 +30,6 @@ public class Settings public static Settings getDefault() { Settings defaultSettings = new Settings(); - defaultSettings.setPassword("BudgetMaster"); defaultSettings.setCurrency("€"); defaultSettings.setLanguage(LanguageType.ENGLISH); defaultSettings.setRestActivated(true); @@ -48,16 +44,6 @@ public class Settings return ID; } - public String getPassword() - { - return password; - } - - public void setPassword(String password) - { - this.password = password; - } - public String getCurrency() { return currency; @@ -111,8 +97,8 @@ public class Settings @Override public String toString() { - return "SettingsRepository{" + - "password='" + password + '\'' + + return "Settings{" + + "ID=" + ID + ", currency='" + currency + '\'' + ", language=" + language + ", restActivated=" + restActivated + diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/LanguageType.java b/src/main/java/de/deadlocker8/budgetmaster/utils/LanguageType.java index 5ec11ab940cdd002b8860014a201b252da4ddbc5..66c88f1c038d3094fa0121c236f44ad44e4d4a3a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/LanguageType.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/LanguageType.java @@ -32,4 +32,17 @@ public enum LanguageType { return iconName; } + + public static LanguageType fromName(String name) + { + for(LanguageType type : values()) + { + if(type.getName().equals(name)) + { + return type; + } + } + + return null; + } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java index 470cdfb1904efe8e9539711fd0453def6e0475e9..29d778ff30c33b80505233bca1566e77b12a6494 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java @@ -215,6 +215,8 @@ public class Strings public static final String WARNING_SERVER_VERSION = "warning.server.version"; public static final String WARNING_EMPTY_YEAR = "warning.empty.year"; public static final String WARNING_WRONG_YEAR = "warning.wrong.year"; + public static final String WARNING_SETTINGS_PASSWORD_EMPTY = "warning.settings.password.empty"; + public static final String WARNING_SETTINGS_PASSWORD_LENGTH = "warning.settings.password.length"; //ERROR public static final String ERROR_UNKNOWN_HOST = "error.unknown.host"; diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index 23a6e7b19bc17efc7016a22ca024e262f1238824..9cd5b17ecf0d49336e145b7cc77b6bff3e21c3e8 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -226,6 +226,8 @@ warning.wrong.password=Das Passwort ist nicht korrekt. warning.server.version=Die installierte Serverversion (Version: {0}) ist nicht kompatibel mit deinem Client (Version: {1}).\n\nBitte aktualisiere deinen Server:\nSchritt 1: Server stoppen\nSchritt 2: BudgetMasterServer.jar mit aktuellester Version ersetzen\nSchritt 3: Server starten warning.empty.year=Bitte gib ein Jahr ein. warning.wrong.year=Bitte gib eine g�ltige Jahreszahl ein (4 Ziffern). +warning.settings.password.empty=Bitte gib ein Passwort ein. +warning.settings.password.length=Das Passwort muss mindestens drei Zeichen lang sein. # ERROR error.unknown.host=Es konnte keine Verbindung mit dem Internet hergestellt werden. diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index df51cd34c9d7a152b439df115400f5c0820a312d..dc6a4f064f4b623bc5c491eb506e6b883e7aca61 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -226,6 +226,8 @@ warning.wrong.password=The password is not correct. warning.server.version=The installed server version (version: {0}) is not compatible with your client (version: {1}).\n\nPlease update your server:\nStep 1: stop server\nStep 2: replace BudgetMasterServer.jar with latest version\nStep 3: start server warning.empty.year=Please enter a year. warning.wrong.year=Please enter a valid year (4 digits). +warning.settings.password.empty=Please enter a password. +warning.settings.password.length=The password must be at least three characters long. # ERROR error.unknown.host=Could not connect to the Internet. diff --git a/src/main/resources/templates/settings.ftl b/src/main/resources/templates/settings.ftl index da30e8618635a22e438ccc34d03af964559cdde5..caefd9b88682b16c95c0103f323d3279e62e218e 100644 --- a/src/main/resources/templates/settings.ftl +++ b/src/main/resources/templates/settings.ftl @@ -44,7 +44,7 @@ <div class="switch"> <label> ${locale.getString("settings.rest.deactivated")} - <input type="checkbox" name="isPayment" <#if settings.isRestActivated()>checked</#if>> + <input type="checkbox" name="restActivated" <#if settings.isRestActivated()>checked</#if>> <span class="lever"></span> ${locale.getString("settings.rest.activated")} </label> @@ -55,7 +55,7 @@ <div class="switch"> <label> ${locale.getString("settings.darkTheme.deactivated")} - <input type="checkbox" name="isPayment" <#if settings.isUseDarkTheme()>checked</#if>> + <input type="checkbox" name="useDarkTheme" <#if settings.isUseDarkTheme()>checked</#if>> <span class="lever"></span> ${locale.getString("settings.darkTheme.activated")} </label> @@ -66,7 +66,7 @@ <#-- language --> <div class="row"> <div class="input-field col s12 m12 l8 offset-l2"> - <select id="settings-language" name="language" <@validation.validation "language"/>> + <select id="settings-language" name="languageType" <@validation.validation "language"/>> <#list helpers.getAvailableLanguages() as language> <#if settings.getLanguage() == language> <option selected value="${language.getName()}">${language.getName()}</option> @@ -94,7 +94,7 @@ <div class="switch"> <label> ${locale.getString("settings.updates.automatic.deactivated")} - <input type="checkbox" name="isPayment" <#if settings.isUseDarkTheme()>checked</#if>> + <input type="checkbox" name="autoUpdateCheckEnabled" <#if settings.isUseDarkTheme()>checked</#if>> <span class="lever"></span> ${locale.getString("settings.updates.automatic.activated")} </label>