From bb6059d63e265fc0b1c402db2971e0fd49fd38be Mon Sep 17 00:00:00 2001 From: Dmitry Isaenko Date: Fri, 6 Oct 2023 22:07:15 +0300 Subject: [PATCH] Add custom error page, add profile settings page '/profile/' --- .../ru/redrise/marinesco/RootController.java | 4 +- .../marinesco/ShinyApplicationRunner.java | 15 ++-- src/main/java/ru/redrise/marinesco/User.java | 26 +++--- .../redrise/marinesco/UserSettingsForm.java | 23 +++++ .../security/RegistrationController.java | 25 +++++- .../marinesco/security/RegistrationForm.java | 15 +++- .../marinesco/security/SecurityConfig.java | 10 ++- .../security/UserSettingsController.java | 82 ++++++++++++++++++ .../marinesco/web/HandyErrorController.java | 24 +++++ src/main/resources/static/jquery.js | 2 + src/main/resources/templates/error.html | 53 +++++++++++ src/main/resources/templates/login.html | 1 + .../resources/templates/registration.html | 24 +++-- .../resources/templates/user_settings.html | 26 ++++++ .../ru/redrise/marinesco/RootController.class | Bin 581 -> 581 bytes .../marinesco/ShinyApplicationRunner.class | Bin 4256 -> 5021 bytes .../classes/ru/redrise/marinesco/User.class | Bin 4950 -> 5303 bytes .../redrise/marinesco/UserSettingsForm.class | Bin 0 -> 2840 bytes .../security/RegistrationController.class | Bin 1878 -> 2777 bytes .../marinesco/security/RegistrationForm.class | Bin 4368 -> 4948 bytes .../marinesco/security/SecurityConfig.class | Bin 10209 -> 10651 bytes .../security/UserSettingsController.class | Bin 0 -> 4364 bytes .../marinesco/web/HandyErrorController.class | Bin 0 -> 1187 bytes target/classes/static/jquery.js | 2 + target/classes/templates/error.html | 53 +++++++++++ target/classes/templates/login.html | 1 + target/classes/templates/registration.html | 24 +++-- target/classes/templates/user_settings.html | 26 ++++++ 28 files changed, 401 insertions(+), 35 deletions(-) create mode 100644 src/main/java/ru/redrise/marinesco/UserSettingsForm.java create mode 100644 src/main/java/ru/redrise/marinesco/security/UserSettingsController.java create mode 100644 src/main/java/ru/redrise/marinesco/web/HandyErrorController.java create mode 100644 src/main/resources/static/jquery.js create mode 100644 src/main/resources/templates/error.html create mode 100644 src/main/resources/templates/user_settings.html create mode 100644 target/classes/ru/redrise/marinesco/UserSettingsForm.class create mode 100644 target/classes/ru/redrise/marinesco/security/UserSettingsController.class create mode 100644 target/classes/ru/redrise/marinesco/web/HandyErrorController.class create mode 100644 target/classes/static/jquery.js create mode 100644 target/classes/templates/error.html create mode 100644 target/classes/templates/user_settings.html diff --git a/src/main/java/ru/redrise/marinesco/RootController.java b/src/main/java/ru/redrise/marinesco/RootController.java index 84d928d..e4f8bf5 100644 --- a/src/main/java/ru/redrise/marinesco/RootController.java +++ b/src/main/java/ru/redrise/marinesco/RootController.java @@ -1,11 +1,13 @@ package ru.redrise.marinesco; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; +//@PreAuthorize("hasRole('USER')") @Controller public class RootController { - + @GetMapping("/") public String home(){ return "root"; diff --git a/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java b/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java index 406cbfe..3709c3e 100644 --- a/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java +++ b/src/main/java/ru/redrise/marinesco/ShinyApplicationRunner.java @@ -7,6 +7,7 @@ import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.password.PasswordEncoder; import lombok.extern.slf4j.Slf4j; import ru.redrise.marinesco.data.RolesRepository; @@ -25,13 +26,14 @@ public class ShinyApplicationRunner { } @Bean - public ApplicationRunner appRunner() { + public ApplicationRunner appRunner(PasswordEncoder encoder) { return args -> { if (isFirstRun()) { + log.info("Application first run"); setRoles(); - setAdmin(args); + setAdmin(args, encoder); } else - log.info("NOT FIRST APPLICATION RUN; DB Already set up"); + log.info("Regular run"); }; } @@ -45,7 +47,7 @@ public class ShinyApplicationRunner { new UserRole(null, "User", UserRole.Type.USER))); } - private void setAdmin(ApplicationArguments args) { + private void setAdmin(ApplicationArguments args, PasswordEncoder encoder) { List login = args.getOptionValues("admin_login"); List password = args.getOptionValues("admin_password"); @@ -53,10 +55,11 @@ public class ShinyApplicationRunner { if (login == null || login.size() == 0 || password == null || password.size() == 0) { log.warn("No administrator credentials provided, using defaults:\n * Login: root\n * Password: root\n Expected: --admin_login LOGIN --admin_password PASSWORD "); // TODO: Move into properties i18n - var adminUser = new User("root", "root", "SuperAdmin", adminRoleOnlyAthority); + var adminUser = new User("root", encoder.encode("root"), "SuperAdmin", adminRoleOnlyAthority); users.save(adminUser); return; } - users.save(new User(login.get(0), password.get(0), "SuperAdmin", adminRoleOnlyAthority)); + log.info("SuperAdmin role created\n * Login: {}", login.get(0)); + users.save(new User(login.get(0), encoder.encode(password.get(0)), "SuperAdmin", adminRoleOnlyAthority)); } } \ No newline at end of file diff --git a/src/main/java/ru/redrise/marinesco/User.java b/src/main/java/ru/redrise/marinesco/User.java index 30f49e4..969bdf1 100644 --- a/src/main/java/ru/redrise/marinesco/User.java +++ b/src/main/java/ru/redrise/marinesco/User.java @@ -1,11 +1,12 @@ package ru.redrise.marinesco; -import java.util.ArrayList; import java.util.List; import org.springframework.security.core.userdetails.UserDetails; +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @@ -14,14 +15,12 @@ import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; import ru.redrise.marinesco.security.UserRole; @Data @Entity @Table(name = "\"USER\"") @NoArgsConstructor(access = AccessLevel.PRIVATE, force = true) -@RequiredArgsConstructor public class User implements UserDetails{ private static final long serialVersionUID = 1L; @@ -29,14 +28,21 @@ public class User implements UserDetails{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; - - private final String username; - private final String password; - private final String displayname; - - @ManyToMany - private final List authorities; + private final String username; + private String password; + private String displayname; + + @ManyToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER) + private final List authorities; + + public User(String username, String password, String displayname, List authorities){ + this.username = username; + this.password = password; + this.displayname = displayname; + this.authorities = authorities; + } + @Override public boolean isAccountNonExpired() { return true; diff --git a/src/main/java/ru/redrise/marinesco/UserSettingsForm.java b/src/main/java/ru/redrise/marinesco/UserSettingsForm.java new file mode 100644 index 0000000..0e76648 --- /dev/null +++ b/src/main/java/ru/redrise/marinesco/UserSettingsForm.java @@ -0,0 +1,23 @@ +package ru.redrise.marinesco; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UserSettingsForm { + + @NotNull + @NotEmpty(message = "Display name could not be blank") + public String displayname; + public String newPassword; + + public boolean isNewPasswordSet(){ + return ! newPassword.isBlank(); + } + + public boolean isNewPasswordValid(){ + final int newPasswordLength = newPassword.length(); + return newPasswordLength > 8 && newPasswordLength < 32; + } +} diff --git a/src/main/java/ru/redrise/marinesco/security/RegistrationController.java b/src/main/java/ru/redrise/marinesco/security/RegistrationController.java index 8265a6e..5a27943 100644 --- a/src/main/java/ru/redrise/marinesco/security/RegistrationController.java +++ b/src/main/java/ru/redrise/marinesco/security/RegistrationController.java @@ -2,10 +2,14 @@ package ru.redrise.marinesco.security; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import jakarta.validation.Valid; import ru.redrise.marinesco.data.RolesRepository; import ru.redrise.marinesco.data.UserRepository; @@ -16,20 +20,33 @@ public class RegistrationController { private RolesRepository rolesRepo; private PasswordEncoder passwordEncoder; - public RegistrationController(UserRepository userRepo, RolesRepository rolesRepo, PasswordEncoder passwordEncoder){ + public RegistrationController(UserRepository userRepo, RolesRepository rolesRepo, PasswordEncoder passwordEncoder) { this.userRepo = userRepo; this.rolesRepo = rolesRepo; this.passwordEncoder = passwordEncoder; } + @ModelAttribute(name = "registrationForm") + public RegistrationForm form() { + return new RegistrationForm(); + } + @GetMapping - public String registerForm(){ + public String registerForm() { return "registration"; } @PostMapping - public String postMethodName(RegistrationForm registrationForm) { - userRepo.save(registrationForm.toUser(passwordEncoder, rolesRepo)); + public String postMethodName(@Valid RegistrationForm registerForm, Errors errors, Model model) { + if (registerForm.isPasswordsNotEqual()){ + model.addAttribute("passwordsMismatch", "Passwords must be the same."); + return "registration"; + } + if (errors.hasErrors()) { + return "registration"; + } + + userRepo.save(registerForm.toUser(passwordEncoder, rolesRepo)); return "redirect:/login"; } } diff --git a/src/main/java/ru/redrise/marinesco/security/RegistrationForm.java b/src/main/java/ru/redrise/marinesco/security/RegistrationForm.java index 65352f2..4878494 100644 --- a/src/main/java/ru/redrise/marinesco/security/RegistrationForm.java +++ b/src/main/java/ru/redrise/marinesco/security/RegistrationForm.java @@ -2,20 +2,28 @@ package ru.redrise.marinesco.security; import org.springframework.security.crypto.password.PasswordEncoder; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.Data; import ru.redrise.marinesco.User; import ru.redrise.marinesco.data.RolesRepository; @Data public class RegistrationForm { + @NotNull + @Size(min=3, max=32, message="Username must be at least 3 characters long. Should not exceed 32 characters.") private String username; + @NotNull + @Size(min=8, max = 32, message="Password must be at least 8 characters long. Should not exceed 32 characters.") private String password; + + private String passwordConfirm; + @NotNull - private String fullname; - @NotNull + @NotEmpty(message = "Display name could not be blank") private String displayname; public User toUser(PasswordEncoder passwordEncoder, RolesRepository rolesRepo){ @@ -25,4 +33,7 @@ public class RegistrationForm { displayname, rolesRepo.findByType(UserRole.Type.USER)); } + public boolean isPasswordsNotEqual(){ + return ! password.equals(passwordConfirm); + } } diff --git a/src/main/java/ru/redrise/marinesco/security/SecurityConfig.java b/src/main/java/ru/redrise/marinesco/security/SecurityConfig.java index 8aefdef..b45111a 100644 --- a/src/main/java/ru/redrise/marinesco/security/SecurityConfig.java +++ b/src/main/java/ru/redrise/marinesco/security/SecurityConfig.java @@ -45,19 +45,25 @@ public class SecurityConfig { public SecurityFilterChain filterChain(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception { return http .authorizeHttpRequests(autorize -> autorize + .requestMatchers(mvc.pattern("/favicon.ico")).permitAll() + .requestMatchers(mvc.pattern("/jquery.js")).permitAll() .requestMatchers(mvc.pattern("/styles/**")).permitAll() .requestMatchers(mvc.pattern("/images/*")).permitAll() .requestMatchers(mvc.pattern("/register")).permitAll() .requestMatchers(mvc.pattern("/login")).permitAll() + .requestMatchers(mvc.pattern("/error")).permitAll() + .requestMatchers(mvc.pattern("/")).hasAnyRole("ADMIN", "USER") + .requestMatchers(mvc.pattern("/profile/**")).hasAnyRole("ADMIN", "USER") .requestMatchers(PathRequest.toH2Console()).permitAll() //.requestMatchers(mvc.pattern("/design/**")).hasRole("USER") .anyRequest().denyAll()) + //.anyRequest().permitAll()) .formLogin(formLoginConfigurer -> formLoginConfigurer .loginPage("/login") - .loginProcessingUrl("/auth") + //.loginProcessingUrl("/auth") .usernameParameter("login") .passwordParameter("pwd") - //.defaultSuccessUrl("/", true) + .defaultSuccessUrl("/") ) // .formLogin(Customizer.withDefaults()) //.oauth2Login(c -> c.loginPage("/login")) diff --git a/src/main/java/ru/redrise/marinesco/security/UserSettingsController.java b/src/main/java/ru/redrise/marinesco/security/UserSettingsController.java new file mode 100644 index 0000000..cb03a4d --- /dev/null +++ b/src/main/java/ru/redrise/marinesco/security/UserSettingsController.java @@ -0,0 +1,82 @@ +package ru.redrise.marinesco.security; + +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.Errors; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import ru.redrise.marinesco.User; +import ru.redrise.marinesco.UserSettingsForm; +import ru.redrise.marinesco.data.UserRepository; + +@Slf4j +@Controller +@RequestMapping("/profile") +public class UserSettingsController { + private final UserRepository userRepo; + private final PasswordEncoder passwordEncoder; + + public UserSettingsController(UserRepository userRepo, PasswordEncoder passwordEncoder){ + this.userRepo = userRepo; + this.passwordEncoder = passwordEncoder; + } + + @ModelAttribute + public void addMisc(Model model, @AuthenticationPrincipal User user){ + final String displayName = user.getDisplayname(); + model.addAttribute("header_text", "Welcome " + displayName); + + UserSettingsForm form = new UserSettingsForm(); + form.setDisplayname(displayName); + model.addAttribute( "userSettingsForm", form); + } + + @ModelAttribute + public UserSettingsForm addSettingsForm(){ + return new UserSettingsForm(); + } + + @GetMapping + public String getPage(){ + return "redirect:/profile/settings"; + } + + + @GetMapping("/settings") + public String getSettingsFirstPage(){ + return "user_settings"; + } + + + @PostMapping("/settings") + public String getSettingsPage(@Valid UserSettingsForm userSettingsForm, + Errors errors, + @AuthenticationPrincipal User user, + Model model){ + if (errors.hasErrors()) + return "user_settings"; + if (! user.getDisplayname().equals(userSettingsForm.getDisplayname())) + user.setDisplayname(userSettingsForm.getDisplayname()); + if (userSettingsForm.isNewPasswordSet()){ + if (userSettingsForm.isNewPasswordValid()){ + user.setPassword(passwordEncoder.encode(userSettingsForm.getNewPassword())); + } + else{ + model.addAttribute("password_incorrect", "Password must be at least 8 characters long. Should not exceed 32 characters."); + return "user_settings"; + } + } + + log.info("{} {}", userSettingsForm.getDisplayname(), userSettingsForm.getNewPassword()); + userRepo.save(user); + + return "user_settings"; + } +} diff --git a/src/main/java/ru/redrise/marinesco/web/HandyErrorController.java b/src/main/java/ru/redrise/marinesco/web/HandyErrorController.java new file mode 100644 index 0000000..ea7c21f --- /dev/null +++ b/src/main/java/ru/redrise/marinesco/web/HandyErrorController.java @@ -0,0 +1,24 @@ + +package ru.redrise.marinesco.web; + +import org.springframework.boot.web.servlet.error.ErrorController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; + +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.http.HttpServletRequest; + +@Controller +public class HandyErrorController implements ErrorController{ + + @ModelAttribute(name = "code") + public String addMisc(HttpServletRequest request){ + return request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE).toString(); + } + + @RequestMapping("/error") + public String handleError(){ + return "error"; + } +} diff --git a/src/main/resources/static/jquery.js b/src/main/resources/static/jquery.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/src/main/resources/static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 + + + + + + title + + + +
+ ОШИБКА: +
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 3407fcd..8e0b0d0 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -16,6 +16,7 @@
H2 diff --git a/src/main/resources/templates/user_settings.html b/src/main/resources/templates/user_settings.html new file mode 100644 index 0000000..39a33c7 --- /dev/null +++ b/src/main/resources/templates/user_settings.html @@ -0,0 +1,26 @@ + + + + + Marinesco - Profile settings + + + + + +

welcome

+
+ Error +
+ +
+ + false +
+ +
+ + +
+ + \ No newline at end of file diff --git a/target/classes/ru/redrise/marinesco/RootController.class b/target/classes/ru/redrise/marinesco/RootController.class index 4bd5b3f3a7e1c1854d52d00fcc388ac8bd30862d..01ac401dc87344b3e7e45f935d896891a5d9b7ff 100644 GIT binary patch delta 19 bcmX@ga+GDmSw=?A$>$jT7$jT7`Z3QGHCz+L~RAH diff --git a/target/classes/ru/redrise/marinesco/ShinyApplicationRunner.class b/target/classes/ru/redrise/marinesco/ShinyApplicationRunner.class index 4475663cc00d38c564cd71384d50bdb4d2876fc9..31eb2e83fa8507c9dff71efa07cad043a040a1c4 100644 GIT binary patch delta 2139 zcmb7FTYD2#6kTUB>7>aNN}$1(5>usZ(ln$kRiG(YgmTeZpcSwPg^)}`N=U*a0SahT z6cxeSK@hZD6vazXTM-Bd;tl!qKY05IzVOE9J~N^42w$4XIs10jUVEMC$(rH%^51V= zx(Z+(ZYYo#{JdGN;L|17XsAk(5?(%Puc*stk(?gS4h19nP&%6mro)-cj+7n^t|%@# zlaW-EPq4J`ebPGVsFyd%E-EthKC>N)CJJdf!+ept?5%GufV8lELEj zt#zOYEee_$d`3?<*c7XZS!m_^Eq-|pLmipxTsE{ZSQkXM#*?LJ$9x6zOcwkU{TMoU zt=wjtjmK3yfQ39Juc_%|kXL0iU4$=Du@oJ`(A(K##}nvM@Ff3BuCP3XZhljqWoyC; z6)VxhTda$uw81AoXsx=x_I#^tSk2%F3z!=csaQPez%y8@ppPNI|Fi`N?6X+MZ(2ju z{R|V#z}s^YRBTic#wOlfva&IX0Ru2d|h=_*o4^Sn~Sbbd;4=d+Zqr&3u5wqvJ)9SrS8 zN?MO6V*`44t46Zf61>;3su;p9h7wa142|9{19Bpqj0G2N4(q+zwj4RNkk4?`2Mtee zRvZ_yVGqfoH<#9QW4v~3!}DT{dH#>mUHT&SDtL*(YpCNmn@kkGj90j3YihOORfZXN zQaySqp?M;@7S3u>yQjfJ?Z=aCp54zm5XI{%_TvqH!sf1UAc2D_-o#tPL_9f=VyO4> zo67Xg<(mezNH*kKt>7JE@=hNnS_PcJb;o*lcT_5@$1)5-p&COyYUzJPG5PM5%uq48 zx|~?)+!@i**?20MQSdQW?Nuv2Q4zpQ8_qCPEJ&vl@km(sJp7&=0}pCw zN73-3k^B$Q+DdN(`jG@fe6-A!4>FV<8irLKv5b(za#uBt?#`q9YSSOA&)4rbJnEG}{h^KEPSOb5#LrBy{_o>y1U5EYJ{u0yao! zvj(nXTA+Xk!%;XZ;fwRV_C8~BBhjE0) zIhopfpH?zeK0vJ>A)5P%x?}i&MDwBG-$P+$!ti*)@OZ*;N)S_@2!Dq6_mYdDY7M^PoH`?P@1B#_~YhQ_@AJVwr-OxV9N z?4uNIs?cq;`5-+#m_+a^=*Ve!m{dN4)KP0tVQSqsPKD2)LNXA`kldw&#k?h>j(I$6n@^jS+M4Q=E@@H|S)TKplY61z zVx9ZfJ2w{rJb)h*2n+%Ki>->+2;M85s|7LC*u;-j)bj;FWBYlX7-CDh&1X;Mb|m#& zK02Ld5F4BJIS|5H1+CmKg~T?j<9nolw2@(rnbIk*@LI8%K@LwGOr~wSTNyY>5$xx5MulLRuC zoYhQjB33-fZ!2dSr;t+c6amiYiPl_da>G<>UnY^zbQK3dJW7Y-I$c$Kg|brFt02qZ zGwEBjTIzLru4giNEAkBX*mPFYO)l-o;E=)BVTK4rR`R2^&6XKFqhOXV+JfShPt5ppTHZgMbzlnTRa_v3ERd4v$qfHnow0n1&lP;e zb!UV41upUP&Oe$zaf8-^;TsiiBI;7`H5nMxNII?Q+fy_}jbLA9sORB|RlLTf@ZX$@ zMZr8nZP}D$Zhpem<@7?rD%gnE3L3&~S64wmJ^fWIlz$D~PWrWx%;;8{Z=wOXOriiU zorV)oLkR%2P33I(TT^{Mblui%sakW(;Es;-rnC3$M{D#u!O=shKj5 z)D~XEOEd}_j^kyVpr$>TMd2igA~~h-3P}>Ba^h7=B2xg!E|vpMl><)V)Uy8@p`l6pWR=4Y-etGNXcU3&xgG>|10qHsNh^E3#w}$WmKqz7BpCF1p@r4qV53m*6y5 zJX^#E0*n!sR%Er=O)ZV+UN{Jrn-;B->eS$Vvs-T|-Ez0Jbj^9)HtMC!6?YOqp_aErvH{t*Q diff --git a/target/classes/ru/redrise/marinesco/User.class b/target/classes/ru/redrise/marinesco/User.class index 8f8f017d570dbc12fd676452410c47948a54e826..ba7444b8d30287ad7a677589d5a9a9b576756502 100644 GIT binary patch literal 5303 zcmb_gYjYcC6@FG;X(fAoiIdn-652F4tt~rIxD<$-q;YL0b+D6Q#|~|PbR)g7Honal`U#NBL#9xa=#>fUaTSx^=@URxM|>c>d~j zRSpbfG#qoi)uO*i^y)Rw+E7os-g?nj<(g*)Tg9^LsbY;9Dk`w-svl~biD+u%hHX_> zl;_*7vphGWK|8CVciMIQz;c2Wt6EcOS}1=s4Jo@qq4}mA^RBZxNy8UwPGE1S72CJ3 zR@Ic_xPcW=rLSQR;p>(cSjA2Gj2|ectcr6LijB10I-?xrS%IpAUneZ<2eMw>dK(FT z@8Z^`qJ%!ReDOR5#c_u*(J+`WdMS`#iQ-Mm_Zcrb)l;$k&8oE(p?j=au;wy=wxS2I z!?nP!7U$^zC38#ms$&H;kE%c;l*`L=0nq(t($=vLL_Nh&(fHUtZnvvtvxCm}}J z^2=6*UwWV|cskmSUC%7eE}UPP)sViXg7TV%``Zegmd#isJv((~c2Ps-xb4`%Ney$O zkxOBz#nI}V(+I@m*op@K|D)?21XaGOPrDV>jV_FucsIs0bd8R!>adBS zh$@;Gj;QyT*n_-={(1J^x!T56`xtBGmM&@8J$-Mf?djmFaC z7|qqa@Pi$Hj|ID`f;nm&934v(TR34PUuR92=w+u8CZUZwbyo|x(b)pJ&}i;Hu4a<` zEsUvTi#NX6aFUrjUf11VzJn^HKa9Hgvojf?&>gAJ9_}_RY>8s*g`oO~YOy?{o~kj^ z-3-X%CZ3QyWXqN_D_miI%)}WyCYApQ6PGX}yeCb381q71HL(y;6%*$o>Y9o3xWK{h zwob`7m-NF8)|AI8l4>836CfLMLb5kxHs@?#wAExpfaai$0Zqn0sG(*2?ueAM@FG~t zT#jKayxyh2Dz7hCn{kt6*DQZchC$dya}tNJ%3HZgURZs_fMk! z<6;=(0sJ)+&*KF){f4!!ctn@2;F2BCyXdgy{BV-WV#)2g{x?ptDPz?<+*?{?+O1Z3 zE#W!L?&)4~YhGEMwq@?*q+^fB7}2nw-`{>AnB@oym6a;PZa48BJ4m#`o~Df$#IK(7dMD&JA~66(h5w$ep&zf$MEaNMF(LN-}UUI#T$U z; zfqHQYT`x|d6U8aZL~)+bcm|qt4sTY|RnA4_8~BNaL)${s&S?Wb({SItp=_ZjLU@34 zri;HcGS~|PS<*RHZwlS~afEZ-$Mp`b`uQH z3WsmwNFlG^#?jw!w+rtT3@ry9f{syIKE}@#XxunWn85qE^ZrN^-w$&ocrjZGDKR`1 zQet{nNQv<}K0w-xQG2kDoDY(-L#Hr!69Mlapr5>F<3l*crlE*uce59@937n));^z$C5;n8&I~*PVBOXcNk|ZSZ zSPBQcbo3A>2^fm7jRcsO#c4)G0-DyikRb9HY7Od}VWxW(gKm|=fk#Bw{86P>D*u4<%rC{(%9UgeQaRZ4p{R1SwKd0mRE)L!Si zmyW+VUic-_`mOQ5KzkMGu3O`;LtB_A+`&h~C5g-DCip1nhyRA2y#5Au+=O{JuiwGP z>xe6*G$B_?nS5F>nKv+a6TSI#K9c}hC4(TVl+7Cg%EllgpG|w~l4#T=Gx=QPawC&(VijwQ(Qf<|Hb-5GL-n_~PF@!W z;;*nyN@ttBh$^WxZ^Ad)*pzW|!c!4B~J)-@S`m)sc!ocKl{X|$0`v)f1SPt2N@tZIX-@(&Q3jaz; zmyNt0?_{M&qAjbG4!2kzp-?uTu5Xn~nQ$x9*kaX0QmSNxTP&DZ$_Tgii(lK*yBL`n zr?(4V#TGtEC(^u;eu|Ww&(Gr1^tFrU=Ndl4pUwfjfX|Xj<8dB7pCgrFiiYudQU)pD zALxFI44ui+G$x3zxA<(XQ^MGdbRAH~=&h_6mPx>x$h)~Q*k}be@ohF@k?b~+rd0bq z3NlR3Hsb%7 literal 4950 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 diff --git a/target/classes/ru/redrise/marinesco/security/RegistrationForm.class b/target/classes/ru/redrise/marinesco/security/RegistrationForm.class index d875837c7957371b5084a7444a7495fdaa311a34..484ca3e721bb949483a76c953d3f5ee797fc09c8 100644 GIT binary patch literal 4948 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 diff --git a/target/classes/ru/redrise/marinesco/security/SecurityConfig.class b/target/classes/ru/redrise/marinesco/security/SecurityConfig.class index 437cc5ec59e55b96575f6648dfe509ec376695e2..f7a0cd9ed66ede310cde0466696b1c10d88c11d9 100644 GIT binary patch delta 1574 zcmah|dr(wm6#t!l-QCLt?p|UQ6j@Y)R$?2Q(#9wWwQQ6eK^uk{ohw{$nPr#mE)X+J zjDIwh_E5hbrdilK(+oE^r8Ik~**h(>ET#ARY4%d=++`E}r)KUw-}!#$+~4n<^L=;V zsx>w0-ogGI04k_lf{jon`aHQSwvFh!_;^O95^T~tLJiSKIh#b4veMQg2V1UbH_Wc` zmY5sY6Xakl-W4`t!9c)`8wj3Ys8w&a_HNu{ZB3&&6pI_C8_Ni;U^vq?_zN!5Lds}Ctg+8lbI}!wMn;wgGM$N`Kx~aDsJP#}SoPwQro}-OMlinVV z*R(e@7_pc*s4YpX&oRlf2YV&FLYOUd$N6Gmo+9!`WO3E6;x*BkyUD!=Zzy;ZZzalo zedIZSgA(2+%t>b#aOMa2Fi|nmVe<^&Qwg6C8vYH6)%m&h&+vI-bAGkW^#gvA@S|`Q zl-Pg9FXFs{BlNxSj;Zw>l|lGjK`rKGyKqd!Q9^F1@cMJK`6~Xhq9+uD(aO=|qIZm# zesTyVyMhhanC&8)ij8T^t>9(sVoXx8D~)9;*oXa$DJu5MnI~!&R~I9?hGVq$L=F<1vJdS zNL&FwW}y_-V)FRiGA)J+Ht-OHr+A?~pxr1gEzYH-DSNYJL$@Yj)+Euf6Wz}3SYBt> zR@T%xwA&fG)3F_qI{s?)|K@DPJ!z68u1n&6W=rCsKK^sz%GP;tMB>OI?ut|43usG|ctU$BiKMnI ziDxwKXUDLv4^Gai;M_}i5>tCvs1hnJ8y18QFW^N^IwhDwUIJK zLk;gv;`L#%EN&Kj0up8-3s;_|VV%v}9P1etv7mQSB7D2jA~Vum$$@^n3ncO0Fu5xw zKkGD7nI#ULQMiSCl;Y%@mgcPF)hgT>Na9G(fAKl_Z~Wp6J`4Gh5eL3vYva>Wd6n7w zhSzWT{f^&h-0-j5`fvCHf2O>@G02jP5s`zODbGb7lINz}49cQx$_0@xwI4~NXfzct q)kL^x4Ebp+@@O2^QZe$-NoP|jyy)ij9ByR*2PnY%LYhG5BJUq47Gd=O delta 1353 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 literal 0 HcmV?d00001 diff --git a/target/classes/static/jquery.js b/target/classes/static/jquery.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/target/classes/static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 + + + + + + title + + + +
+ ОШИБКА: +
+ + + \ No newline at end of file diff --git a/target/classes/templates/login.html b/target/classes/templates/login.html index 3407fcd..8e0b0d0 100644 --- a/target/classes/templates/login.html +++ b/target/classes/templates/login.html @@ -16,6 +16,7 @@
H2 diff --git a/target/classes/templates/user_settings.html b/target/classes/templates/user_settings.html new file mode 100644 index 0000000..39a33c7 --- /dev/null +++ b/target/classes/templates/user_settings.html @@ -0,0 +1,26 @@ + + + + + Marinesco - Profile settings + + + + + +

welcome

+
+ Error +
+ +
+ + false +
+ +
+ + +
+ + \ No newline at end of file